1. 程式人生 > >kettle採用Hadoop Copy Files出現許可權不足的問題

kettle採用Hadoop Copy Files出現許可權不足的問題

kettle設計如下:

測試例子說明:

SQL控制元件,是直接連線HIVE環境,truncate table table;

Hadoop Copy Files 是拷貝ETL伺服器一個檔案到對應的hadoop目錄下,也就是HIVE表所在的表目錄


Hadoop Copy Files 設定如下:




執行job,提示許可權不足:

2014/03/20 11:16:03 - SQL - ERROR (version 4.4.0-stable, build 17588 from 2012-11-21 16.02.21 by buildguy) : Caused by: Permission denied: user=dengxl, access=WRITE, inode="/data/export_data/fact_sta_tool_action_his_mid":hadoop:supergroup:drwxr-xr-x
xxxx是kettle預設取user.name的值(懷疑),也就是使用者,而不是用的hadoop的登入使用者,即使在連線hdfs時,設定了User ID ,也是取這個使用者,查了一些資料,發現有些例子是類似的,採用Eclipse連線hadoop,提交檔案時,也會出現許可權不足的原因。

網上一些解決思路是

1、到伺服器上修改hadoop的配置檔案:conf/hdfs-core.xml , 找到 dfs.permissions 的配置項 , 將value值改為 false

參見:http://blog.chinaunix.net/uid-20069582-id-3605597.html

2、設定對應的目錄為其他使用者可讀寫,也就是chmod 777授權

3、修改kettle操作hadoop控制元件時傳遞的user,改變內部變數,把user.name這個變數改成hadoop,結果無效。

因hadoop不方便重啟,所以考慮採用第二個方法,問題可以解決,但是存放的使用者,變成了dengxl


另外,由於是採用授權的方式,把hive的一個表的目錄許可權改變了,如果kettle操作SQL對錶進行truncate後,這個目錄會被恢復成原來的許可權

如有其它解決方法,再進行更新