4. sqoop資料遷移
sqoop是apache旗下一款“hadoop和關系資料庫伺服器之間傳送資料”的工具。
導入資料:mysql,oracle導入資料到hadoop的hdfs、hive、hbase等資料存儲系 統;
導出資料:從hadoop的檔案系統中導出資料到關系資料庫mysql等
将導入或導出指令翻譯成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>的的 依賴包,不然就會報錯
将這個兩個jar包添加到sqoop的lib目錄下
“導入工具”導入單個表從rdbms到hdfs。表中的每一行被視為hdfs的記錄。所有記錄 都存儲為文本檔案的文本資料(或者avro、sequence檔案等二進制資料)
指令行檢視幫助
列出windows主機所有的資料庫
檢視某一個資料庫下面的所有資料表
如果出現連接配接拒絕,則在windows的mysql的資料庫中執行以下指令: 開啟windows的遠端連接配接權限
表資料
在mysql中有一個庫userdb中三個表:emp, emp_add和emp_conn
下面的指令用于從mysql資料庫伺服器中的emp表導入hdfs。
如果成功執行,那麼會得到下面的輸出。
為了驗證在hdfs導入的資料,請使用以下指令檢視導入的資料
在導入表資料到hdfs使用sqoop導入工具,我們可以指定目标目錄。
使用參數 <code>--target-dir</code>來指定導出目的地,
使用參數<code>—delete-target-dir</code>來判斷導出目錄是否存在,如果存在就删掉
檢視導出的資料
它會用逗号(,)分隔emp_add表的資料和字段。
檢視檔案内容
将我們mysql表當中的資料直接導入到hive表中的話,我們需要将hive的一個叫做<code>hive- exec-3.1.1.jar</code> 的jar包拷貝到sqoop的lib目錄下
将我們mysql當中的資料導入到hive表當中來
我們也可以通過指令來将我們的mysql的表直接導入到hive表當中去
通過這個指令,我們可以直接将我們mysql表當中的資料以及表結構一起倒入到hive當中 去
我們可以導入表的使用sqoop導入工具,"where"子句的一個子集。它執行在各自的資料 庫伺服器相應的sql查詢,并将結果存儲在hdfs的目标目錄。
where子句的文法如下。
按照條件進行查找,通過—where參數來查找表emp_add當中city字段的值為sec-bad的 所有資料導入到hdfs上面去
我們還可以通過 –query參數來指定我們的sql語句,通過sql語句來過濾我們的資料進行導入
檢視hdfs資料内容
在實際工作當中,資料的導入,很多時候都是隻需要導入增量資料即可,并不需要将表 中的資料全部導入到hive或者hdfs當中去,肯定會出現重複的資料的狀況,是以我們一 般都是選用一些字段進行增量的導入,為了支援增量的導入,sqoop也給我們考慮到了這 種情況并且支援增量的導入資料
增量導入是僅導入新添加的表中的行的技術。
它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’選項來執行增量導入。
下面的文法用于sqoop導入指令增量選項。
第一種增量導入使用上面的選項來實作
導入emp表當中id大于1202的所有資料
注意:增量導入的時候,一定不能加參數–delete-target-dir否則會報錯
檢視資料内容
第二種增量導入通過–where條件來實作
或者我們使用–where來進行控制資料的選取會更加精準
1、将資料從hdfs把檔案導出到rdbms資料庫
導出前,目标表必須存在于目标資料庫中。
u 預設操作是從将檔案中的資料使用insert語句插入到表中
u 更新模式下,是生成update語句更新表資料
資料是在hdfs當中的如下目錄/sqoop/emp,資料内容如下
通過export來實作資料的導出,将hdfs的資料導出到mysql當中去