2013-10-15 83 views
2

我在使用sqoop導入命令時出現以下錯誤: 錯誤security.UserGroupInformation:PriviledgedActionException as:SqoopUser(auth:SIMPLE)cause:java.io.FileNotFoundException:文件不存在:hdfs: //localhost:8020/home/SqoopUser/sqoop-1.4.3-cdh4.4.0/sqoop-1.4.3-cdh4.4.0.jar。沒有找到Sqoop jar文件

我正在使用Cloudera hadoop和Sqoop。

無法理解,它爲什麼在hdfs中查找jar文件。

問候, 大數據開發

+0

u能請分享其中U使用的命令? –

+0

見[此答案](http://stackoverflow.com/a/26850804)由[turkgen turkgen](http://stackoverflow.com/users/4186330/turkgen-turkgen)在一個類似的問題。 – VcamX

回答

3

是很常見的Hadoop的服務,以尋找在HDFS罐子,因爲集羣中的所有節點都可以在HDFS訪問文件。如果MapReduce作業被Hadoop服務啓動,在這種情況下,Sqoop依賴於這些jar,這一點非常重要。請記住,即使您正在(可能)從NameNode運行Sqoop命令,Mapper仍在DataNode上運行,而不是NameNode。將這些罐放在HDFS上並不是解決這個問題的唯一可能的解決方案,但它是一個明智的解決方案。

現在我們可以處理實際的錯誤。至少有一個,但可能所有的Mapper都無法找到他們需要的jar。這意味着該jar不存在或試圖訪問它們的用戶沒有所需的權限。首先通過在羣集上以超級用戶權限運行的用戶運行hadoop fs -ls home/SqoopUser/sqoop-1.4.3-cdh4.4.0/sqoop-1.4.3-cdh4.4.0.jar來檢查文件是否存在。如果不存在,請將其與hadoop fs -put {jarLocationOn/NameNode/fileSystem/sqoop-1.4.3-cdh4.4.0.jar} /home/SqoopUser/sqoop-1.4.3-cdh4.4.0/sqoop-1.4.3-cdh4.4.0.jar一起放在那裏。我沒有專門與Cloudera合作過,因此您必須自己追蹤NameNode上的jar位置。如果Cloudera與Hortonworks類似,那麼偶爾會出現這樣的問題:羣集部署腳本/文檔錯過了一些必要的步驟來啓動和運行所有內容。

現在我們知道文件存在了,我們可以檢查用戶SqoopUser是否有權限訪問該文件。再次運行hadoop fs -ls home/SqoopUser/sqoop-1.4.3-cdh4.4.0/sqoop-1.4.3-cdh4.4.0.jar並查看文件權限。同時檢查包含jar的目錄的權限。解釋POSIX文件權限不在本答案的範圍內,所以如果您不熟悉,您可能需要閱讀這些文件。一個重要的注意事項是,HDFS沒有自己的組的概念,它基於底層操作系統的組。只要確保該jar可以被SqoopUser讀取,並且所有父目錄都可以由SqoopUser執行。不加區別的用戶chmod 777將採取這種方式,即hadoop fs -chmod 777 /home/SqoopUser/sqoop-1.4.3-cdh4.4.0/sqoop-1.4.3-cdh4.4.0.jar。但是,如果您的環境需要授予您的權限,當然要更明確一些。

如果您發現文件權限比您想要的更頻繁地觸發您,核選項將在hdfs-site.xml中設置dfs.permissionsfalse。這將讓所有用戶訪問HDFS上的所有文件。這對快速開發可能非常有用,但離開dfs.permisssions更安全。

2

除了Daniel Koverman的回答也可以這樣做。 這會幫助你。

出口HADOOP_MAPRED_HOME =/usr/lib中/ Hadoop的0.20-映射精簡 出口HADOOP_HOME =/usr/lib中/ Hadoop的0.20-映射精簡

的/ etc /默認/ hadoop的添加這兩條線和/ etc/default/hiveserver

0

我也遇到過這樣的問題。 我只是用

JPS 10869檢查我的Hadoop服務JobHistoryServer 10610的NameNode 10669個的DataNode 15215個JPS 10738 的ResourceManager 3978主要

節點管理器沒有運行。

紗-site.xml中 更改了某些設置,現在sqoop找到我的罐子在我的本地文件系統。

+0

「紗-site.xml中更改了某些設置,」什麼樣的變化? – Adelin

0

首先,回答:

您需要刷新客戶端配置文件。在CDH 5,這可以從Manager的用戶界面的頭版通過單擊該服務旁邊的圓圈箭頭符號來完成。我認爲這是造成你的問題的配置是YARN服務,但你不妨把你的所有配置文件保持最新狀態。

二,背景:

我剛剛爲自己解決了這個問題。我正在使用CDH 5.0。

這裏是我跑的命令和遇到的錯誤:「授予對文件名的所有特權*爲‘

$ sqoop import --connect jdbc:mysql://xxx/g2_2 --username xxx --password xxx --table client 
... 
14/05/27 22:11:54 WARN security.UserGroupInformation: PriviledgedActionException as:aortiz (auth:SIMPLE) cause:java.io.FileNotFoundException: File does not exist: hdfs://xxx:8020/opt/cloudera/parcels/CDH-5.0.1-1.cdh5.0.1.p0.47/lib/sqoop/lib/commons-io-1.4.jar 
14/05/27 22:11:54 ERROR tool.ImportTool: Encountered IOException running import job: java.io.FileNotFoundException: File does not exist: hdfs://xxx:8020/opt/cloudera/parcels/CDH-5.0.1-1.cdh5.0.1.p0.47/lib/sqoop/lib/commons-io-1.4.jar 
0

首先我們要授予所有權限的文件中像 %’@「本地主機」 ; 「授予所有權限的文件名*到。‘’@」 localhost'的; 給這個命令和EXCUTE

0

請執行以下這將解決問題的命令將在HDFS系統將文件複製

hdfs dfs -copyFromLocal /opt/hadoop/sqoop-1.4.6 hdfs://localhost:9000/opt/hadoop/sqoop-1.4.6 

hdfs dfs -copyFromLocal /opt/hadoop/sqoop-1.4.6/lib hdfs://localhost:9000/opt/hadoop/sqoop-1.4.6/lib 

hdfs dfs -copyFromLocal /opt/hadoop/sqoop-1.4.6/sqoop-1.4.6.jar hdfs://localhost:9000/opt/hadoop/sqoop-1.4.6/sqoop-1.4.6.jar 

同樣複製任何文件,該文件是不能夠通過HDFS系統來獲得。

注意:在上面的命令/opt/hadoop/sqoop-1.4.6是我的系統sqoop安裝位置