1. 程式人生 > >Sqoop把hive中的資料匯出到mysql中

Sqoop把hive中的資料匯出到mysql中

首先

 

        

官網上對sqoop的定義是:

Sqoop是一個被設計用來在hadoop大資料平臺和結構化資料庫(比如關係型資料庫)之間傳輸批量資料的一個工具。既然是一個工具那麼用起來應該是比較簡單的,可是實際操作時總會出現這樣或者那樣的錯誤。

由於工作中會有各種各樣的需求,但是大多最終計算的結果都要以excel的形式給到需求方,資料量不太大的時候可以使用navicat自帶的匯出功能或者hue的匯出功能就可以直接把資料導成excel或者其他格式的檔案,但是資料量一旦太大的話,這些工具對於一次性匯出的資料量是有限制的,此時相對來說sqoop比較好一些,因為sqoop的底層是走mapreduce程式所以會比較穩定,而且對資料量沒有限制。當然也可以使用spark的bulkload方式,不過spark是基於記憶體處理的,設計好的話應該也是沒有問題的。

這裡我打算把hive中的一張表skuattributes 匯出到mysql中:

Hive中這張表的表結構是:

 

欄位型別都是string型別的,此時要在mysql中建立好表結構相同的一張表:

我給它命名成相同的名字:skuattributes;

Mysql 中建立的表結構資訊:

 

Mysql中沒有string型別,可以用varchar型別代替(varchar是可變長字串型別)

這樣就建好了與hive對應的表

下面開始使用sqoop匯出語句:

 

然而執行結果卻報錯了:

 

說找不到manager:

仔細檢視發現url寫錯啦,

 

紅線地方少些冒號:

加上之後:

 

重新執行

 

一共匯出2966條資料,到底對不對呢,我去hive中查一下:

 

的確是2966條資料:

最後再去mysql中檢視一下資料量對不對:

 

確認過眼神是對的沒錯啦。

其實原理是不難的,就是語句除錯以及出現的一些語法錯誤。

Hive中查看錶的hdfs路徑可以直接在hive命令列中輸入:

Desc formatted tablename;

其中location對應的就是表在hdfs上的路徑資訊啦

 

今天就寫到這了。