【Sqoop】从MySQL同步数据到Hive的操作参数解析
參數解析:
必選參數
--connect :連接的mysql數據庫的jdbc信息
--username:mysql數據庫的登錄賬戶
--password:mysql數據庫的登錄密碼
--table: 關系數據庫表名
?--hive-import: 從關系型數據庫向hive中導入數據的標志
可選參數
--as-testfile: 將數據導入一個普通文本文件中
--as-sequencefile:將數據導入一個
--as-avrodatafile:將數據導入一個Avro數據文件中
--columns<cl,col,col,...> 指定要導入的字段值
-m或--num-mappers:確定導入數據時啟動的并行map數,默認為4
--target-dir<dir>: 指定導入數據的hdfs路徑--目標路徑
--query <selectstatement>:從查詢結果中導入數據,與--target-dir共用
--hive-table:導入的hive表
--hive-database:導入的hive庫
--where :從關系型數據庫導入數據時的查詢條件,接where的查詢條件。例如:‘–where id<100’
--null-non-string<null-string>:指定非字符串類型為null時的替代字符
--null-string<null-string>:指定字符串類型為null時的替代字符
--hive-drop-import-delims:導入數據到hive時,屏蔽數據中\n,\r和\01等類型的特殊字符
--hive-overwrite:導入前清理hive表中所有數據
--hive-partition-key<k> : hive表的分區字段,字段類型默認為string
--hive-partition-value<v>:與--hive-partition-key同時使用,指定導入的分區值
--fields-terminated-by <f> :指定導入數據的字段分隔符
--lines-terminated-by <l>:指定導入數據的行分隔符
--delete-target-dir:若指定的目錄存在,需要先刪除
--split-by:指定數據集分片的字段
?
解析??
原理
sqoop將數據從關系型數據庫mysql導入到hadoop數據庫hive,整體步驟分為兩步:
1.將mysql中數據導入hadoop的hdfs上
2.將hadoop的hdfs上的數據加載到hive數據庫中
?使用方法:
根據sqoop的工作原理,使用sqoop導入數據,主要有兩種方法:
方法1(直接導入):將mysql數據直接導入hive表中
方法2(導入hdfs):先將mysql數據導入hdfs上,之后再將hdfs數據加載到hive中
直接導入典型示例:
sqoop import --connect jdbc:mysql://localhost:3306/bdp?--username root --password bdp?--table emp --hive-import?--hive-database test --hive-table EMP --where 'id>10' --hive-partition-key?time --hive-partition-value '2018-05-18'?--null-string '\\N' --null-non-string '\\N' --fields-terminated-by ',' --lines-terminated-by '\n' -m 1
?導入hdfs典型示例:
導入數據到hdfs:
sqoop import ?--connect jdbc:mysql://localhost:3306/bdp?--username root --password bdp?--table emp --query 'select * from emp? inner join? user on emp.id=user.id where id>10' --split-by id --target-dir /user/data/mysql/emp -m 1
加載數據到hive表:
load data inpath '/user/data/mysql/emp ' into table test.EMP2
分析:
直接導入適用于將單個表中部分數據或所有數據導入hive表中的情況。
導入hdfs適用于將組合數據集導入hive表中的情況。--query參數可以對多個mysql表join后的數據集進行篩選,該方法可以將指定的數據集(可能涉及多張表)導入hdfs,并不限于單張表。
?
注意事項:
1.注意字段分隔符和行分隔符的使用,必須與目標hive表一致,否則將出現,數據導入成功,但無法正常加載到hive表(hive表中字段值為null)
2.–columns接的字段時mysql表的字段,要求這些字段要和Hive表中的字段對應,數據類型要對應,否則會出現異常
3.--hive-table中只支持一個靜態分區,匹配的分區參數為--hive-partition-key和--hive-partition-value。多分區時,對應的參數應該為--hcatalog-table,--hcatalog-database,--hcatalog-partition-keys和--hcatalog-partition-values
4.hive沒有rowkey,sqoop-hive只能追加或者清空后再添加,不能update
總結
以上是生活随笔為你收集整理的【Sqoop】从MySQL同步数据到Hive的操作参数解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32开发 -- 地球坐标系(WGS
- 下一篇: STM32开发 -- Ublox GPS