問題描述:
調度系統執行hive任務失敗,一直執行失敗,報錯如下:
java.io.IOException: java.net.ConnectException: Call From #HostName/#IP to #HostName:10020 failed on connection exception: java.net.ConnectException: 拒絕連接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
Caused by: java.net.ConnectException: Call From #HostName/#IP to #HostName:10020 failed on connection exception: java.net.ConnectException: 拒絕連接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
CONSOLE# Ended Job = job_1638255473937_0568 with exception 'java.io.IOException(java.net.ConnectException: Call From #HostName/#IP to #HostName:10020 failed on connection exception: java.net.ConnectException: 拒絕連接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused)
CONSOLE# FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. java.net.ConnectException: Call From #HostName/#IP to #HostName:10020 failed on connection exception: java.net.ConnectException: 拒絕連接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
這個信息還看不出具體的問題所在,查看服務器上所有的日志,也沒有看出問題,最后查看yarn的日志,看出問題所在。
根據調度系統,獲取到ApplicationId:application_1638255473937_0568 , 然后從hdfs上查看對應的日志信息。
查看yarn日志信息:
[hdfs@centos hadoop27]$ yarn logs -applicationId application_1638255473937_0568
關鍵報錯信息:
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.FSLimitException$MaxDirectoryItemsExceededException): The directory item limit of /tmp/hadoop-yarn/staging/history/done_intermediate/hdfs is exceeded: limit=1048576 items=1048576
報錯原因:
hadoop單個目錄下文件超1048576個,默認limit限制數為1048576,所以要調大limit限制數。
解決方法1:
hdfs-site.xml配置文件添加配置參數:dfs.namenode.fs-limits.max-directory-items ,調大參數值。
將配置文件推送到hadoop集群所有節點,重啟Hadoop服務。
解決方法2:
如果不方便修改配置重啟hadoop集群服務。可以先刪除該目錄:/tmp/hadoop-yarn/staging/history/done_intermediate/hdfs
然后重建目錄即可。
hadoop fs -rm -r /tmp/hadoop-yarn/staging/history/done_intermediate/hdfs
hadoop fs -mkdir /tmp/hadoop-yarn/staging/history/done_intermediate/hdfs
造成這個目錄文件數超上限,本質原因還是hadoop集群之前沒有開啟jobhistory server,沒有清除歷史job日志信息導致的。
參考文章:http://www.tracefact.net/tech/079.html
擴展信息:
一:如何查看yarn日志存放目錄及日志詳細信息
1:通過history server UI界面查看。(我這里是http://IP:8801/jobhistory)
2:通過yarn命令查看(用戶要和提交任務的用戶一致)
2.1: yarn application -list -appStates ALL(這個不顯示時間信息)
2.2: yarn logs -applicationId application_1638255473937_0568
3:直接查看hdfs路徑的log (是存放在hdfs目錄上的,不是存放在centos系統的自定義日志目錄上)
3.1: 查看yarn-site.xml文件,確認log配置目錄。
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/data1/hadoop27/logs</value>
</property>
3.2: 查看日志文件信息
[hdfs@centos hadoop]$ hdfs dfs -ls /data1/hadoop27/logs/hdfs/logs/application_1638255473937_0568
Found 1 items
-rw-r----- 2 hdfs hdfs 66188 2021-11-30 20:24 /data1/hadoop27/logs/hdfs/logs/application_1638255473937_0568/centos.pp1.db_46654
3.3: 查看日志詳細信息
3.3.1: yarn logs -applicationId application_1638255473937_0568 (同2)
3.3.2: hdfs dfs -cat /data1/hadoop27/logs/hdfs/logs/application_1638255473937_0568/centos.pp1.db_46654 ## 通過-cat查看
3.3.3: hdfs dfs -cat /data1/hadoop27/logs/hdfs/logs/application_1638255473937_0568/centos.pp1.db_46654 > tmp.log ## 通過-cat把內容存到當前目錄的tmp.log中。
3.3.4: hdfs dfs -get /data1/hadoop27/logs/hdfs/logs/application_1638255473937_0568/centos.pp1.db_46654 ## 通過get把hdfs文件下載到當前啊目錄下,然后查看。
二: hdfs操作命令:
1.1: 查看hdfs的指定目錄下有多少個文件夾和文件。
[hdfs@centos hadoop]$ hadoop fs -count /tmp/hadoop-yarn/staging/history/done_intermediate/hdfs
1 1048576 3253261451467 /tmp/hadoop-yarn/staging/history/done_intermediate/hdfs
第一個數值1表示該目錄下有1個文件夾。
第二個數值1048576表示該目錄下有1個文件。
第三個數值3253261451467表示該目錄下所有文件總大小。