sqoop导出orc数据至mysql_Sqoop 支持 ORC 文件格式
ORC 介紹
ORC 文件格式是 Hive 0.11.0 版本引入的一種文件格式。ORC 的引入是為了解決其他 Hive 文件格式的局限性。使用 ORC 文件格式提升 Hive 讀取、寫入及處理數據的性能。
與 RCFile 對比,ORC 文件格式有很多優點:每個 Task 只輸出一個文件,降低 NameNode 的負載。
Hive 數據類型支持,包括:datetime、decimal 以及復雜數據類型(struct、list、map、union)。
文件中存儲輕量級的索引:跳過不通過謂語過濾的行組
跳轉到指定的行
基于數據類型的塊模式壓縮:整型數據列采用行程長度編碼(run-length encoding)
字符串數據列采用詞典編碼(dictionary encoding)
使用獨立的 RecordReader 并發讀取相同的文件
無需掃描 markers 就可以分割文件的能力
綁定讀寫需要的內存量
Sqoop 支持 ORC
通過 Sqoop-HCatalog 集成解決 Sqoop 不支持 ORC 的問題。
HCatalog 背景HCatalog 是 Hadoop 的一個 table 與存儲管理的一個服務,用戶可以更容易地使用不同的數據處理工具 Pig、MapReduce 和 Hive 讀寫數據。HCatalog 表的抽象呈現給用戶一個 HDFS 分布式文件系統(HDFS)中的關系視圖,用戶不需要擔心數據存儲在哪里及數據的存儲格式:RCFile 格式、text 文件、或者 SequenceFile。
HCatalog 支持讀寫任何實現了 Hive SerDe(serializer-deserializer)的文件格式。默認的,HCatalog 支持 RCFile、CSV、JSON 和 SequenceFile。要使用用戶自定義格式,必須提供 InputFormat 和 OutputFormat 及 SerDe。
Sqoop 使用 HCatalog 抽象不同存儲格式的能力來支持 RCFile(以及未來的文件類型)。
集成 HCatalog 后新增的參數見 Sqoop 官方文檔:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_sqoop_hcatalog_integration
定制 Sqoop 改造修改 bin/sqoop 命令腳本:為 import 操作增加 Hive Table 分區數據刪除邏輯,在執行導入前不需要另行清理數據,從而簡化 Sqoop import 腳本的開發工作。
Sqoop 導入 ORC 實例
第一步:創建 Hive 表CREATE TABLE `dev.bims_device`(
`code` string,
`mac` string,
`wifi_mac` string,
`create_date` string,
`activate_date` string,
`state` string,
`area_id` bigint,
`city_id` bigint,
`sp_define_id` bigint)
PARTITIONED BY (
`dt` string)
stored as orc;
第二步:Sqoop importsqoop import
--hcatalog-database dev
--hcatalog-table bims_device
--hcatalog-partition-keys dt
--hcatalog-partition-values ${dt}
--connect jdbc:mysql://${host}:${port}/bims
--username "${userName}"
--password "${password}"
--table bims_device
--columns "code,mac,wifi_mac,create_date,activate_date,state,area_id,city_id,sp_define_id"
Sqoop 導出 ORC 實例
第一步:創建 MySQL 數據表CREATE TABLE `test`.`bims_device`(
`code` varchar(50),
`mac` varchar(50),
`wifi_mac` varchar(50),
`create_date` varchar(50),
`activate_date` varchar(50),
`state` varchar(50),
`area_id` bigint,
`city_id` bigint,
`sp_define_id` bigint);
第二步:Sqoop exportsqoop export
--hcatalog-database dev
--hcatalog-table bims_device
--hcatalog-partition-keys dt
--hcatalog-partition-values ${dt}
--connect jdbc:mysql://${host}:${port}/test?useCompression=true
--username ${userName}
--password ${password}
--table bims_device
注意事項- MySQL 表字段名稱必須與 Hive 倉庫中的表字段名稱一致
- Sqoop ORC 導出時,數據類型需要轉換時如果存在臟數據會導致導出失敗。例如,長度為 0 的 String 如果導出為 int 時。
- 導出時需要提前清理 MySQL 中之前導出的數據,避免重復運行時造成數據重復。
總結
以上是生活随笔為你收集整理的sqoop导出orc数据至mysql_Sqoop 支持 ORC 文件格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【无标题】奥的斯电梯故障代码 逻辑思
- 下一篇: 2.poi注意点