Alex 的 Hadoop 菜鳥教程: 第9課 Sqoop1 從Hbase或者Hive導出mysql
來源:程序員人生 發布時間:2014-12-17 08:19:35 閱讀次數:3977次
今天講講怎樣用sqoop將Hbase或Hive的東西導出到mysql。不過事前要告知大家
目前sqoop沒有辦法把數據直接從Hbase導出到mysql。必須要通過Hive建立2個表,1個外部表是基于這個Hbase表的,另外一個是單純的基于hdfs的hive原生表,然后把外部表的數據導入到原生表(臨時),然后通過hive將臨時表里面的數據導出到mysql
數據準備
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,所以在建立mysql的table的時候有可能也建立對應的key字段,但是key是mysql的保存字,會致使insert語句沒法插入的問題
Hbase建立employee表
建立employee表,并插入數據
hbase(main):005:0> create 'employee','info'
0 row(s) in 0.4740 seconds
=> Hbase::Table - employee
hbase(main):006:0> put 'employee',1,'info:id',1
0 row(s) in 0.2080 seconds
hbase(main):008:0> scan 'employee'
ROW COLUMN+CELL
1 column=info:id, timestamp=1417591291730, value=1
1 row(s) in 0.0610 seconds
hbase(main):009:0> put 'employee',1,'info:name','peter'
0 row(s) in 0.0220 seconds
hbase(main):010:0> scan 'employee'
ROW COLUMN+CELL
1 column=info:id, timestamp=1417591291730, value=1
1 column=info:name, timestamp=1417591321072, value=peter
1 row(s) in 0.0450 seconds
hbase(main):011:0> put 'employee',2,'info:id',2
0 row(s) in 0.0370 seconds
hbase(main):012:0> put 'employee',2,'info:name','paul'
0 row(s) in 0.0180 seconds
hbase(main):013:0> scan 'employee'
ROW COLUMN+CELL
1 column=info:id, timestamp=1417591291730, value=1
1 column=info:name, timestamp=1417591321072, value=peter
2 column=info:id, timestamp=1417591500179, value=2
2 column=info:name, timestamp=1417591512075, value=paul
2 row(s) in 0.0440 seconds
建立Hive外部表
hive 有分為原生表和外部表,原生表是以簡單文件方式存儲在hdfs里面,外部表依賴別的框架,比如Hbase,我們現在建立1個依賴于我們剛剛建立的employee hbase表的hive 外部表
hive> 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");
OK
Time taken: 0.324 seconds
hive> select * from h_employee;
OK
1 1 peter
2 2 paul
Time taken: 1.129 seconds, Fetched: 2 row(s)
建立Hive原生表
這個hive原生表只是用于導出的時候臨時使用的,所以取名叫 h_employee_export,字段之間的分隔符用逗號