阿里云的分析型数据库(AnalyticDB)和E-MapReduce(简称EMR)在大数据场景下非常有用,本文将介绍如何尝试打通两个产品,将通过EMR中自带的开源工具Sqoop来完成这个任务。
AnalyticDB数据准备
在DMS For Analytic DB控制台可以新建数据库和表。数据库和表名分别是:
- 数据库:test_emr_0
- 数据表:test1(注意新建表的时候选择更新方式为“实时更新”,这样就可以在DMS里增加数据)
CREATE TABLE test_emr_0.test1 (
a varchar NOT NULL ,
b int NOT NULL ,
primary key (a)
)
PARTITION BY HASH KEY(a) PARTITION NUM 100
TABLEGROUP test_group
OPTIONS(UPDATETYPE='realtime');
插入数据
insert into test1 (a, b) values ('ads', 1);
insert into test1 (a, b) values ('bds', 2);
insert into test1 (a, b) values ('emr', 3);
insert into test1 (a, b) values ('oss', 4);
insert into test1 (a, b) values ('hadoop', 5);
注意:因为Sqoop工具访问AnalyticDB时使用更加通用的SQL格式,所以默认的LM计算引擎并不适合。需要你提工单将分析型数据库的默认引擎修改成MPP
网络环境准备
AnalyticDB 默认可以用公网访问,比如刚才新建的数据库可用如下地址访问到:test-emr-0-6e2c83b1.cn-hangzhou-1.ads.aliyuncs.com。但是EMR环境只有Master节点可以访问公网,为了使用Sqoop工具(Sqoop作业运行在Worker节点上),需要使用AnalyticDB VPC网络功能,打通EMR VPC网络和AnalyticDB的网络环境。
临时方案也可以为每台EMR worker节点绑定弹性VIP,这样所有的节点都有了公网访问能力(不推荐)。
从AnalyticDB导入数据到Hive
你可以登录EMR Master节点,也可以使用EMR执行计划作业启动Sqoop程序。
下面的命令将AnalyticDB中的test1表导入到EMR Hive中同名表:
sqoop import
--connect jdbc:mysql://test-emr-0-6e2c83b1.cn-hangzhou-1.ads.aliyuncs.com:10152/test_emr_0
--username <access-key-id> --password <access-key-secret>
--table test1 --fields-terminated-by '\001'
--hive-import --target-dir /user/hive/warehouse/test1
--hive-table test1 --columns a,b --split-by a
看一下Hive表的导入结果:
$ hive -e "select * from test1"
Logging initialized using configuration in file:/etc/ecm/hive-conf-2.3.2-1.0.1/hive-log4j2.properties Async: true
OK
ads 1
bds 2
hadoop 5
emr 3
oss 4
Time taken: 3.602 seconds, Fetched: 5 row(s)
总结
本文介绍了AnalyticDB导出数据到EMR Hive表的过程,希望对你有帮助。