默认情况下,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. Replicated Ship 本地 kubernetes 环境试用

    关于介绍可以参考 https://github.com/replicatedhq/ship 或者我写的一个比较简单的demo https://www.cnblogs.com/rongfengliang ...

  2. jupyter命令把.ipynb文件转化为.py文件

    jupyter nbconvert --to script *.ipynb 就能把当前文件夹下面的所有的.ipynb文件转化为.py文件

  3. 客户端代码压缩成zip和服务器开启gzip

     1.我说的zip是打包完的js代码,用压缩工具压缩为zip文件,这样放CDN上,下载量会进一步缩小,提高进入游戏的速度   嗯,需要在游戏页用js解压zip文件  2.最简单的就服务器开启gzip 

  4. 手动部署etcd-2018-0731

    手动部署很简单,这里花了10分钟搞定 部署etcd 3台机器 etcd:由于 raft 算法的特性,集群的节点数必须是奇数 [root@linux-node1 ~]# cat /etc/hosts 1 ...

  5. 通过plsql develop查看建表语句

    右键--查看 右下角 如下显示,找出ddl语句 可以看到索引等

  6. Spring Boot 历史

    2012年10月,Mike Youngstrom在Spring jira中创建了一个功能需求,要求在Spring框架中支持无容器Web应用程序体系结构.他建议通过main方法引导的Spring容器内配 ...

  7. ML(1)——机器学习简述

    简述 机器学习是人工智能的一种实现方式:深度学习是一种实现机器学习的技术,或者说是一种特殊的机器学习方法,可以说广义上的机器学习也包括了深度学习,三者的关系如下图所示: 从判别垃圾邮件到无人驾驶技术, ...

  8. flutter 控制台快捷键

  9. Revit API 操作共享参数和项目参数

    1.获取共享参数 private string GetSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp) { Strin ...

  10. docker save/load、export/import 区别

    区别: save的对象是image,产生的文件需要用load来生成image: export的对象是container,产生的文件需要用import来生成image. save Save one or ...