1. 程式人生 > >大資料平臺和MySQL之間的資料匯出和匯入

大資料平臺和MySQL之間的資料匯出和匯入

資料的匯出和匯入都是針對大資料平臺(HDFS,Hive,HBase)來定義的
資料從MySQL到大資料平臺----------資料匯入
資料從大資料平臺到MySQL-----------資料匯出

一、資料匯出(大資料平臺---->Mysql)

1.匯出 HDFS資料到MySQL

sqoop export \
--connect jdbc:mysql://qyl01:3306/sqoopdb \
--username root \
--password root \
--table sqoopstudent \

注意事項:
1)要在在mysql中建立sqoopdb資料庫,
2)在sqoopdb中建立sqoopstudent的表,表中的欄位與hdfs分割的欄位一樣
–export-dir /sqoopdata
3)指定要把那個目錄下的檔案匯出
–fields-terminated-by ‘,’
4)指定分隔符


Export 常用引數:
export 主要引數
–direct 快速匯入
–export-dir HDFS 到處資料的目錄
-m,–num-mappers 都少個 map 執行緒
–table 匯出哪個表
–call 儲存過程
–update-key 通過哪個欄位來判斷更新
–update-mode 插入模式,預設是隻更新,可以設定為 allowinsert.
–input-null-string 字元型別 null 處理
–input-null-non-string 非字元型別 null 處理
–staging-table 臨時表
–clear-staging-table 清空臨時表
–batch 批量模式

2.匯出 HIVE 資料到 MySQL
/user/hive/warehouse/test.db/course hive檔案路徑

sqoop export \
--connect jdbc:mysql://qyl01:3306/sqoopdb \
--username root \
--password root \
--table course \
--export-dir /user/hive/warehouse/test.db/course \

指定要匯出hive表的檔案路徑
–input-fields-terminated-by ‘,’
指定分隔符。
基本步驟和HDFS一樣。

3.匯出 HBase資料到 MySQL


很遺憾,現在還沒有直接的命令將 HBase 的資料匯出到 MySQL
一般採用如下 3 種方法:
1、將 Hbase 資料,扁平化成 HDFS 檔案,然後再由 sqoop 匯入
2、將 Hbase 資料匯入 Hive 表中,然後再匯入 mysql
3、直接使用 Hbase 的 Java API 讀取表資料,直接向 mysql 匯入,不需要使用 sqoop

二、資料匯入(Mysql------>大資料平臺)

常用引數:
–connect jdbc 連線地址
–connection-manager 連線管理者
–driver 驅動類
–hadoop-mapred-home $HADOOP_MAPRED_HOME
–help help 資訊
-P 從命令列輸入密碼
–password 密碼
–username 賬號
–verbose 列印流程資訊
–connection-param-file 可選引數
1.匯入 MySQL 資料到 HDFS
1)普通匯出

  sqoop import \
--connect jdbc:mysql://qyl01:3306/mysql \
--username root \
--password root \
--table help_keyword \
 -m 1

預設匯出到/user/qyl/目錄下 可以通過命令進行檢視:

hadoop fs -cat /user/qyl/help_keyword/part-m-00000

2) 指定分隔符和匯入路徑
–target-dir 指定目錄
–fields-terminated-by '\t 指定分隔符

sqoop import \
--connect jdbc:mysql://qyl:3306/mysql \  mysql資料庫
--username root \
--password root \
--table help_keyword \  資料庫中的表
--target-dir /user/my_help_keyword \  匯入到HDFS中的路徑
--fields-terminated-by '\t' \    指定分隔符
 -m 1

3)匯入 where 條件資料
–where where 子句的語法

sqoop import \
--connect jdbc:mysql://qyl01:3306/mysql \
--username root \
--password root \
--where "name='STRING' " \
--table help_keyword \
--target-dir /test\
這個路徑一定不能存在
 -m 1

2.匯入 MySQL 資料到 HIVE
1)普通匯入
Sqoop 匯入關係型資料到 hive 的過程是先匯入到 hdfs,然後再 load 進入 hive。
example1:

sqoop import \
--connect jdbc:mysql://qyl01:3306/mysql \
--username root \
--password root \
--table help_keyword \
--hive-import \
指定hive的匯出
-m 1

example2:

sqoop import \
--connect jdbc:mysql://qyl01:3306/mysql \
--username root \
--password root \
--table help_keyword \
--fields-terminated-by "\t" \
--lines-terminated-by "\n" \
--hive-import \
--hive-overwrite \
--create-hive-table \
--hive-table test.new_help_keyword \
--delete-target-dir

注意:表會自動建立,但是庫不會。所以在執行該語句之前,一定要確保 hive 的資料庫test是存在的,否則程式會報錯

2)增量匯入
增量匯入是僅匯入表中新新增的行的技術。
它需要新增 ‘incremental’ , ‘check-column’, 和 ‘last-value’ 選項來執行增量匯入。

sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password root \
--table help_keyword \
--target-dir /user/hadoop/myimport3 \
--incremental append \     指定遞增
--check-column help_keyword_id \    增加的列
--last-value 500 \     從500開始
-m 1

2.匯入 MySQL 資料到 HBASE

sqoop import \
--connect jdbc:mysql://qyl01:3306/mysql \
--username root \
--password root \
--table help_keyword \
--hbase-table new_help_keyword \
--column-family person \
--hbase-row-key help_keyword_id

欄位解釋:
–connect jdbc:mysql://hadoop04:3306/mysql 表示遠端或者本地 Mysql 服務的 URI
–hbase-create-table 表示在 HBase 中建立表。
–hbase-table new_help_keyword 表示在 HBase 中建立表 new_help_keyword。
–hbase-row-key help_keyword_id 表示hbase表的rowkey是mysql表的help_keyword_id
欄位。
–column-family person 表示在表 new_help_keyword 中建立列族 person。
–username ‘root’ 表示使用使用者 root 連線 mysql。
–password ‘root’ 連線 mysql 的使用者密碼
–table help_keyword 表示匯出 mysql 資料庫的 help_keyword 表