運行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最大的堆內存大小


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM