这篇博客主要汇总了我在具体项目中一些处理步骤。

1、项目背景:

首先介绍一个这里会提到的一个trace表,这个表是之前项目中我汇总了各类信息,包括人脸识别后的对比数据、某学校卡口的进入车辆数据、访客记录、门禁刷卡记录与一卡通消费记录等。因为其中很多字段其实是重复的,所以汇总在这个表里。然后会有一个属性告知这条数据是来源于何种表,这样统计各种统一要获取的信息。比如:通过一卡通在时间段内的消费记录判断某学生是否异常消费、通过一周的门禁刷卡记录与摄像头比对记录判断学生是否在校等。这些不是这次总结的内容,都是之前项目已经完成的。只是之前每天汇总了trace表数据后,再统计一次今天所有的数据,但是现在甲方有些需求需要我们每个小时更新一次,比如在某小时内是否有同学出现了异常消费。所以之前的博客都是做一些铺垫。

2、hive与MySQL中创建的对应表

hive:

CREATE TABLE activemq_topic.trace_copy (
alarmtime string,
num string,
xm string,
type string,
indexcode string,
date string,
timehour string,
detail string,
fromtype string
)partitioned by (datet string,hours string);

这里跟之前要求添加的数据一样创建日期与小时的双分区。

MySQL:

然后同样要在mysql中创建同样字段与属性的对应表:

hive一般都什么表做全量表 hive增量表_mysql

3、修改插入hive中trace表的指令

A.修改hive中各种数据汇总与trace表的语句:

可以先看之前我隔天统计一次的指令,一开始我分区就按照日期分区:

insert overwrite table activemq_topic.trace partition(date_time='${lastDay}') 
SELECT h.credentialsNum num,h.humanName xm,type,indexCode,alarmTime,SUBSTR(s.alarmTime,0,10) as date,SUBSTR(s.alarmTime,11,3) as timeHour,s.bkgpicurl as detail,'抓拍机' as fromType
FROM activemq_topic.snap_match s LEFT JOIN activemq_topic.humans h ON s.humanId = h.humanId
WHERE alarmTime > '${lastDay}'  AND alarmTime <= '${thisDay}'
union all
SELECT  .......................

按照小时则修改为以下指令:

insert overwrite table activemq_topic.trace_copy partition(datet='${date_today}',hours='${hour}') 
SELECT h.credentialsNum num,h.humanName xm,type,indexCode,alarmTime,SUBSTR(s.alarmTime,0,10) as date,SUBSTR(s.alarmTime,11,3) as timeHour,s.bkgpicurl as detail,'抓拍机' as fromType
FROM activemq_topic.snap_match_copy s LEFT JOIN activemq_topic.humans h ON s.humanId = h.humanId
WHERE `datet`='${date_today}' AND `hours`='${hour}' 
union all
SELECT yhm ..............................

这里我们插入时候就设定之前创建trace的两个日期与小时分区。还有这里因为这些我所需要查询的表也都已经按照日期还有小时分区了,所以他们的判断条件就是  `datet`='${date_today}' AND `hours`='${hour}' 

B.插入hive的数据已经有了,接下去就是从hive导入数据到mysql中的sqoop指令了。
 

export --connect jdbc:mysql://xdata4:3306/jxcy_dpxs?characterEncoding=utf8 --username root --password P@ssw0rd4321 --table trace_copy --fields-terminated-by "\001"  --input-null-string "\\N" --input-null-non-string "\\N" --export-dir /user/hive/warehouse/activemq_topic.db/trace_copy/datet=${date_today}/hours=${hour}

很多参数跟import的参数差不多,就不多说了。记得前面是export,别弄错了。这里的--fields-terminated-by参数还是要再提一下,这个是字段分割符。hive默认是 '\001',这个需要跟我们在hive加载数据时的一致,不然会出错。我那时候就是用的  '\001' 所以这里也还是'\001'。还有 --export-dir 这个参数,他表示存放数据的 HDFS 的源目录。这个为了弄清楚我也去找了一下具体的位置:

hive一般都什么表做全量表 hive增量表_export_02

这里拓展一下,可以看这里总结的sqoop的各种指令参数介绍:

C.这两个都写好了,就可以在HUE上的WorkFlow中配置工作流了:

hive一般都什么表做全量表 hive增量表_hive一般都什么表做全量表_03

注意:

  1. 这样子已经之前写好的hive与sqoop需要用 DOCUMENTS 中的hive、sqoop来创建工作流。
  2. 里面有用到参数,所以还要再 PARAMETERS 中添加参数。
  3. 对于下面的Sqoop,因为涉及到对MySQL的操作,所以要添加对应的驱动,只要提前下好驱动程序,然后在FILES中添加即可。