IDEA中MR提交作業到yarn,踩坑彙總

跑mapreduce任務只知道在在本地打成jar,提交到hadoop集羣上去跑任務,如果出現錯誤往往很難定位錯誤,所以遠程debug是開發中不可或缺的技能

一 Permission denied(權限問題)

權限問題,idea運行job時,報如下錯誤

Caused by: 
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException):
Permission denied: 
user=guguoyu, access=EXECUTE, inode="/tmp":hadoop:supergroup:drwx------

因爲hadoop集羣上面的用戶用的是hadoop,而這裏提交的時候用的是我本地用戶guguoyu
在main函數最前面增加如下代碼:

Properties properties = System.getProperties();
properties.setProperty("HADOOP_USER_NAME", "hadoop");

二 Retrying connect(重試連接)

啓動之後,一直嘗試重新連接,問題代碼如下:

INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
INFO ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8032

從上面的保存信息可以看出,連接的ResourceManager的IP地址是0.0.0.0,所以,我們要指定成雲主機外網的IP,我們添加如下配置:

conf.set("yarn.resourcemanager.hostname","hadoop001");

三 RemotException

錯誤信息如下:

java.nio.channels.SocketChannel[connection-pending remote=/192.168.0.3:50010]
org.apache.hadoop.ipc.RemoteException(java.io.IOException): 
File /tmp/hadoop-yarn/staging/hadoop/.staging/job_1567499579690_0010/job.jar
There are 1 datanode(s) running and 1 node(s) are excluded in this operation

關鍵要理解,NameNode僅僅提供DataNodes存儲blocks的清單,NameNode不會寫數據到DataNodes,寫數據是客戶端通過DFSOutputStrem把數據寫入到Datanodes
所以上面錯誤信息是,nn提供的dn地址是雲主機的內網地址,添加下面的代碼,就可以讓客戶端與dn連接時,使用外網地址了

conf.set("dfs.client.use.datanode.hostname", "true")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章