数仓之flink数据采集

概要

由于flink可以接入非常多的数据源,1.11版本后基于catalog也能连接hive了,那么实时数仓以flink作为数据采集工具,将是一个方便可行的方案。实时数仓的数据载体一般是kafka,但是数据采集实时离线可以沿用一套flink的数据采集,在同步到kafka的时候,顺便写一份数据到hive上,就不需要t+1天才能看到hive的源数据。

配置json文件

参考alibaba开发的datax数据同步工具,及目前的flinkx数据同步工具,以json文件作为配置文件,主要分为reader模块,writer模块。这里也给一个我的demo

{
  "reader":{
    "name":"kafkareader",
    "bootstrapServers":"hadoop-01:6667",
    "topic":"MicsDataPointForCop",
    "group":"test0420-02"
  },
  "writer":{
    "name":"printwriter"
  }
}

连接数据源

  • hive
    hive数据源和其他数据源不一样,它基于catalog连接,HiveCatalog通过读取hive-site.xml文件,连接hive,
		//创建HiveCatalog,指定hive配置文件路径
        HiveCatalog hive = new HiveCatalog(catalogName, database, hiveConfDir,version);
        streamTableEnvironment.registerCatalog(catalogName, hive);
		
		//指定catalog name,hive数据库
        streamTableEnvironment.useCatalog(catalogName);
        streamTableEnvironment.getConfig().setSqlDialect(SqlDialect.HIVE);
        streamTableEnvironment.useDatabase(database);

flink sql可以直接读取hive的表了

  • txt文件
    可以实现SourceFunction接口,读取文件为DataStreamSource
  • kafka
    FlinkKafkaConsumer读取,读取为DataStreamSource
    String bootstrapServers=jsonObject.getJSONObject("reader").getString("bootstrapServers");
    String topic=jsonObject.getJSONObject("reader").getString("topic");
    String groupID=jsonObject.getJSONObject("reader").getString("group");
    Properties properties = new Properties();
    properties.setProperty("bootstrap.servers",bootstrapServers);
    properties.setProperty("group.id",groupID);
    SourceFunction<String> consumer =
        new FlinkKafkaConsumer<String>(topic, new SimpleStringSchema(), properties).setStartFromEarliest();

数据同步

flink可以基于sink,用datastream的方式写入,也可以用tablesql的方式写入。
sink的话,就是实现SinkFunction,然后执行整体
sql的话,将各个data流注册为table,然后用sql insert的方式插入

踩坑

hive写入分区的话,默认的话,不会刷新分区,就会出现hdfs有数据,但是hive上查不到数据。
一定要执行这个语句,更新hive元数据

"alter table "+hiveTableName+" set TBLPROPERTIES ('sink.partition-commit.policy.kind'='metastore')";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值