大数据初学者需要看哪些Hadoop问题和解决方案?

相信你在学习大数据hadoop的时候肯定会遇到各种各样的问题。本文就是介绍一些常见的问题以及如何解决。

1,namenode无法启动,未报告错误。

可能的原因是之前由root启动,改变了当前文件夹的权限和所有权,需要改回来。

解决方案:当前文件夹位于与hadoop安装目录同级的tmp/dfs/namesecondary中。

2、警告util。NativeCodeLoader:无法为您的平台加载本机hadoop库

原因:查看本地文件:

[root @ db96 Hadoop]# file/usr/local/Hadoop/lib/native/lib Hadoop . so . 1 . 0 . 0

/usr/local/Hadoop/lib/native/libhadoop . so . 1 . 0 . 0:ELF 32位LSB共享对象,

英特尔80386,1版(SYSV),动态链接,非剥离

它是安装在64位linux系统上的32位hadoop。Lib包编译环境不同,无法使用。

解决方法:重新编译hadoop。也就是重新编译hadoop软件。

3、Hadoop错误被复制到0个节点,而不是1。

原因(1)namespaceid不同(2)硬盘不足。

解决方案(1)停止datanode(2)删除datadir下的所有数据。(3)重启datanode

4、报告块的比率0.0000没有达到阈值0.9990。安全模式将自动关闭。

原因:从日志中可以看出/home/hadoop/tmp/mapred/system无法删除(其实这只是一种错觉,我们经常纠结于这个目录,其实并不是)。

求解:

(1):最终的解决方案是强制退出安全模式。

Hadoop DFS admin-安全模式离开

这种方法虽然快,但是会有遗留问题,我在使用habse的时候就遇到过。很麻烦,然后可以用“hadoop fsck/”工具慢慢恢复。

(2):删除namenode /home/hadoop/tmp下的所有文件,并格式化。当然这种方法很暴力,因为你的数据完全没了。

(3):参考源代码,可以发现这个错误是在检查文件的时候抛出的,基本上是文件的块丢失错误造成的。

这种情况在份数为1时会很困难。其他时候hadoop基本可以自己解决,错误多的时候会一直处于safemode。当然,关于修改配置文件后集群的分发,我写了一个配置文件分发工具,可以强制其离开安全模式,保证正常读写,然后启用“hadoop fsck/”工具慢慢修复。

5、拒绝用户“root”@“Hadoop 1 master”的访问(使用密码:是)

原因:除了本地用户,没有来自其他用户的远程连接。

解决方案:修改mysql表并将localhost改为%

6.运行本地wordcount来报告错误。

错误在于文件Hadoop。dll(Hadoop 2 . 6 . 0编译的版本)丢失,需要将hadoop.dll复制到目录hadoop2.6.0/bin。

再次运行,没有错误。

7.运行api的时候,我报了权限问题,用的是hadoop,我们想用root。

原因:在配置环境变量中设置了HADOOP_USER_NAME=hadoop或者在运行配置中设置了-DHADOOP_USER_NAME=hadoop。

解决方案:在配置环境变量中设置HADOOP_USER_NAME=root,或者在运行配置中设置-DHADOOP_USER_NAME=root。

8.org.apache.hadoop.dfs.safemode异常:name节点处于safemode安全模式。

解决方法:bin/Hadoop DFS admin-safe mode leave就是关闭Hadoop的安全模式,这样问题就解决了。

9、使用java -jar执行hadoop作业出错。

原因:带有hadoop的mapreduce在执行时变得依赖hadoop的大部分依赖项,所以上面的错误是缺少hadoop的依赖包。

解决方案:(1)建议使用hadoop -jar执行作业。(2)如果使用java -jar,需要使用java -cp将hadoop所依赖的所有jar拼接到路径中。(3)如果使用java -jar,另一种是打包时将hadoop所依赖的jar打包在一起。

10.运行mr程序并向UNSATISFIEDLINKERROR:native io报告。nativio $ windows . access 0(ljava/lang/string。

通常,这个问题是由本地hadoop环境变量来说明的。你需要设置hadoop_home变量的值。注意,hadoop安装目录下的bin目录中缺少动态库,如hadoop.dll和winutils.exe。还要将bin目录添加到路径中。另外,编辑需要添加hadoop环境,注意jdk是否安装正确。

11.使用hdfs的copyfromlocal将文件上传到hdfs时,在本地文件中发现异常,但本地文件确实存在。

原因:windows设置了隐藏已知文件扩展名的功能,导致上传的文件没有写扩展名。

解决方法:在文件上传的地方加一个扩展名就可以了。

12.执行hadoop-deamon.sh start xxx时报告错误。

原因:启动时,节点名称拼写错误。

解决方法:修改名称,名称是,namenode datanode等。

13,hadoop 8088看不到mapreduce任务的执行状态,没有数据显示。

解决方案:

(1)首先,检查配置$ Hadoop _ home/conf/map red-site . XML是否存在于您的集群中。

是否配置了mapreduce.framework.name。

(2)如果没有,请在$ Hadoop _ home/conf/map red-site . XML中的原始配置文件中添加以下内容。

MapReduce . job history . address name & gt;

master:10020 value & gt;

属性& gt

MapReduce . job history . web app . address name & gt;

master:19888 value & gt;

属性& gt

14、保安。AccessControlException:用户sunqw的访问被拒绝。需要超级用户权限

解决方案:

模式1:

将HADOOP_USER_NAME添加到系统环境变量中,其值为root

或者通过java程序动态添加,如下所示:

1 system . set property(" HADOOP _ USER _ NAME "," root ");

模式2:

在非hadoop操作下使用Eclipse写入hdfs文件系统时,由于sunqw对“/”目录没有写权限,所以会出现异常。解决方法是在hadoop中打开HDFS目录的权限,命令如下:hadoop fs -chmod 777/。

模式3:

修改hadoop的配置文件:conf/hdfs-core.xml,添加或修改dfs.permissions的值为false。

模式4:

将Eclipse所在机器的名称改为root,与服务器上运行的hadoop的名称保持一致。