hadoop启动hdfs异常

简介: hadoop启动hdfs异常

hadoop启动hdfs异常 util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

记录一下安装hadoop遇到的问题,以便后面再次遇到有个解决方式的记录,也方便其他人解决相同的问题。在安装好hadoop后,start-dfs.sh的时候报了util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable。
从字面上来看就是本地的hadoop的库并不适用于本机的平台。网上搜索后发现可能是以下三种问题导致的:

问题一:native-hadoop的库是32位的,而系统是64位的导致不可用。

进入到hadoop目录下的lib/native目录下,linux系统使用

file libhadoop.so.1.0.0
得到的结果是
libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=2c6a0dae993e827ec637437f921b30279487049c, not stripped

可以看到本地hadoop的库是64位的,我的电脑也是64位的。所以应该不是这个版本的问题

问题二:/etc/profile中没有添加依赖库的地址。

这个确实我没有添加过
(1).需要在/etc/profile中添加

export HADOOP_HOME=/Users/scott/hadoop-3.2.0
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

然后在使用source /etc/profile重新执行该文件使配置生效。
(2).需要在hadoop-env.sh添加同样的配置

注:我这一步弄完其实hdfs就可以启动起来了,但是依然会报标题那个warn。但是不影响使用了。

问题三:libhadoop.so.1.0.0缺少了依赖库或者glibc

linux:

使用ldd命令去查看libhadoop.so.1.0.0文件是不是缺少了动态依赖库
如果出现

./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
        linux-vdso.so.1 =>  (0x00007fff369ff000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f3caa7ea000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f3caa455000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3caac1b000)

这种类似的就是glibc版本问题,使用ldd --version可以查看版本。

# ldd --version
ldd (GNU libc) 2.13
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

如果发现版本是低于刚才上面出现的GLIBC_2.14,就需要升级glibc版本。这个比较麻烦,而且有一定风险,我遇到的不是这个问题,所以没有实践这个操作。可以参考升级glibc版本

mac:

还有一种情况呢,就是有的朋友可能是在mac上安装的hadoop,我也这样尝试了。首先排除了问题一后,问题二基本上就解决了问题。如果尝试问题三会发现,mac上没有ldd这个命令,网上说使用otool -L 文件,这样是行不通的。
libhadoop.so是C写的。需要安装binutils,然后使用binutils中的readelf命令。
readelf -d 文件|grep NEED
[外链图片转存失败(img-lOWFKq2J-1566735878129)(https://user-gold-cdn.xitu.io/2019/8/25/16cc7731fa3266b6?w=2134&h=236&f=jpeg&s=129837)]
这里-d就是查看动态依赖库,grep NEED就是需要的库。
不过这里其实只是列举一下readelf的用法

如果要去除这个warn可以在hadoop的文件夹下的/etc/hadoop/log4j.properties中添加
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
把错误级别调成ERROR就不会报这个warn了。

相关文章
|
8月前
|
XML 存储 分布式计算
【赵渝强老师】史上最详细:Hadoop HDFS的体系架构
HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。
899 70
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
493 6
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
205 3
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
251 2
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
322 0
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
192 0
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
237 0
|
8月前
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
395 79
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
284 2
|
11月前
|
存储 分布式计算 大数据
Flume+Hadoop:打造你的大数据处理流水线
本文介绍了如何使用Apache Flume采集日志数据并上传至Hadoop分布式文件系统(HDFS)。Flume是一个高可用、可靠的分布式系统,适用于大规模日志数据的采集和传输。文章详细描述了Flume的安装、配置及启动过程,并通过具体示例展示了如何将本地日志数据实时传输到HDFS中。同时,还提供了验证步骤,确保数据成功上传。最后,补充说明了使用文件模式作为channel以避免数据丢失的方法。
546 4

相关实验场景

更多
下一篇
oss云网关配置