视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Hadoop运维笔记之Snappy创建libhadoop.so导致datanode报错
2020-11-09 12:58:58 责编:小采
文档


为了解决上一篇文章中提到的Bug,我们将线上的CDH5升级到了目前最新的CDH5.2.0,但升级之后,有一部分服务器的datanode不能正常启动,报错如下: 2014-11-20 19:54:52,071 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Unexpected exception in b

为了解决上一篇文章中提到的Bug,我们将线上的CDH5升级到了目前最新的CDH5.2.0,但升级之后,有一部分服务器的datanode不能正常启动,报错如下:

2014-11-20 19:54:52,071 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Unexpected exception in block pool Block pool  (Datanode Uuid unassigned) service to idc1-server1/10.100.1.100:8020
com.google.common.util.concurrent.ExecutionError: java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO.link0(Ljava/lang/String;Ljava/lang/String;)V
	at com.google.common.util.concurrent.Futures.wrapAndThrowExceptionOrError(Futures.java:1126)
	at com.google.common.util.concurrent.Futures.get(Futures.java:1048)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage.linkBlocks(DataStorage.java:870)
	at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.linkAllBlocks (BlockPoolSliceStorage.java:570)
	at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.doUpgrade (BlockPoolSliceStorage.java:379)
	at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.doTransition (BlockPoolSliceStorage.java:313)
	at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.recoverTransitionRead (BlockPoolSliceStorage.java:187)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead (DataStorage.java:309)
	at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1109)
	at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1080)
	at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo (BPOfferService.java:320)
	at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake (BPServiceActor.java:220)
	at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:824)
	at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO.link0 (Ljava/lang/String;Ljava/lang/String;)V
	at org.apache.hadoop.io.nativeio.NativeIO.link0(Native Method)
	at org.apache.hadoop.io.nativeio.NativeIO.link(NativeIO.java:838)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage$2.call(DataStorage.java:862)
	at org.apache.hadoop.hdfs.server.datanode.DataStorage$2.call(DataStorage.java:855)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	... 1 more
2014-11-20 19:54:52,073 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service for: Block pool  (Datanode Uuid unassigned) service to idc1-server1/10.100.1.100:8020

但搜遍了Google也未能找到匹配的信息,唯一沾点边的都是一些在Windows平台上因为缺少lib导致的问题。
而在我们的环境中,只有一部分的服务器有以上问题,对比了所有Hadoop相关的软件包之后都没法发现有什么不同,这给我们分析问题带来了很大的干扰。

最后,我们尝试通过strace来跟踪datanode的进程。
yum install strace
strace -f -F -o /tmp/strace.output.txt /etc/init.d/hadoop-hdfs-datanode start
lsof | grep libhadoop.so

java 18527 hdfs mem REG 253,0 122832 270200 /usr/java/jdk1.7.0_45/jre/lib/amd/libhadoop.so

发现它读取了一个lib文件:/usr/java/jdk1.7.0_45/jre/lib/amd/libhadoop.so,而其它正常的服务器的datanode进程则是读取的/usr/lib/hadoop/lib/native/libhadoop.so。
经过验证发现/usr/java/jdk1.7.0_45/jre/lib/amd/libhadoop.so是在安装Snappy软件包时创建的,在移走了它之后,datanode终于正常启动了。

看来,虽然datanode在启动时指定了 -Djava.library.path=/usr/lib/hadoop/lib/native,但jre中的lib被载入的优先级还是要高一些。

下载本文
显示全文
专题