默认情况下,hadoop官方发布的二进制包是不包含native库的,native库是用C++实现的,用于进行一些CPU密集型计算,如压缩。比如apache kylin在进行预计算时为了减少预计算的数据占用的磁盘空间,可以配置使用压缩格式。

默认情况下,启动spark-shell,会有无法加载native库的警告:

19/02/14 09:55:41 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

1. 编译hadoop源码

具体请参见本人的博文

或者在hadoop源码根目录下,执行ant compile-native 编译本地库(未亲测)

编译好中之后在{hadoop_source_root}/hadoop-dist/target/hadoop-{hadoop_version}/lib/native会存在编译好的native库文件,具体路径,请自己替换为匹配的版本。在本人的机器上显示如下,本人机器上用的是hadoop-2.7.3,所以路径为

{hadoop_source_root}/hadoop-dist/target/hadoop-2.7.3/lib/native

[druid@palo101 native]$ ls -lh
total 4.6M
-rw-rw-r-- druid druid 1.2M Feb : libhadoop.a
-rw-rw-r-- druid druid 1.6M Feb : libhadooppipes.a
lrwxrwxrwx druid druid Feb : libhadoop.so -> libhadoop.so.1.0.
-rwxrwxr-x druid druid 710K Feb : libhadoop.so.1.0.
-rw-rw-r-- druid druid 465K Feb : libhadooputils.a
-rw-rw-r-- druid druid 425K Feb : libhdfs.a
lrwxrwxrwx druid druid Feb : libhdfs.so -> libhdfs.so.0.0.
-rwxrwxr-x druid druid 267K Feb : libhdfs.so.0.0.

2. 部署编译好的hadoop native库

.删除hadoop部署环境下的native库(如果存在的话)

rm -rf  $HADOOP_HOME/lib/native

复制编译好的native库到hadoop部署目录

scp  -r {hadoop_source_root}/hadoop-dist/target/hadoop-2.7./lib/native  {hadoop集群节点IP}:$HADOOP_HOME/lib

注意:复制到集群节点上.

3. 复制libjvm.so文件到$HADOOP_HOME/lib/native目录下

用ldd查看一下生成的native二进制文件的信息,发现libjvm.so找不到

[druid@palo101 native]$ sudo ldd $HADOOP_HOME/lib/native/libhadoop.so
linux-vdso.so. => (0x00007ffe12bad000)
libdl.so. => /lib64/libdl.so. (0x00007fee0127c000)
libjvm.so => not found
libc.so. => /lib64/libc.so. (0x00007fee00eba000)
/lib64/ld-linux-x86-.so. (0x00007fee016ba000)

所以我们在每台机器上执行下面脚本,把libjvm.so文件复制到hadoop native lib目录下

cp  $JAVA_HOME/jre/lib/amd64/server/libjvm.so   $HADOOP_HOME/lib/native

复制过去后,再执行一下下面的命令检查一下二进制native库

sudo ldd $HADOOP_HOME/lib/native/libhadoop.so

一切正常,说明部署已经没有问题了。下面就来做一下配置

4. 配置使用native库

4.1 hadoop启用native库

vim $HADOOP_HOME/etc/hadoop/core-site.xml

添加配置项

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

4.2 添加环境变量

vim /etc/profile

在末尾添加

export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native

也可以在shell窗口中执行这个命令,但是是临时生效,shell窗口关闭就失效了。

5. 在shell中验证是否成功

发现警告已经消失,成功使用了hadoop本地库.

spark使用hadoop native库的更多相关文章

  1. Hadoop支持的压缩格式对比和应用场景以及Hadoop native库

    对于文件的存储.传输.磁盘IO读取等操作在使用Hadoop生态圈的存储系统时是非常常见的,而文件的大小等直接影响了这些操作的速度以及对磁盘空间的消耗. 此时,一种常用的方式就是对文件进行压缩.但文件被 ...

  2. 更改hadoop native库文件后datanode故障

    hadoop是用cloudra的官方yum源安装的,服务器是CentOS6.3 64位操作系统,自己写的mapreduce执行的时候hadoop会提示以下错误: WARN util.NativeCod ...

  3. 4、解决native库不兼容

    解决native库不兼容 现象: 报警告 [root@hadoop1 hadoop-]# bin/hdfs dfs -ls /input // :: WARN util.NativeCodeLoade ...

  4. 对于spark以及hadoop的几个疑问(转)

    Hadoop是啥?spark是啥? spark能完全取代Hadoop吗? Hadoop和Spark属于哪种计算计算模型(实时计算.离线计算)? 学习Hadoop和spark,哪门语言好? 哪里能找到比 ...

  5. Spark与Hadoop计算模型的比较分析

    http://tech.it168.com/a2012/0401/1333/000001333287.shtml 最近很多人都在讨论Spark这个貌似通用的分布式计算模型,国内很多机器学习相关工作者都 ...

  6. Spark入门(1-1)什么是spark,spark和hadoop

    一.Spark是什么? Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎,可用来构建大型的.低延迟的数据分析应用程序. Spark是UC Berkeley AMP lab (加 ...

  7. [hadoop] hadoop native libraries 编译

    安装hadoop启动之后总有警告:Unable to load native-hadoop library for your platform... using builtin-Javaclasses ...

  8. Spark和hadoop的关系

    1. Spark VSHadoop有哪些异同点? Hadoop:分布式批处理计算,强调批处理,常用于数据挖掘和数据分析. Spark:是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速, ...

  9. Spark和Hadoop作业之间的区别

    Spark目前被越来越多的企业使用,和Hadoop一样,Spark也是以作业的形式向集群提交任务,那么在内部实现Spark和Hadoop作业模型都一样吗?答案是不对的. 熟悉Hadoop的人应该都知道 ...

随机推荐

  1. UML异步怎么表达

    直接看结果 第一虚框和第二虚框是异步的.m1 和m2 没有任何先后关系. 第一虚框和第二虚框是异步的,两者没有任何先后关系.m3和m4是有先后关系的.m3()比m4()先执行.同样m5()和m6().

  2. 性能测试之mysql监控、优化

    我们在做性能测试的目的是什么,就是要测出一个系统的瓶颈在哪里,到底是哪里影响了我们系统的性能,找到问题,然后解决它.当然一个系统由很多东西一起组合到一起,应用程序.数据库.服务器.中中间件等等很多东西 ...

  3. gitlab不小心把sign-in取消了怎么恢复

    环境和版本 [root@linux-node1 etc]# ll /var/cache/yum/x86_64/7/gitlab-ce/packages/ total 292928 -rw-r--r-- ...

  4. C# 线程:定时器的使用

    转载请注明出处:http://www.cnblogs.com/KeenLeung/p/3911556.html Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个 ...

  5. oracle之 单实例监听修改端口

    Oracle 单一主机多个实例多个监听器配置要点   1. 一台服务器主机, 有多个实例, 如: TSDB/ORCL; 又需要配置多个监听器 2. 需要指定不同的LISTENER端口   3.pmon ...

  6. 在单文件组件中,引入安装模块里的css的2种方式:script中引入、style中引入

    在单文件组件中,引入安装模块里的css的2种方式:script中引入.style中引入 1.script中引入 <script> import 'bulma/css/bulma.css' ...

  7. 正则匹配获取HTML图片地址,正则匹配获取HTML内容

    //正则匹配获取HTML图片地址preg_match_all('/<img.*?src="(.*?)".*?>/is', $str, $array); if (isse ...

  8. SPI 核软件调试记录

    SPI 核软件调试记录 1.首先说说int SpiFlashWaitForFlashReady(void)这一函数,基本上其它函数在执行的时候,都会事先执行一次此函数.    因为此函数的作用主要是用 ...

  9. 如何让classmethod只允许使用用类对象来调用

    Django REST framework里面有这样一段代码,在网上查@classonlymethod的意思是使得classmethod只允许使用用类对象来调用 @classonlymethod de ...

  10. 批量输出dwg文件中的文本

    公司来了一批图纸,里面有一部分内容需要复制到excel中,几百张来图每一张都 手工复制,烦死了.编写一个CAD插件,自动导出文本,简单记录在下面. 想法是: 1.输入命令,选择所有dwg文件 2.挨个 ...