一.Sqoop集成HBase
1.利用Sqoop在HBase和RDBMS中進行數據的轉儲。
2.相關參數:
參數 | 描述 |
---|---|
–column-family <family> | 設置導入的目標列族 |
–hbase-create-table | 是否自動創建不存在的HBase表(這就意味着,不需要手動提前在HBase中先建立表) |
–hbase-row-key <col> | mysql中哪一列的值作爲HBase的rowkey,如果rowkey是個組合鍵,則以逗號分隔(注:避免rowkey的重複) |
–hbase-table <table-name> | 指定數據將要導入到HBase中的哪張表中 |
–hbase-bulkload | 是否允許bulk形式的導入 |
二. 案例
1.目標:將RDBMS中的數據抽取到HBase中
2.分步實現:
(1) 配置sqoop-env.sh,添加如下內容:
export HBASE_HOME=/opt/module/hbase-1.3.1
(2) 在Mysql中新建一個數據庫db_library,一張表book
進入mysql
mysql -uroot -p000000
建庫建表
CREATE DATABASE db_library;
CREATE TABLE db_library.book(
id int(4) PRIMARY KEY NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
price VARCHAR(255) NOT NULL);
(3) 向表中插入一些數據
INSERT INTO db_library.book (name, price) VALUES('Lie Sporting', '30');
INSERT INTO db_library.book (name, price) VALUES('Pride & Prejudice', '70');
INSERT INTO db_library.book (name, price) VALUES('Fall of Giants', '50');
(4) 執行Sqoop導入數據的操作
手動創建HBase表
hbase> create 'hbase_book','info'
(5) 在HBase中scan這張表得到如下內容
hbase> scan 'hbase_book'
思考:嘗試使用複合鍵作爲導入數據時的rowkey。
(6)利用sqoop導入
bin/sqoop import \
--connect jdbc:mysql://hadoop2:3306/db_library \
--username root \
--password 000000 \
--table book \
--columns "id,name,price" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_book" \
--num-mappers 1 \
--split-by id
提示:sqoop1.4.6只支持HBase1.0.1之前的版本的自動創建HBase表的功能
(7)結果:
hbase> scan 'hbase_book'