ОШИБКА сжатия Hadoop: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy () Z - PullRequest
1 голос
/ 20 марта 2019

Когда я запускаю Apache Kylin на Hadoop, я встретил следующую ошибку, связанную с Hadoop MapReduce:

2019-03-20 08:06:00,193 ERROR [main] org.apache.kylin.engine.mr.KylinMapper: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z     
at org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy(Native Method)     
at org.apache.hadoop.io.compress.SnappyCodec.checkNativeCodeLoaded(SnappyCodec.java:63)     
at org.apache.hadoop.io.compress.SnappyCodec.getCompressorType(SnappyCodec.java:136)     
at org.apache.hadoop.io.compress.CodecPool.getCompressor(CodecPool.java:150)     
at org.apache.hadoop.io.compress.CodecPool.getCompressor(CodecPool.java:168)     
at org.apache.hadoop.io.SequenceFile$Writer.init(SequenceFile.java:1304)     
at org.apache.hadoop.io.SequenceFile$Writer.<init>(SequenceFile.java:1192)     
at org.apache.hadoop.io.SequenceFile$BlockCompressWriter.<init>(SequenceFile.java:1552)     
at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:289)     
at org.apache.hadoop.io.SequenceFile.createWriter(SequenceFile.java:542)     
at org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat.getSequenceWriter(SequenceFileOutputFormat.java:64) 
at org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat.getRecordWriter(SequenceFileOutputFormat.java:75)     
at org.apache.hadoop.mapreduce.lib.output.LazyOutputFormat$LazyRecordWriter.write(LazyOutputFormat.java:113)     
at org.apache.hadoop.mapreduce.lib.output.MultipleOutputs.write(MultipleOutputs.java:468)

Полагаю, причина в том, что Hadoop не может найти нативную библиотеку libsnappy.so *. Я искал решение онлайн. Следуя этой ссылке , я уже добавил следующие свойства в соответствующие файлы XML и перезапущенные службы:

# For HDFS core-site.xml
<property>
  <name>io.compression.codecs</name>
  <value>
    org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.SnappyCodec
  </value>
</property>
# For MapReduce2 mapred-site.xml
<property>
  <name>mapreduce.admin.user.env</name>
  <value>LD_LIBRARY_PATH=/usr/hdp/${hdp.version}/hadoop/lib/native</value>
</propert
<property> 
  <name>mapreduce.map.output.compress</name>  
  <value>true</value>
</property>
<property>
  <name>mapred.map.output.compress.codec</name>  
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
  <name>mapreduce.output.fileoutputformat.compress</name>
  <value>true</value> 
</property> 
<property> 
  <name>mapreduce.output.fileoutputformat.compress.codec</name>
  <value>org.apache.hadoop.io.compress.SnappyCodec</value> 
</property> 

Однако это не сработало. Поэтому я копаюсь в журнале YARN. Я обнаружил, что в части launch_container.sh он имеет следующую команду:

export PWD="/hadoop/yarn/local/usercache/root/appcache/application_1553049994285_0013/container_e04_1553049994285_0013_01_000005"
# ...omit other commands
export LD_LIBRARY_PATH="$PWD"

Я думаю, что эта команда неверна, поскольку вместо $ PWD истинный путь к libsnappy.so * - это.

LD_LIBRARY_PATH=/usr/hdp/${hdp.version}/hadoop/lib/native

Также, как вы можете видеть, я уже установил LD_LIBRARY_PATH, чтобы он указывал на истинный путь в файле mapred-site.xml. Почему пряжа все еще использует $ PWD?

Кроме того, я добавил одно сообщение журнала, которое показано следующим образом. Это гарантирует, что env LD_LIBRARY_PATH действительно ошибочно установлен. Так как я могу решить эту проблему?

2019-03-20 08:06:00,044 INFO [main] org.apache.kylin.engine.mr.KylinMapper: linyanwen[from map]: /hadoop/yarn/local/usercache/root/appcache/application_1553049994285_0039/container_e04_1553049994285_0039_01_000005

Спасибо!

...