天天看點

大資料-sqoop資料遷移

4. sqoop資料遷移

sqoop是apache旗下一款“hadoop和關系資料庫伺服器之間傳送資料”的工具。

導入資料:mysql,oracle導入資料到hadoop的hdfs、hive、hbase等資料存儲系 統;

導出資料:從hadoop的檔案系統中導出資料到關系資料庫mysql等

大資料-sqoop資料遷移
大資料-sqoop資料遷移
大資料-sqoop資料遷移

将導入或導出指令翻譯成mapreduce程式來實作

在翻譯出的mapreduce中主要是對inputformat和outputformat進行定制

安裝sqoop的前提是已經具備java和hadoop的環境

下載下傳位址

http://archive.apache.org/dist/sqoop/1.4.7

sqoop1版本詳細下載下傳位址

http://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

sqoop2版本詳細下載下傳位址

http://archive.apache.org/dist/sqoop/1.99.6/sqoop-1.99.6-bin-hadoop200.tar.gz

我們這裡使用sqoop1的版本,

下載下傳之後上傳到/export/softwares目錄下,然後進行解壓

sqoop的使用需要添加兩個額外的依賴包,一個是mysql的驅動包,一個是<code>java-json</code>的的 依賴包,不然就會報錯

大資料-sqoop資料遷移

将這個兩個jar包添加到sqoop的lib目錄下

大資料-sqoop資料遷移

“導入工具”導入單個表從rdbms到hdfs。表中的每一行被視為hdfs的記錄。所有記錄 都存儲為文本檔案的文本資料(或者avro、sequence檔案等二進制資料)

指令行檢視幫助

列出windows主機所有的資料庫

檢視某一個資料庫下面的所有資料表

如果出現連接配接拒絕,則在windows的mysql的資料庫中執行以下指令: 開啟windows的遠端連接配接權限

表資料

在mysql中有一個庫userdb中三個表:emp, emp_add和emp_conn

大資料-sqoop資料遷移
大資料-sqoop資料遷移
大資料-sqoop資料遷移

下面的指令用于從mysql資料庫伺服器中的emp表導入hdfs。

如果成功執行,那麼會得到下面的輸出。

大資料-sqoop資料遷移

為了驗證在hdfs導入的資料,請使用以下指令檢視導入的資料

在導入表資料到hdfs使用sqoop導入工具,我們可以指定目标目錄。

使用參數 <code>--target-dir</code>來指定導出目的地,

使用參數<code>—delete-target-dir</code>來判斷導出目錄是否存在,如果存在就删掉

檢視導出的資料

大資料-sqoop資料遷移

它會用逗号(,)分隔emp_add表的資料和字段。

檢視檔案内容

大資料-sqoop資料遷移

将我們mysql表當中的資料直接導入到hive表中的話,我們需要将hive的一個叫做<code>hive- exec-3.1.1.jar</code> 的jar包拷貝到sqoop的lib目錄下

将我們mysql當中的資料導入到hive表當中來

大資料-sqoop資料遷移

我們也可以通過指令來将我們的mysql的表直接導入到hive表當中去

通過這個指令,我們可以直接将我們mysql表當中的資料以及表結構一起倒入到hive當中 去

我們可以導入表的使用sqoop導入工具,"where"子句的一個子集。它執行在各自的資料 庫伺服器相應的sql查詢,并将結果存儲在hdfs的目标目錄。

where子句的文法如下。

按照條件進行查找,通過—where參數來查找表emp_add當中city字段的值為sec-bad的 所有資料導入到hdfs上面去

我們還可以通過 –query參數來指定我們的sql語句,通過sql語句來過濾我們的資料進行導入

檢視hdfs資料内容

大資料-sqoop資料遷移

在實際工作當中,資料的導入,很多時候都是隻需要導入增量資料即可,并不需要将表 中的資料全部導入到hive或者hdfs當中去,肯定會出現重複的資料的狀況,是以我們一 般都是選用一些字段進行增量的導入,為了支援增量的導入,sqoop也給我們考慮到了這 種情況并且支援增量的導入資料

增量導入是僅導入新添加的表中的行的技術。

它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’選項來執行增量導入。

下面的文法用于sqoop導入指令增量選項。

第一種增量導入使用上面的選項來實作

導入emp表當中id大于1202的所有資料

注意:增量導入的時候,一定不能加參數–delete-target-dir否則會報錯

檢視資料内容

大資料-sqoop資料遷移

第二種增量導入通過–where條件來實作

或者我們使用–where來進行控制資料的選取會更加精準

1、将資料從hdfs把檔案導出到rdbms資料庫

導出前,目标表必須存在于目标資料庫中。

u 預設操作是從将檔案中的資料使用insert語句插入到表中

u 更新模式下,是生成update語句更新表資料

資料是在hdfs當中的如下目錄/sqoop/emp,資料内容如下

通過export來實作資料的導出,将hdfs的資料導出到mysql當中去

大資料-sqoop資料遷移