gpt4 book ai didi

java - 加载 native-hadoop 库失败

转载 作者:可可西里 更新时间:2023-11-01 15:39:02 32 4
gpt4 key购买 nike

没有 -Djava.library.path=/opt/mapr/hadoop/hadoop-0.20.2/lib/native/Linux-amd64-64/作为运行 Java 的参数,我得到以下错误,

2013-11-13 15:23:29,414 WARN    pool-3-thread-3 org.apache.hadoop.util.NativeCodeLoader Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2013-11-13 15:23:29,414 INFO pool-3-thread-3 org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback Falling back to shell based

这是什么意思?使用基于 shell 的速度慢吗?我应该解决这个问题吗?我应该关心这个警告吗?

仅供引用,此错误(或 UnspecifiedLinkError)可以通过以下任一方法修复,

  • 有关设置 java.library.path 的详细信息,请参阅此答案 - rhive.connect() issues with MapR distribution
  • 在文件 hadoop-env.sh 中添加以下行

    export HADOOP_CLIENT_OPTS=-Djava.library.path=$HADOOP_HOME/lib/native/Linux-amd64-64/

感谢您的帮助。

最佳答案

对于您收到的 WARN 消息,我假设您已经弄明白了,但这只是意味着您没有使用 Hadoop 的本地库,这可能会更慢或者无法正常工作压缩包。

但是对于来自 JniBasedUnixGroupsMappingWithFallback 的第二条消息,它有点复杂。如果您查看源代码,您会看到类似这样的内容:

if (NativeCodeLoader.isNativeCodeLoaded()) {
this.impl = new JniBasedUnixGroupsMapping();
} else {
LOG.info("Falling back to shell based");
this.impl = new ShellBasedUnixGroupsMapping();
}

ShellBasedUnixGroupsMappingJniBasedUnixGroupsMapping 之间的唯一区别是 ShellBasedUnixGroupsMapping 将通过 bash -c groups 执行ProcessBuilder 用于确定用户属于哪个组,而 JniBasedUnixGroupsMapping 将使用 JNI 与 libC 通信以获取组列表。

我没有运行任何基准测试,但我认为与 libC 实现相比,ProcessBuilder 没有太多开销,因为它只是为了获取组,所以影响很小。话虽这么说,因为看起来您已经想通了,所以使用本地库在 Hadoop 的其他领域提高性能绝对没有坏处。

关于java - 加载 native-hadoop 库失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19966790/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com