hadoop集羣常見問題集錦
hadoop集羣搭建、使用過程中遇到了很多,特記錄下
1、 ERRORorg.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException:Incompatible namespaceIDs 導致datanode啓動不了。 no datanode to stop
原因:每次namenode format會重新創建一個namenodeId,而data目錄包含了上次format時的id,namenode format清空了namenode下的數據,但是沒有清空datanode下的數據,導致啓動時失敗。
解決辦法:停掉集羣,刪除問題節點的data目錄下的所有內容。即hdfs-site.xml文件中配置的dfs.data.dir目錄。重新格式化namenode。
另一個辦法:先停掉集羣,然後將datanode節點目錄/dfs/data/current/VERSION中的修改爲與namenode一致即可。
注意:hadoop搭建完成只能namenode format格式化一次
2、如果datanode連接不上namenode,導致datanode無法啓動。
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:java.io.IOException: Call to ... failed on local exception:java.net.NoRouteToHostException: No route to host
解決方法:關閉防火牆。
注意:最好設置防火牆永久關閉
3、從本地往hdfs文件系統上傳文件
INFO hdfs.DFSClient: Exception in createBlockOutputStreamjava.io.IOException: Bad connect ack with firstBadLink
INFO hdfs.DFSClient: Abandoning block blk_-1300529705803292651_37023
WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: Unableto create new block.
解決方法:關閉防火牆: 禁用selinux: 編輯/etc/selinux/config文件,設置“SELINUX=disabled”
4、org.apache.hadoop.yarn.exceptions.YarnException: Unauthorizedrequest to start container
問題原因:namenode,datanode時間同步問題
解決辦法:多個datanode與namenode進行時間同步,在每臺服務器執行:
ntpdate time.nist.gov,確認時間同步成功。
最好在每臺服務器的 /etc/crontab 中加入一行:
0 2 * * * root ntpdate time.nist.gov&& hwclock –w
注意:集羣各臺服務器時間一定要同步
5、每次執行hadoop命令出現
hadoop2.5 WARNutil.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable
輸入命令:
export HADOOP_ROOT_LOGGER=DEBUG,console
調試查看信息
查看本機的libc版本
原因:版本是libc-2.12而需要libc-2.14,
解決方法:升級下libc。
[hadoop@namenode native]$ tar -jxvf/home/hadoop/download/glibc-2.14.tar.bz2
[hadoop@namenode native]$ cd glibc-2.14/
[hadoop@namenode glibc-2.14]$ tar -jxvf/home/hadoop/download/glibc-linuxthreads-2.5.tar.bz2
[hadoop@namenode glibc-2.14]$ cd .. #必須返回上級目錄
[root@namenode native]$ exportCFLAGS="-g -O2" #加上優化開關,否則會出現錯誤,必須用root用戶
[root@namenode native]$./glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons--with-headers=/usr/include --with-binutils=/usr/bin
出現問題:沒有c編譯器,解決方法:yum install gcc 下載gcc
[root@namenode native]$ make #編譯,執行很久,可能出錯,出錯再重新執行
[root@namenode native]$ sudo makeinstall #安裝,必須root用戶執行
升級成功。問題解決
建議:直接安裝centos7,不要安裝centos6.5,就不用升級libc版本了。
Make && make install –j8 //8核加速編譯,
6、org.apache.hadoop.dfs.SafeModeException:Cannot delete ..., Name node is in safe mode
原因:在分佈式文件系統啓動的時候,開始的時候會有安全模式,當分佈式文件系統處於安全模式的情況下,文件系統中的內容不允許修改也不允許刪除,直到安全模式結束。安全模式主要是爲了系統啓動的時候檢查各個DataNode上數據塊的有效性,同時根據策略必要的複製或者刪除部分數據塊。運行期通過命令也可以進入安全模式。在實踐過程中,系統啓動的時候去修改和刪除文件也會有安全模式不允許修改的出錯提示,只需要等待一會兒即可。
解決方案是:關閉安全模式
hadoop dfsadmin -safemode leave
建議:若要修改刪除文件,最好啓動後等待一會操作
7、解決"Too manyfetch-failures"
原因:出現這個問題主要是結點間的連通不夠全面。
解決方案是:
1)檢查"/etc/hosts"
要求本機ip 對應 服務器名
要求要包含所有的服務器ip +服務器
2)檢查".ssh/authorized_keys"
要求包含所有服務器(包括其自身)的publickey