Hadoop的本地库(Native Libraries)介绍

2019-03-28 13:59|来源: 网络

Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通过本地库,Hadoop可以更加高效地执行某一些操作。

目前在Hadoop中,本地库应用在文件的压缩上面:

在使用这两种压缩方式的时候,Hadoop默认会从$HADOOP_HOME/lib/native/Linux-*目录中加载本地库。

如果加载成功,输出为:

DEBUG util.NativeCodeLoader - Trying to load the custom-built native-hadoop library...
INFO util.NativeCodeLoader - Loaded the native-hadoop library

如果加载失败,输出为:

INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

在Hadoop的配置文件core-site.xml中可以设置是否使用本地库:

<property>
  <name>hadoop.native.lib</name>
  <value>true</value>
  <description>Should native hadoop libraries, if present, be used.</description>
</property>

Hadoop默认的配置为启用本地库。

另外,可以在环境变量中设置使用本地库的位置:

export JAVA_LIBRARY_PATH=/path/to/hadoop-native-libs

有的时候也会发现Hadoop自带的本地库无法使用,这种情况下就需要自己去编译本地库了。在$HADOOP_HOME目录下,使用如下命令即可:

ant compile-native

编译完成后,可以在$HADOOP_HOME/build/native目录下找到相应的文件,然后指定文件的路径或者移动编译好的文件到默认目录下即可。

相关问答

更多
  • 解决方案很简单,很多感谢@ praetorian-droid try { Set libs = new HashSet(); String mapsFile = "/proc/" + android.os.Process.myPid() + "/maps"; BufferedReader reader = new BufferedReader(new FileReader(mapsFile)); String ...
  • 我假设你在64位CentOS上运行Hadoop。 你看到这个警告的原因是本机Hadoop库$HADOOP_HOME/lib/native/libhadoop.so.1.0.0实际上是在32位上编译的。 无论如何,这只是一个警告,不会影响Hadoop的功能。 如果您想要消除此警告,请下载方法,下载Hadoop的源代码,并在64位系统上重新编译libhadoop.so.1.0.0 ,然后替换32位系统。 这里包含有关如何重新编译源代码的步骤,适用于Ubuntu: http://www.ercoppa.org/L ...
  • 最近的hadoop tarball似乎只带有64位库。 你可以自己编译,尽管我自己没有测试过。 您必须下载hadoop的源tarball并安装以下软件包: GCC(或其他C编译器) GNU Autotools(autoconf,automake,libtool) zlib开发包 openssl开发包 行家 安装完成后,您可以使用源tarball中包含的标准hadoop pom.xml文件来编译本机库: $ mvn package -Pdist,native -DskipTests -Dtar 这些库可以在 ...
  • 使用Avro,Parquet,Sequence File,ORC等完成Hadoop中的服务...您可以在java程序中使用上述任何一项。 您需要了解hadoop使用上述其中一种血清格式。 所以你不需要那些Hadoop库。 Serilization in Hadoop is done using Avro, Parquet, Sequence File, ORC e.t.c ... You can use any of the above in your java program. You need to u ...
  • 自己找到答案。 我要做的是在我的所有节点上安装这个库(不仅仅是在master上) Found answer by myself. What I have to do - is to install this library on all of my nodes (not just on master)
  • 尝试使用以下类路径: -classpath%hadoop_home%\ hadoop-core-1.1.0-SNAPSHOT.jar;%hadoop_home%\ lib \ commons-cli-1.2.jar Try using the following classpath: -classpath %hadoop_home%\hadoop-core-1.1.0-SNAPSHOT.jar;%hadoop_home%\lib\commons-cli-1.2.jar
  • 正如它公开记录的那样,它们使用JNI为特定平台调用本地共享库。 至于从C代码调用JVM,JVM使用共享库(DLL,SO等)。 对JDK 6源代码的快速搜索不会显示核心本地支持的任何System.loadLibrary()(如Object,String等中的本机方法)。 这表明,这些方法的本地代码似乎在DLL中由JRE / bin目录的内容判断,由java.exe(和Windows中的javaw.exe)显式链接。 当我上次查看这些东西时,从C代码调用JVM的要求是JNI的一个有据可查的部分 - 我强烈建议您 ...
  • 要跟踪事件,您可以在react-native中使用google analytics作为javascript或本机实现。 关键的区别在于,在本机实现中,您可以自动处理一些元数据。 (例如设备UUID,设备型号,视口大小,操作系统版本)。 Javascript实现: https : //github.com/react-ga/react-ga 原生桥: https : //github.com/idehub/react-native-google-analytics-bridge To track events ...
  • 只有当每个实现的库都有反应原生模块包装器时,您才可以使用java脚本端的那些。 有关如何实现本机模块的更多信息,请访问https://facebook.github.io/react-native/docs/native-modules-android.html#content https://facebook.github.io/react-native/docs/本机模块,ios.html#内容 Yes, there are two ways: If the libraries/modules were ...
  • 是的,但您需要使用VAPI来解释如何将C库绑定到Vala。 执行此操作的简单方法是使用GObject Introspection 自动生成绑定 ,但由于LAME不使用GObject,因此唯一的选择是手动编写它们。 有一些关于该过程的文档 ,并且它比编写用于在其他语言中处理C的包装器容易得多,但它对于初学者来说仍然有些令人生畏 - 你应该考虑通过GIMPnet上的#vala频道来获取帮助当你正在开发绑定时。 也就是说,Vala包含GStreamer的绑定,其中包含使用LAME 的元素 。 如果我在你的鞋子里, ...