赞
踩
背景: 在公司数据平台搭建完成后,hadoop的各个节点都正常启动。后面做完数据仓库,数据湖,添加了不少的组件,如atlas,ranger等数据治理等组件在hdp100上。后面因为服务器整体降配,需要重启,发现其他组件启动都没有问题,刚好在hdp100上这台的datanode和nodemanager均无法启动,报下面的错。
1)datandode无法启动
- java.lang.NoClassDefFoundError: io/netty/channel/EventLoopGroup
- at org.apache.hadoop.hdfs.server.datanode.DataNode.startInfoServer(DataNode.java:958)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:1418)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:501)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2806)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2714)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2756)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2900)
- at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2924)
- Caused by: java.lang.ClassNotFoundException: io.netty.channel.EventLoopGroup
- at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
- at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
- ... 8 more
解决过程:
1,首先想到的是后面添加的组件影响了hadoop的启动环境,如 jdk版本,以及依赖冲突,反复和其他节点正常启动的对比,没有相关的问题 。
2,既然这个错误报的显然是没有找到依赖,但之前好好的,为啥又不行呢?去仔细看了看jvm的加载原理,研究了很久,貌似也不能找出病因。
最终的办法:既然找不出问题,因为故障之前有很多的的组件引入,时间跨度太长,就不考虑其他,从问题入手。这里就去下载 io.netty的jar包,把该jar包放到hadoop里面所有的存jar的目录(因为不知道到底这里加载的是哪个jar,这样最保险),重新启动,发现ok!
依赖:
- <dependency>
- <groupId>io.netty</groupId>
- <artifactId>netty-all</artifactId>
- <version>4.1.32.Final</version>
- </dependency>
结果:正常连接上。
2,nodemanager无法启动
- java.lang.NoClassDefFoundError: org/iq80/leveldb/DBException
- at java.lang.Class.forName0(Native Method)
- at java.lang.Class.forName(Class.java:348)
- at org.apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.java:2575)
- at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2540)
- at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2636)
- at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2662)
- at org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServices.serviceInit(AuxServices.java:270)
- at org.apache.hadoop.service.AbstractService.init(AbstractService.java:164)
- at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:108)
- at org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl.serviceInit(ContainerManagerImpl.java:323)
- at org.apache.hadoop.service.AbstractService.init(AbstractService.java:164)
- at org.apache.hadoop.service.CompositeService.serviceInit(CompositeService.java:108)
- at org.apache.hadoop.yarn.server.nodemanager.NodeManager.serviceInit(NodeManager.java:478)
- at org.apache.hadoop.service.AbstractService.init(AbstractService.java:164)
- at org.apache.hadoop.yarn.server.nodemanager.NodeManager.initAndStartNodeManager(NodeManager.java:936)
- at org.apache.hadoop.yarn.server.nodemanager.NodeManager.main(NodeManager.java:1016)
- Caused by: java.lang.ClassNotFoundException: org.iq80.leveldb.DBException
- at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
- at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
- ... 16 more
还是按照上面的步骤,把jar都放一边都目录,发现不行。说明这个包有问题,或者版本不兼容。
- <dependency>
- <groupId>org.iq80.leveldb</groupId>
- <artifactId>leveldb</artifactId>
- <version>0.7</version>
- </dependency>
-
思考再三,去其他正藏启动节点查询号leveldb的包,果然查到!
- [liuz@hdp103 hadoop]$ find . -name *level*
- ./hdfs/lib/leveldbjni-all-1.8.jar
把这个jar放到对应的目录下,启动果然可以解决!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。