• Hadoop调试记录(1)


    错误

         ERROR: Can't get master address from ZooKeeper; znode data == null

    解决

         关闭hadoop,发现stop-all.sh后几个进程并没有关闭,提示no namenode to close。恍然觉得原来每次关hadoop都没有关成功,这进程该是很久以前的了。所以原因是hadoop节点的连接出现问题。

         有几点需要注意:

         (1) 用户权限。kevin用户需要被赋予权限(chmod或者chown,一个是赋予权限,一个是将文件的所有者给指定用户),以后要注意用kevin去操作,不要随便就切换到root。linux下的用户权限是一个大问题,要好好研究,很多出错都是权限上的问题导致permission denied或者path/file not found;

         (2) kill进程。以进程1128为例,如果#kill -pid 1128无效,可尝试kill 9 1128。另,进程分为系统进程和用户进程,有些进程需要启用其的用户或者root去kill。

         正常kill掉几个进程之后,重开hadoop,除了datanode其他的进程都开了。查看datanode的log发现以下问题:

    错误

         ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /tmp/hadoop-kevin/dfs/data: namenode namespaceID = 1234548942; datanode namespaceID = 1169818695

    解决

         将datanode的namespaceID修改为namenode的namespaceID。命令hadoop namenode -format不能经常使用,清空次数多了namenode的namespaceID就会修改了,造成其与datanode的namespaceID不匹配。

    错误

      java.io.IOException: Cannot create directory 导致namenode启动失败

    解决

         无法创建目录的原因,一是目录错了,二是目录对了但没有权限。

         检查目录是否出错,若没有则是权限问题。

         首先,在hadoop目录下新建几个文件夹

    ~/hadoop$ mkdir tmp //存放临时文件
    ~/hadoop$ mkdir hdfs //hdfs的主目录
    ~/hadoop$ mkdir hdfs/name 
    ~/hadoop$ mkdir hdfs/data

         接下来对以上每个文件夹都做chown命令,最好再做一次chmod命令,如下(暂时不熟悉这两个命令的用法,所以都做一次比较保险)。原因:即便之前当前用户(如kevin)对hadoop文件夹及其子文件夹是有“写”权限的,但其子文件夹并不包括后来新建的文件夹,所以kevin是对新建的文件夹没有写权限,导致以上错误。

    1 # 将该目录及其子目录的所有者赋给kevin
    2 chown -R kevin:kevin ~/usr/hadoop/hadoop/tmp
    3 # 赋给当前用户写的权限(这里是的路径是整个hadoop目录)
    4 sudo chmod -R a+w ~/usr/hadoop/hadoop

      接下来对hadoop/conf下三个配置文件重新做基本配置:
      core-site.xml: Core配置项
      hdfs-site.xml: HDFS配置项
      mapred-site.xml:MapReduce配置项,包括jobtracker和tasktracker

      core-site.xml:

     1 <configuration>
     2     <property>
     3         <name>fs.default.name</name>
     4         <value>hdfs://localhost:9000</value>
     5     </property>
     6     <property>
     7         <name>hadoop.tmp.dir</name>
     8         <value>~/usr/hadoop/hadoop/tmp</value>
     9     </property>
    10 </configuration>        

      hdfs-site.xml:

     1 <configuration>
     2   <property>
     3     <name>dfs.replication</name>
     4     <value>1</value>
     5   </property>
     6   <property>
     7     <name>dfs.name.dir</name>
     8     <value>~/usr/hadoop/hadoop/hdfs/name</value>
     9   </property>
    10   <property>
    11     <name>dfs.data.dir</name>
    12     <value>~/usr/hadoop/hadoop/hdfs/data</value>
    13   </property>
    14 </configuration>

      mapred-site.xml:

    1 <configuration>
    2   <property>
    3     <name>mapred.job.tracker</name>
    4     <value>localhost:9001</value>
    5   </property>
    6 </configuration>

    错误

      HMaster进程无法启动/秒退/消失

      FATAL [ubuntu:16020.activeMasterManager] master.HMaster: Unhandled exception. Starting shutdown.java.io.IOException: Failed on local exception: java.io.IOException: Broken pipe; Host Details : local host is: "ubuntu/127.0.1.1"; destination host is: "localhost":9000;

      master无法构建,原因是在dfs中没有implementation

      localhost: Exception in thread "main" org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol       org.apache.hadoop.hdfs.protocol.ClientProtocol version mismatch. (client = 42, server = 41)

    解决

      版本问题。此处hadoop版本是1.2.1,hbase的版本是1.0.0。以下为版本匹配表:

    从上图可知,hbase-1.0.X可以确定支持的只有hadoop-2.X.X系列。所谓支持即互相间协议、方法是匹配的,不会出现“我调用你的方法,而你没有这个方法的问题”。删了之前的hbase,装了0.98的hbase(这张图中是不含有hadoop-1.2.1这个版本的,网上有人测试过0.98与1.2.1兼容很好)。重新配置了hbase-site.xml

     1 <configuration>
     2     <property>
     3         <name>hbase.rootdir</name>
     4         <value>hdfs://localhost:9000/hbase</value>  
     5     </property>
     6     <property>
     7             <name>hbase.cluster.distributed</name>
     8            <value>true</value>
     9     </property>
    10 </configuration>

    启动hbase,进程全部启动且非常稳定。打开shell,输入list,成功运行。至此完成了对hbase启动问题的全部调试。

    总结:要勤于思考,遇到问题最权威的方法是自己动手查看Log,自己分析。网上的意见有可取的成分,也会有大量片面的、甚至错误的言论,要理智辨别。

    最重要的一点,不要放弃。遇到太困难的问题解决不了,不妨搁置一下,几天之后头脑清晰了重新来看,会有奇效。

  • 相关阅读:
    多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全
    PHP-数据类型
    MySQL-数据与事务控制语言
    数据库查询练习题
    MySQL-数据操作语言(DML)
    MySQL-表操作
    MySQL-数据类型
    MySQL-数据库相关操作
    js Dom简单练习题
    js中的Dom操作
  • 原文地址:https://www.cnblogs.com/KevinHelloWorld/p/4370435.html
Copyright © 2020-2023  润新知