公司近期搭建了hadoop集群,改造前后的体系架构如下:
从图中可以看出用hive库,替代了db2和td中的cdr层,也就是业务处理逻辑层,之后再把汇总数据抽取到db2和td,在此聊聊抽取到两个库中的用法。
由于本次抽取需要生成落地文件,所以并没有用sqoop直接抽取到传统的数据库,而是采用insert overwrite locat导出文件到本地系统,之后load装载到db2
》抽取hive汇总层数据,生成文件
insert overwrite local在没有设置hive配置的时,导出的文件是压缩文件,所以这里需要添加配置,语法如下:
hive -e "set mapred.job.queue.name=app;set hive.exec.compress.output=false;set hive.exec.compress.intermediate=false;insert overwrite local directory '/data8/demo' row format delimited fields terminated by '^' select * from test_hive_table where op_month= 201701 and op_time= 20170111 and op_hour= 2017011111 ; "
其中生成了文件000000_0,定义生成的文件按照^分隔,所以采用:row format delimited fields terminated by '^'
在有安装hive客户端的crt上执行以上语法,会在本地文件目录/data8/demo中把查询语句的数据生成不压缩文件,存储到目录中
注意查询条件按照分区查询,这样比较快,因为在hadoop中存储hdfs文件是按照分区建立的目录
》把文件装载到db2
db2文件导入:
db2 "load client from /data8/demo/000000_0of del modified by coldel0x5E codepage=1208 fastparse anyorder warningcount 1 messages/data8/log/load.log insert into gzdb.test_hive_table NONRECOVERABLE"
或者不生成db2日志装载:
db2 "load client from /data8/demo/000000_0of del modified by coldel0x5E codepage=1208 replace into gzdb.test_hive_table NONRECOVERABLE"
》td装载
td采用公司封装的命令,在此不与论述