Sqoop 無法直接從 HBase 導出至 MySQL,需透過 Hive 中轉:建立 HBase 外部表 → 建立 Hive 原生臨時表 → 導入資料 → Sqoop 導出至 MySQL。
CREATE TABLE `employee` (
`rowkey` int(11) NOT NULL,
`id` int(11) NOT NULL,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
注意: Hive 映射 HBase rowkey 常用 key,但 key 是 MySQL 保留字,建表時避免使用,改用 rowkey。
hbase(main):005:0> create 'employee','info'
hbase(main):006:0> put 'employee',1,'info:id',1
hbase(main):009:0> put 'employee',1,'info:name','peter'
hbase(main):011:0> put 'employee',2,'info:id',2
hbase(main):012:0> put 'employee',2,'info:name','paul'
CREATE EXTERNAL TABLE h_employee(key int, id int, name string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, info:id,info:name")
TBLPROPERTIES ("hbase.table.name" = "employee");
驗證:select * from h_employee; 可看到資料。
CREATE TABLE h_employee_export(key INT, id INT, name STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'; -- 逗號分隔
HDFS 存儲樣貌:1,1,peter、2,2,paul。
INSERT OVERWRITE TABLE h_employee_export SELECT * FROM h_employee;
驗證 HDFS 檔案內容已為逗號分隔文本。
sqoop export \
--connect jdbc:mysql://localhost:3306/sqoop_test \
--username root --password root \
--table employee \
--m 1 \
--export-dir /user/hive/warehouse/h_employee_export/
關鍵日誌:Job job_... completed successfully、Exported 2 records。
可透過 https://hadoop01:8088/proxy/application_.../ 追蹤任務詳情。
mysql> select * from employee;
+--------+----+-------+
| rowkey | id | name |
+--------+----+-------+
| 1 | 1 | peter |
| 2 | 2 | paul |
+--------+----+-------+
導入成功!