我只是按照Cloudera文档中的步骤操作,并在群集上安装了GPL Extras Parcel,并通过Cloudera Manager配置了HDFS服务。但是当尝试在HDFS上读取.lzo文件时出现错误:
$hadoop fs -text /tmp/Lzo/log.txt.lzo
INFO lzo.GPLNativeCodecLoader: Loaded native gpl library
WARN lzo.LzoCompressor: java.lang.NoSuchFiledError: lzoCompressLevelFunc
ERROR lzo.LzoCodec: Failed to load/initialize native-lzo library
-text: Fatal internal error
java.lang.RuntimeException: native-lzo library not available
我已经阅读了十几篇帖子,并且知道它是由JNI加载lzo库失败引起的,但是没有一个能够正确解决我的问题。以下是我所做的努力:
1.所有数据节点都安装了lzop
mapred-site.xml中的2.JAVA_LIBRARY_PATH设置为/ opt / cloudera / parcels / CDH / lib / hadoop / lib / native,其中包含liblzo2。*文件。
3.HADOOP_CLASSPATH设置为/ usr / local / lib,其中包含hadoop-lzo.jar文件。
我还能做什么?任何建议将不胜感激!
答案 0 :(得分:2)
问题解决了!它是由java.lang.NoSuchFiledError引起的。 Hadoop-lzo-0.4.15没有字段lzoCompressLevelFunc,当我切换到hadoop-lzo0.4.20时,WARN和ERROR都消失了。
答案 1 :(得分:0)
我今天也遇到了这个问题,花了很长时间才弄清楚实际根本原因是什么。
所以我想在这里总结一下这个问题:简而言之,jar和本地库需要兼容,确保这一点的最佳方法是从相同版本的源代码生成(构建)它们。
我昨天遭受的是我使用hadoop-gpl-compression.jar,但我使用的本机库是从hadoop-lzo构建的。所以这里存在兼容性问题。我之后做的是从hadoop-gpl-compression项目而不是hadoop-lzo构建本机库,然后它可以工作。
如果您使用的是从hadoop-lzo构建的jar,那么您还应该使用从该库构建的本机库,最好使用相同版本的源来构建本机库。
如果您正在使用从hadoop-gpl-compression项目构建的jar,那么您还应该使用从它构建的本机库,最好使用相同版本的源来构建本机库。