zoukankan      html  css  js  c++  java
  • 运行Hadoop遇到的问题

    1, 伪分布式模式不能用root??

           以root执行start-all.sh出现

           localhost: Unrecognized option: -jvm

           localhost: Could not create the Java virtual machine.

           下面是别人的解决方案:(可以修改的地方有两个)

           第一个(次要的):$HADOOP_HOME/conf/hadoop-env.sh

             修改参数: export HADOOP_HEAPSIZE=256 #默认值为1000M,为Java虚拟机占用的内存的大小

           第二个(主要的):查看$HADOOP_HOME/bin/hadoop 源码:

                  if [[ $EUID -eq 0 ]]; then

                  HADOOP_OPTS="$HADOOP_OPTS -jvm server $HADOOP_DATANODE_OPTS"

                  else

                  HADOOP_OPTS="$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS"

                  fi

           如果以root身份启动,则hadoop启动java虚拟机时,会带上-jvm参数。

           不同的java版本,启动参数可能会不一致,由此导致以上问题。

    2, 当配置成伪分布式模式时为何不能用单机模式了??

           (条件:/lzh/input存在,hdfs中不存在input)

           当执行hadoop jar /usr/hadoop-1.0.1/hadoop-examples-1.0.1.jar wordcount input output 出错,

       提示为:org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/input

           原因:当配置成伪分布式模式后,操作都是在hdfs中进行的。

    3, 启动不了namenode。查看日志中:

           ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException:

                  Incompatible namespaceIDs in /home/admin/joe.wangh/hadoop/data/dfs.data.dir:

                  namenode namespaceID = 898136669; datanode namespceID = 21274440a65

           原因:多次执行hadoop namenode –format,每次namenode format会重新创建一个namenodeId,

         而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,

         但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下的所有目录.

    4, 在格式化namenode时出现以下问题:

           ERROR namenode.NameNode: java.io.IOException: Cannot create directory /tmp/hadoop-lzh/dfs/current

           请注意 /home/hadoop 的权限,因为您用的是user身份,理论上无法写入/home/hadoop

           #########################

           解法一:帮 /home/hadoop 加入其他使用者也可以写入的权限

                  sudo chmod -R a+w /home/hadoop/tmp

           解法二:改用 user 身份可以写入的路径 hadoop.tmp.dir 的路径 - 修改 core-site.xml

                  <property>

                         <name>hadoop.tmp.dir</name>

                         <value>/tmp/hadoop-${user.name}</value>

                  </property>

         ######################### 

         上面是别人的做法,我的做法是用root权限:chmod  757  /tmp。问题解决。

    5, 安装hadoop-1.0.1后,执行命令出现$HADOOP_HOME is deprecated.

      这不是错误,可以修改bin/hadoop-config.sh,注释掉$HADOOP_HOME is deprecated的内容

    6, 向hdfs添加文件或删除文件时,出现Name node is in safe mode错误:

          rmr: org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name node is in safe mode

          解决的命令:

        #关闭safe mode

        bin/hadoop dfsadmin -safemode leave

      更多safemode内容参考  http://hi.baidu.com/tekkie1987/blog/item/fe5c1883cb18639ff603a612.html

    7,  [lzh@localhost ~]$ hadoop dfs -cat /user/lzh/datajoininput/Orders.txt
      12/04/19 12:25:05 INFO hdfs.DFSClient: No node available for block: blk_9063348294419704403_1006 file=/user/lzh/datajoininput/Orders.txt
      12/04/19 12:25:05 INFO hdfs.DFSClient: Could not obtain block blk_9063348294419704403_1006 from any node: java.io.IOException: No live nodes contain current                           block. Will get new block locations from namenode and retry...

      [lzh@localhost ~]$ hadoop fsck /user/lzh
      FSCK started by lzh from /127.0.0.1 for path /user/lzh at Thu Apr 19 12:31:34 CST 2012.
      /user/lzh/datajoininput/Customers.txt: CORRUPT block blk_5873732074349204741
      /user/lzh/datajoininput/Customers.txt: MISSING 1 blocks of total size 113 B..
      /user/lzh/datajoininput/Orders.txt: CORRUPT block blk_9063348294419704403
      /user/lzh/datajoininput/Orders.txt: MISSING 1 blocks of total size 88 B.....
      

      原因:hadoop.tmp.dir是hadoop文件系统依赖的基础配置,很多路径都依赖它。它默认的位置是在/tmp/{$user}下面,但是在/tmp路径下的存储是不安全的,因为linux每次重启,文件就可能被删除。也因此导致上面的6出现

      解决办法:修改conf/core-site.xml,添加如下代码:

        <property>
                    <name>hadoop.tmp.dir</name>
                    <value>/hadooptemp/hadoop-${user.name}</value>
            </property>

        然后再执行 hadoop namenode -format

    8,  Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

      1运行前设置参数,在Argument标签页下的vm arguments框里输入-Xmx512m, 保存运行。

      2设置环境变量

      JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

      注: -Xms <size> 设置JVM初始化堆内存大小;-Xmx <size> 设置JVM最大的堆内存大小

  • 相关阅读:
    eclipse无法打断点,提示debug absent line number information
    jQueryValidator 验证非负数
    Oracle 11g中递归查询父类及子类集合
    修改上传功能时遇到的问题
    使用Tomcat页面乱码问题
    javaScript正则匹配汉字与特殊字符(项目中遇到关键字匹配的方法)
    Oracle 11g中字符串截取的实现
    软连接和硬连接区别 Alex
    Linux发行版的系统目录名称命名规则以及用途 Alex
    如何通过脚本实现显示版本号、CPU、硬盘和内存条大小 Alex
  • 原文地址:https://www.cnblogs.com/liangzh/p/2434602.html
Copyright © 2011-2022 走看看