Hadoop環境搭建問題彙總
一、啟動HDFS時dataNode一直沒有啟動
我們執行hdfs啟動命令後,再輸入 jps 命令檢視啟動程序,發現沒有DataNode程序
hadoop namenode -format
sbin/start-dfs.sh
原因
當我們使用 hadoop namenode -format 格式化namenode時,會在namenode資料資料夾(這個資料夾為自己配置檔案中dfs.name.dir的路徑我的是 /usr/local/hadoop/tmp 下面的name和data資料夾)中儲存一個current/VERSION檔案,記錄clusterID,datanode中儲存的current/VERSION檔案中的clustreID的值是上一次格式化儲存的clusterID,這樣,datanode和namenode之間的ID不一致。
namenode和datanode路徑配置 vim etc/hadoop/hdfs-site.xml
解決方法
-
第一種:如果dfs資料夾中沒有重要的資料,那麼刪除dfs資料夾,再重新執行下列指令: (刪除所有節點下的dfs資料夾,dfs目錄在${HADOOP_HOME}/tmp/)
-
第二種:如果dfs檔案中有重要的資料,那麼在dfs/name目錄下找到一個current/VERSION檔案,記錄clusterID並複製。然後dfs/data目錄下找到一個current/VERSION檔案,將其中clustreID的值替換成剛剛複製的clusterID的值即可;
再次啟動後輸入 jps 即可檢視啟動情況
二、Hadoop 50070埠無法開啟
問題一:配置的時候遇到 JAVA_HOME not set
解決辦法:必須在hadoop-env.sh檔案中設定JAVA的絕對路徑
問題二:能正常啟動叢集,能看8088埠,但是無法檢視50070,但是Namenode和datanode已經能JPS檢視
解決辦法:首先排除了防火牆的問題,後來看需要格式化,可能我重新修改hadoop-env之後我沒有namenode-format了
問題三:namenode format後,能啟動了,但是dfsadmin -report發現datanode沒有啟動
解決辦法,還好,以前有過這個經驗,修改tmp下面的各個slave的VERSION中的clusterID即可,和namenode匹配。詳細見
三、org.apache.hadoop.ipc.RpcException: RPC response exceeds maximum data length 錯誤
Exception in thread "main" java.io.IOException: Failed on local exception: org.apache.hadoop.ipc.RpcException: RPC response exceeds maximum data length; Host Details : local host is: "mzmuer/172.19.82.225"; destination host is: "localhost":9870;
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:808)
at org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1495)
at org.apache.hadoop.ipc.Client.call(Client.java:1437)
at org.apache.hadoop.ipc.Client.call(Client.java:1347)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:228)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:116)
at com.sun.proxy.$Proxy11.getBlockLocations(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getBlockLocations(ClientNamenodeProtocolTranslatorPB.java:305)
解決方法:
1.通過 jps 檢視namenode和datanode是否啟動。未啟動需要呼叫start-dfs啟動。
2.檢視core-site.xml配置檔案中的fs.default.name屬性。是否是請求的連結。請求到了錯誤的連結也可能是該錯誤.