业务描述:
最近项目中需要实时采集业务数据库CDC数据(这里数据已被序列化为avro格式数据),这里技术架构我们采用了Flume+Hdfs。
了解Flume的朋友都知道它的组件分为三部分:source,channel,sink。具体原理部分这里就不再赘述,可查看官网或flume技术博客,这里具体讲一下实现流程及添坑之路。
业务过来的数据放在在kafka里,所以source端采用的是kafkaSource,说白了就是kafkaConsumer,sink选用的是hdfsSink,channel这里选的是file type。
hdfsSink写入文件格式有两种一是:Text File,二是Sequence File,不管选用哪种文件格式落地到hdfs后都不能直接使用,前面说到了业务数据已被序列化为avro格式,但需求是hdfs上的数据必须是直接可用的。
考虑了几种解决方式:
1,使用hive创建外部表关联hdfs上的数据,这里就有问题了,虽然hive支持读取seq文件格式,但我们这里seq文件里(hdfsSink使用Sequence File格式存储)的数据是avro的格式,我试着建表查询了一下,结果是乱码,text File也一样,这种方式就pass掉了。其实hive可以直接读取avro格式数据指定数据的sc