Sqoop抽取Phoenix数据

使用场景:主要想实现抽取hbase数据到hive中,Sqoop不支持对hbase的直接抽取,但是我们可以通过Phoenix映射hbase表实现。

安装好phoenix后对于HBase中已经存在的数据表不会自动进行映射,所以想要再phoenix中操作HBase已有数据表就需要手动进行配置。查看phoenix的版本,如果版本是4.10之前的,映射关系是根据列来映射的,phoenix可以通过create table(...)来映射;如果版本是4.10以后的,则只能通过视图来创建,create view(...),才能查询到hbase中的数据。

ps:创建表映射,删除表时,会将hbase中的表一并删除,视图不会有影响。

1、创建hbase表

hbase(main):014:0> create 'TESTDATA','INFO'
0 row(s) in 1.2140 seconds

2、插入数据

put 'TESTDATA','row001','INFO:NAME','aaa'
put 'TESTDATA','row002','INFO:NAME','bbb'
put 'TESTDATA','row001','INFO:AGE','18'
put 'TESTDATA','row002','INFO:AGE','19'
hbase(main):020:0> scan 'TESTDATA'
ROW                                            COLUMN+CELL
 row001                                        column=INFO:AGE, timestamp=1539676268928, value=18
 row001                                        column=INFO:NAME, timestamp=1539676226267, value=aaa
 row002                                        column=INFO:AGE, timestamp=1539676275006, value=19
 row002                                        column=INFO:NAME, timestamp=1539676236753, value=bbb
2 row(s) in 0.0140 seconds

ps:Hbase数据表的默认主键列明是ROW

3、创建Phoenix表

create view TESTDATA ("ROW" varchar primary key,info.name varchar,info.age varchar) as select * from TESTDATA;

4、验证是映射

select * from testdata;
+---------+-------+------+
|   ROW   | NAME  | AGE  |
+---------+-------+------+
| row001  | aaa   | 18   |
| row002  | bbb   | 19   |
+---------+-------+------+

ps:此时我们已经建立了Phoenix映射hbase的关联表,需要注意的是Hbase是区分大小写的,在这里我们统一使用的是大写,因为在Sqoop抽取数据时,会把SQL语句自动转大写,回报表或列明未定义的错误,如果单纯的只是映射,对于小写的表明和列明用双引号括起来即可。

5、Sqoop抽取数据

sqoop import -D mapreduce.map.memory.mb=3072 --driver org.apache.phoenix.jdbc.PhoenixDriver --connect jdbc:phoenix:10.222.16.174:2181 --query "select * from testdata WHERE name='aaa' and \$CONDITIONS" --hive-import --hive-table testdata02  --target-dir /testSqoop --delete-target-dir --split-by name --hive-overwrite --null-string '\\N' --null-non-string '\\N'

6、查看hive中表

hive> show tables;
OK
test1
testdata
testdata01
testdata02
testdata11
tmp2
Time taken: 0.013 seconds, Fetched: 6 row(s)
hive> select * from testdata02;
OK
row001	aaa	18
Time taken: 0.04 seconds, Fetched: 1 row(s)

我们看到表抽取成功了!

猜你喜欢

转载自blog.csdn.net/cherish_dwj/article/details/83141932
今日推荐