2016-09-25 125 views
0

我想從MySql數據庫導入一個表格到配置單元表,以瞭解如何配置單元導入工作。表名是我已經在HDFS的主目錄HDFS中導入的設備。我使用下面的語句在配置單元中創建了一個表。Sqoop Hive導入

create table device_hive (device_num int,device_name varchar(255)); 

現在我執行以下sqoop import語句從device表中獲取的數據在MySQL數據庫攆

sqoop import --connect jdbc:mysql://localhost/loudacre --table device 
--username training --password training --hive-import --hive-table device_hive 
--hive-database hadoopexam --hive-table device_hive --fields-terminated-by '\001' 
--table device --columns "device_num,device_name" 

它的失敗,說明輸出目錄中的設備已經在錯誤信息exists.The位置指向我之前使用sqoop導入的HDFS中的device文件夾。

我的問題是爲什麼sqoop將基地目錄和檢查該文件夾。這是一個配置單元導入,所以不應該sqoop只是去蜂巢/倉庫目錄?我從HDFS刪除該文件夾,它工作正常。有什麼建議麼。

回答

0

按照documentation

默認情況下,進口到一個新的目標位置。如果目標 目錄已經存在於HDFS中,Sqoop將拒絕導入,並且 覆蓋該目錄的內容。

因此,如果您已經將表導入HDFS,device目錄已存在的錯誤將是正常行爲。當您添加--hive-import命令時,Sqoop將數據複製到HDFS(在您的案例中,位於device目錄中),並使用數據的佈局更新Hive Metastore。

您可以使用選項,以告訴Sqoop覆蓋表:

如果蜂巢表已經存在,你可以指定--hive覆寫 選項,以表明在現有的表必須更換配置單元。

我希望這會有所幫助。

+0

它的工作。感謝很多。 –

+0

不客氣:-) –

0

您需要了解Sqoop如何導入到配置單元中。

它工作在3個步驟:

  • 將數據導入HDFS (HOME_DIRECTORY/TABLE_NAME)
  • CREATE TABLE HIVE ....
  • LOAD DATA INPATH ...

按照docs

將數據導入HDFS或省略此步驟後,Sqoop將生成一個Hive腳本,其中包含使用Hive類型定義列的CREATE TABLE操作以及用於將數據文件移入Hive倉庫目錄的LOAD DATA INPATH語句。

在你的情況下,它在第一步失敗。

+0

謝謝你幫助我。 –

0

使用導入控制參數--delete-target-dir。它將刪除導入目標目錄(如果存在)。