1. 程式人生 > >Sqoop進行資料匯入匯出

Sqoop進行資料匯入匯出

Sqoop是用來進行資料匯入匯出的工具,一般用在hadoop這個框架中,常用的應用場景有將mysql資料庫中的資料匯入HDFS或者Hive、Hbase,或者從後者中匯出到關係型資料庫中,下面將進行幾段程式碼的演示匯入和匯出的過程。

將mysql中的資料匯入到hadoop叢集上(HDFS):

首先將指令碼命令貼出:

./sqoop import --connect jdbc:mysql://localhost/test --username root --password lakers  --table persons -m 1

故名思議,

username:資料庫的使用者名稱

password:使用者名稱對應的密碼

table:資料中需要匯入的表名

-m :啟動mapreduce的個數。

這裡實現的是將一個表(test)的全部資料匯入到hdfs中,其中可以設定匯入到hdfs的路徑 通過引數--target-dir <dir>設定,其他的還有很多的引數設定可以通過去官網檢視:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_importing_data_into_hive_2

將test表中的某些資料匯入到HDFS中:

./sqoop import --connect jdbc:mysql://localhost/test --username root --password lakers  --query 'select ID,name from persons where $CONDITIONS' --target-dir /persons -m 1

將mysql資料匯入Hive:

傳統地將mysql中的資料匯入hdfs有中方法就是:

1 將mysql資料匯出到本地

2 在Hive中建立表格式

3 將匯出在本地的資料匯入到Hive中

但是用了sqoop之後我們可以一步完成上面的操作。

首先將mysql的資料匯入到Hive上,其實也是匯入到hdfs上,但是有個好處是我們可以直接通過Hive去處理資料,得到我們想要的結果,下面的shell指令碼和上面的指令碼很相似。

./sqoop import --connect jdbc:mysql://localhost/test --username root --password lakers  --table persons -m 1 --hive-import


   這裡有個需要說明的是,我們將mysql資料匯入到Hive中的時候是不需要去建立表,在匯入過程中sqoop會自動解析資料,幫我們建立對應格式的表結構。這裡不得不說省了很大的功夫,畢竟建立表結構很麻煩的,尤其是表字段很多的情況下。

和上面的區別就是最後加了--hive-import 同時也是可以通過引數來設定匯入的目錄,從官網查詢。

Mysql中資料匯入到HBase:

./sqoop import --connect jdbc:mysql://localhost/test --username root --password lakers  --table persons -m 1 --hbase-create-table --hbase-table person2 --column-family info --hbase-row-key sid

--hbase-create-table :自動建立hbase表

--hbase-table :表明

--column-family:列簇名

--hbase-row-key:指定rowkey對應Mysq中的鍵

  注:目前還不能直接將HBase中資料直接匯出到Mysql中,可以先匯出到本地,然後再匯入Mysql

將Hive中的資料匯出到mysql中:

./sqoop export --connect jdbc:mysql://localhost/test --username root --password lakers -m 1 --table personcopy --export-dir /hive/warehouse/persons --input-fields-terminated-by '\0001'

--export-dir:匯出資料的目錄

--input-fileds-terminated-by : 欄位之間的分割符

注意:

     這裡需要注意的是,我們在從mysql匯入Hive中的時候是不需要建立表結構的,但是我們在將Hive的資料匯出到Mysql中的時候是需要自己建立表結構的,很簡單的原因,比如我們Mysql 的一個varchar(50)或者varchar(60)這種會自動在Hive中解析為String型別,但是相反的是,將Hive中的String型別匯入到Mysql中就不知道是解析為varchar(?),所以在這個時候我們需要手動的去建立對應的表結構!