在设置Cloudera Hadoop上的Lzo时,加载本地lzo库失败。

3

我刚刚按照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。
2. mapred-site.xml中的JAVA_LIBRARY_PATH设置为/opt/cloudera/parcels/CDH/lib/hadoop/lib/native,其中包含liblzo2.*文件。
3. HADOOP_CLASSPATH设置为/usr/local/lib,其中包含hadoop-lzo.jar文件。

还可以做什么?欢迎提出建议!


请查看以下链接:https://dev59.com/PWAg5IYBdhLWcg3wjroZ - BruceWayne
感谢您的建议!我的群集与那个略有不同,因为我正在使用CDH 5.6,它与存储库中的任何版本的HADOOP_LZO包都不匹配,而是使用一个GPL EXTRAS包,其中包含hadoop-lzo-0.4.15-cdh5.6.0.jar。我在想它们是否相等? - Paul Lam
3个回答

2

问题已解决!这是由java.lang.NoSuchFieldError引起的。Hadoop-lzo-0.4.15没有lzoCompressLevelFunc字段,当我切换到hadoop-lzo0.4.20时,警告和错误都消失了。


0

今天我也遇到了这个问题,花费了很长时间才找出实际的根本原因。

所以我想在这里总结一下这个问题:简而言之,JAR包和本地库需要兼容,确保最好的方法是从相同版本的源代码生成(构建)它们。

昨天我遇到的问题是我正在使用hadoop-gpl-compression.jar,但我使用的本地库是从hadoop-lzo构建的。所以这里存在兼容性问题。之后我做的是从hadoop-gpl-compression项目构建本地库,而不是从hadoop-lzo构建,然后它就可以工作了。

如果您正在使用从hadoop-lzo构建的JAR包,则还应该使用从该库构建的本地库,并且最好使用相同版本的源代码来构建本地库。

如果您正在使用从hadoop-gpl-compression项目构建的JAR包,则还应该使用从中构建的本地库,并且最好使用相同版本的源代码来构建本地库。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接