更改hadoop native库文件后datanode故障

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

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

网上说是这样的

Hadoop的native是在32 bit环境下编译的,在64bit环境下运行会有问题,所以需要下载hadoop的源码在64bit环境下重新编译

然后在官方文档里找到了相应的解释

链接:http://hadoop.apache.org/docs/r2.5.1/hadoop-project-dist/hadoop-common/NativeLibraries.html

The pre-built 32-bit i386-Linux native hadoop library is available as part of the hadoop distribution and is located in the lib/native directory. You can download the hadoop distribution from Hadoop Common Releases.

Be sure to install the zlib and/or gzip development packages - whichever compression codecs you want to use with your deployment.

于是,按照官档里的说明在服务器上Build出新的hadoop,把native里面的库文件替换默认的的库文件,搞定,重启hadoop所有服务,自己写的mapreduce可以用了,那么接下来问题来了……发现hdfs进入了Safemode,说有个多少多少块corrupted,然后发现重启期间有同事在使用mapreduce,怀疑是这个原因造成了数据的损坏。由于数据有备份,于是手动解除Safemode,用hadoo fsck删掉了坏掉的数据块,此时是不提示corrupted了,可是惊奇的发现,datanode没有起来!

Hadoop datanode is dead and pid file exists

紧接着,找到存在的pid file,rm之,再起!还是不行!找到datanode的日志,发现有FATAL信息!

2014-11-26 14:35:49,577 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.SharedFileDescriptorFactory.createDescriptor0(Ljava/lang/String;Ljava/lang/St
ring;I)Ljava/io/FileDescriptor;
        at org.apache.hadoop.io.nativeio.SharedFileDescriptorFactory.createDescriptor0(Native Method)
        at org.apache.hadoop.io.nativeio.SharedFileDescriptorFactory.create(SharedFileDescriptorFactory.java:87)
        at org.apache.hadoop.hdfs.server.datanode.ShortCircuitRegistry.<init>(ShortCircuitRegistry.java:169)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initDataXceiver(DataNode.java:586)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:773)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:292)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1893)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1780)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1827)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2003)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2027)
2014-11-26 14:35:49,580 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
2014-11-26 14:35:49,582 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at carweb94/10.14.1.94

搜索了下,发现是native库文件的问题!好吧,这下找到元凶了,把默认的native库文件替换回来了,问题解决了。排错的过程中,这篇文章给了很大启发。

http://stackoverflow.com/questions/26467568/hadoop-2-5-0-failed-to-start-datanode

时间: 2024-08-02 14:50:50

更改hadoop native库文件后datanode故障的相关文章

很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用make更新函数库文件 后序 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>

linux的库文件

一.什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不兼容的. Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库.Linux系统有几个重要的目录存放相应的函数库,如/lib    /usr/lib. 二.静态函数库.动态函数库 A.  这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都被整合进目标代码中,他的优点就显而易见了,即编译后的执行

Android中生成库文件与移除以及导入jar包重复问题

1.项目右键-->properties-->android-->Is library-->Apply 2.在其他项目中就能通过add library引用到该库文件 其他项目导入该库文件后可看到引用的对应jar包: 引用库文件的好处在于可以对源代码进行修改 2.移除,注意不能从硬盘删除 即上面的选项不勾选 3.jar包重复问题 如果项目里有android-surport-v4  导入的jar包也有,则任意删除一份 否则报如下错误,通过log可看出是通过sha-1算法来验证两个jar包

Linux 库文件详解

转自: http://www.cppblog.com/deane/articles/165216.html http://blog.sciencenet.cn/blog-1225851-904348.html http://www.pchou.info/linux/2016/07/17/linux-libraries.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于wind

hadoop配置及无法移动文件到hdfs故障解析

首先博主用的64位ubuntu,hadoop官方只提供32位版本,这样的话启动本地库无法兼容,需要自己编译为64位版本,或下载别人编译好的64位版本. 下载好需要在etc/hadoop目录下改动以下几个配置 其中hadoop-env.sh中需要指定JAVA_HOME export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_75 core-site.xml配置 <configuration> <property> <name>fs.default.n

修改hadoop配饰文件文件后导致hive无法找到原有的dfs文件

修改了hadoop/etc/hadoop/core-site.xml文件中的 <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> 属性值后,会导致原有的hive数据找不到,需要到hive的metastore数据库中更改SDS表中的LOCATION属性,将对应的hdfs参数值改成新的值即可

解决hadoop启动后datanode无法启动问题

hadoop部署完成后datanode无法启动问题解决 1.检查是否有遗留的hadoop进程还在运行,如果有的话,先stop-all.sh或kill杀掉: 2.在master节点上,删除/tmp/hadoop-XXX/下的所有文件: 3.在slave节点上,删除/tmp/hadoop-XXX/下的所有文件: 4.格式化namenode,bin/hadoop namenode -format 5.bin/start-all.sh启动hadoop,检查.

hadoop多次格式化后,导致datanode启动不了,怎么办?(伪分布式)

根据当初 hadoop 安装目录下 conf 目录的 core-site.xml 的设置,找到该目录: 进入该目录 在 data 和 name 文件夹下均有  current 文件夹 ,和 current 文件夹下有 VERSION 文件 主要要做的是使这两个文件中的 namespaceID 相同 接下来就是修改 data 里的该文件文件: 进入到该目录下: 编辑文件: 保存,退出 重启电脑,启动 hadoop 守护进程 到此成功恢复!!! 来自为知笔记(Wiz) hadoop多次格式化后,导致

主库添加数据文件后,备库因为创建文件失败而停止数据同步

primary环境:11gR2 RAC+ASMstandby环境:本地单机 主库添加数据文件后,备库因为创建文件失败而停止数据同步. 1.查看主库环境的数据文件 SQL> select file#,status,name from v$datafile; FILE# STATUS NAME ---------- ------- -------------------------------------------- 1 SYSTEM +ABCE/test/datafile/system.293.