Hadoop实践学习中的问题汇总(持续补充)

1、环境及配置问题

1.1 每次运行程序都提示Warning: Unable to load native-hadoop library。
  • 原因:机器为64位,hadoop-2.x.tar.gz安装包在32位机器上编译的,加载本地库.so文件是出错,不影响使用。
  • 解决:
    : 在网上找编译好的相应hadoop版本的、编译好的64位的lib包,比如http://dl.bintray.com/sequenceiq/sequenceiq-bin/,下载。然后将准备好的64位的lib包解压到已经安装好的hadoop安装目录的lib/native和lib目录下
$ tar -xvf ~/Downloads/hadoop-native-2.x.tar.gz -C /usr/local/hadoop/lib/native
$ tar -xvf ~/Downloads/hadoop-native-2.x.tar.gz -C /usr/local/hadoop/lib

: 增加环境变量并生效

$ sudo vim ~/.bashrc
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native  
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
$ source ~/.bashrc

参考来源:chengjunde的博客园

1.2 执行hadoop namenode -format后的一系列问题
  • 执行此命令后,会破坏整个集群数据,慎用!!!
  • 在格式化前必须清楚DataNode节点dfs/name下的内容,否则在启动hadoop时DN的守护进程会启动失败。这是由于,每一次format主节点namenode,dfs/name/current目录下的VERSION文件会产生新的clusterID、namespaceID。但是如果子节点的dfs/name/current仍存在,hadoop格式化时就不会重建该目录,因此形成子节点的clusterID、namespaceID与主节点(即namenode节点)的clusterID、namespaceID不一致。最终导致hadoop启动失败。
  • 解决:删除HADOOP_HOME/tmp/dfs/name/(主节点)和HADOOP_HOME/tmp/dfs/data(从节点)下的内容,再执行namenode -format命令,则会在从节点中生成同主节点一样的文件。
1.3 在编译hadoop0.20源码后,进行namenode -format时报错format aborted in /path
  • 原因:在namenode格式化之前,dfs.name.dir指定的目录已存在,就会中止,防止错误的将已存在的集群格式化了;
  • 解决:将dfs.name.dir指定的目录内清空。

2 程序运行问题

2.1 WordCount运行时显示WordCount$TokenizerMapper not found
  • 原因:原教程说,将所有修改过的/usr/local/hadoop/etc/hadoop中的文件放到eclipse工程的src目录下,但是教程使用的是伪分布式,我使用的是虚拟机搭建的完全分布式,将core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xmlslavers这五个文件还有log4j.properties全都放在了src目录下,但实际上只要core-site.xmlhdfs-site.xmllog4j.properties这三个文件就行了。具体为啥尚不清楚。
  • 解决:删除src中多余的三个文件,运行成功。

    参考来源:摘果子的人的CSDN博客

2.2 eclipse上运行程序操作HDFS时,出现call from master/xx to localhost:9000 failed on connection exception

这个问题困扰了很久,查了很多博客也没解决,主要有以下几种可能原因及解决方案,千万不要看了一条就开始操作,要看符不符合自己的情况。不然回头很难啊。

  1. 本地用户administrator(本机windows用户)想要远程操作hadoop系统,没有权限。
    此时可以取消hdfs的用户权限检查,在配置文件core-site.xml 中,找到(没有就自己新建)dfs.permissions属性,默认为true,修改为false就可以了,重启hadoop,重启eclipse。
    修改hdfs权限检查

  2. 重新格式化namenode执行,(慎用!

$ hdfs dfs namenode -format 
  1. 主节点9000端口没有打开,或者没有允许远程访问

  2. 对于本例来说,上述都不是,而是因为。。。教程中是伪分布式,我这是分布式,在配置Hadoop location时参数不一样。
    按照参考的两个教程来说,在配置Hadoop-Eclipse-Plugin的Map/Reduce开发视图时,选择 Window 菜单下选择 Open Perspective -> Other,从中选择 Map/Reduce 选项。
    Map/Reduce视图

第一次新建Hadoop location时,教程的参数配置都是:
教程配置

而这里的DFS Master选项,他们勾选了Use M/R Master host,其实在本例中,应该是这样:
本机的配置
就是因为这个配置不一样,所以在使用eclipse对HDFS进行操作时,一直报这样的错误!

n 一些解释

n.1 为什么要将修改过的配置文件放在项目的src目录下?

-在使用eclipse运行MapReduce程序时,会读取Hadoop-Eclipse-Plugin的Advanced parameters作为Hadoop运行参数,如果未修改,则默认是单机模式参数,程序运行时读取的是本地目录,而非HDFS目录,就会提示input等目录不存在(在HDFS中)。

  • 而log4j用于记录程序的输出日记,需要log4j.properties这个配置文件,若无,虽然不影响程序运行,但运行时无法看到任何提示消息。

猜你喜欢

转载自blog.csdn.net/qq_41059320/article/details/82737276
今日推荐