2013-10-28 24 views
6

我使用SQOOP將信息從HDFS導出到MS-SQL。我通過OOZIE運行SQOOP。現在我已經對OIDZIE工作流中的jdbc連接的uid進行了硬編碼。一旦我轉向刺激,我將無法做到這一點。在這種情況下傳遞身份驗證信息的最佳方式是什麼?我如何通過OOZIE提供密碼給SQOOP以連接到MS-SQL?

<sqoop xmlns="uri:oozie:sqoop-action:0.2"> 
      <job-tracker>${jobTracker}</job-tracker> 
      <name-node>${nameNode}</name-node> 
      <arg>export</arg> 
      <arg>--connect</arg> 
      <arg>jdbc:sqlserver://$sqlServerIP:1433</arg> 
      <arg>--table</arg> 
      <arg>tableName</arg> 
      <arg>--export-dir</arg> 
      <arg>/user/sqoop/file</arg> 
      <arg>--username</arg> 
      <arg>me</arg> 
      <arg>--password</arg> 
      <arg>password</arg> 
</sqoop> 

我可以將它們作爲參數傳遞給$ userName,$ password。但實際的uid/pwd仍然會顯示在oozie web控制檯中。

UPDATE

我已經試過兩種方式(如波紋管建議)做到這一點...在VIM我創建PWD只是有密碼(沒有空格或其他任何東西)。叫這個密碼。

1)我試過使用文件系統。但是,我得到一個IOException,說該文件不存在。看完代碼後,它看起來像sqoop使用傳遞conf來訪問fs。所以我假設當通過oozie運行時,它只能訪問HDFS。

2)我將密碼文件加載到hdfs的隨機位置。/users/my-name/pwd(pwd是文件)。現在它可以訪問該文件(因爲我沒有得到IOException)。但它無法連接到SQLServer。我不確定我需要做些什麼才能使其發揮作用?

更新2 我喜歡創建密碼文件:echo "pwd" > my.password 這增加了EOL到文件my.password 我改echo -n "pwd" > my.password,現在它的工作原理。

+0

只是想說明(至少在CentOS 7上)''echo -n「pw_d」> my.password'如果存在,就省略''_''符號,只寫''pwd''給文件。所以也就是''vi''可以是更好的選擇 – Nutle

回答

4

我認爲你可以利用指定--password-file參數,以便Oozie永遠不會看到密碼。查看Sqoop User Guide瞭解更多詳情。

+0

謝謝你。看看代碼,它看起來像我只能在通過oozie運行時將密碼文件放在hdfs上。在文檔中他們聲稱它可能在hdfs或硬盤上。你知道我該如何強迫它去HD嗎? – hba

+0

從本地驅動器加載文件確實可行,但由於oozie會在Hadoop集羣上的任意一臺隨機機器上執行Sqoop,因此使用Oozie的這種功能是無用的。我建議將密碼文件上傳到HDFS並更改權限,以便只有您可以讀取它。 –

+0

@Thx Jarek請參閱上文... – hba