Использование сжатия Snappy в Spark в Google Kubernetes Engine - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть служба, работающая в контейнере Docker в Google Kubernetes Engine. Она записывает данные в облачное хранилище Google, сохраняя их в виде файла .avro с использованием сжатия Snappy.

conf.setBoolean("mapreduce.output.fileoutputformat.compress", true)
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec")

Отлично работает.Затем я настроил новый проект, развернул его в новом контейнере, и он не работал, служба и файл Docker совпадают, но я получаю эту ошибку:

 org.apache.spark.internal.io.SparkHadoopWriter$$anonfun$3.apply(SparkHadoopWriter.scala:83) 

в org.apache.spark.internal.io.SparkHadoopWriter $$ anonfun $ 3.apply (SparkHadoopWriter.scala: 78) в org.apache.spark.scheduler.ResultTask.runTask (ResultTask.scala: 87) в org.apache.spark.sc.Task.run (Task.scala: 109) в org.apache.spark.executor.Executor $ TaskRunner.run (Executor.scala: 345) ... еще 3 Причины: java.lang.NoClassDefFoundError: Не удалось инициализировать класс org.xerial.snappy.Snappy в org.apache.avro.file.SnappyCodec.compress (SnappyCodec.java:43) в org.apache.avro.file.DataFileStream $ DataBlock.compressUsing (DataFileStream.java:358) в org.apache.avro.file.DataFileWriter.writeBlock (DataFileWriter.java:382) в org.apache.avro.file.DataFileWriter.sync (DataFileWriter.java:401) в org.apache.avro.file.DataFileWriter.flush (DataFileWriter.j: 410) at org.apache.avro.file.DataFileWriter.close (DataFileWriter.java: 433) по адресу org.apache.avro.mapreduce.AvroKeyRecordWriter.close (AvroKeyRecordWriter.java:83) по адресу org.apache.spark.internal.io.HadoopMapReduceWriteConfigUtil.close.rit. 36. sparescadg.rg: SparkHala.internal.io.SparkHadoopWriter $$ anonfun $ 4.apply (SparkHadoopWriter.scala: 137) в org.apache.spark.internal.io.SparkHadoopWriter $$ anonfun $ 4.apply (SparkHadoopWriter.scala: 127) в org.apache..util.Utils $ .tryWithSafeFinallyAndFailureCallbacks (Utils.scala: 1415) в org.apache.spark.internal.io.SparkHadoopWriter $ .org $ apache $ spark $ internal $ io $ SparkHadoopWriter $$ executeTask (SparkHadoopWer 13)... еще 8 Подавлено: java.lang.NoClassDefFoundError: Не удалось инициализировать класс org.xerial.snappy.Snappy в org.apache.avro.file.SnappyCodec.compress (SnappyCodec.java:43) в org.apache.avro.file.DataFileStream $ DataBlock.compressUsing (DataFileStream.java:358) в org.apache.avro.file.DataFileWriter.writeBlock (DataFileWriter.java:382) в org.apache.avro.file.DataFileWriter.sync (DataFileWriter.java:401) в org.apache.avro.file.DataFileWriter.flush (DataFileWriter.java:410) в org.apache.avro.file.DataFileWriter.close (DataFileWriter.java:433) в org.apache.avro.mapreduce..apply $ mcV $ sp (SparkHadoopWriter.scala: 142) по адресу org.apache.spark.util.Utils $ .tryWithSafeFinallyAndFailureCallbacks (Utils.scala: 1424)

Странно.Файл snappy jar все еще присутствует в образе Docker - поэтому я не знаю, почему служба не может загрузить класс.

Работает, если я отключаю сжатие (что не идеально).Возможно, библиотеки сжатия, поддерживаемые Google Cloud Storage, изменились?Какие-либо предложения?(Я открыт для других библиотек сжатия)

...