使用 spark 从 kafka 消费数据写入 hive 动态分区表
最近因为业务需求,需要把 kafka 内的数据写入 hive 动态分区表,进入 kafka 的数据是保证不会重复的,同一条业务数据仅会进入 kafka 一次。这就保证数据到了 hive 基本不会发生 update 操作,可以对 hive 进行统计生成静态表的形式将统计数据写入 MySQL。咱也不说那么多废话了,开整。
直接写入
从 kafka 取出数据转化成 bean 对象,根据业务要求将数据过滤,清洗,拿到最终的 RDD,直接写入 hive 分区表。(PS:我就不贴全部代码,仅仅贴出主要代码,作为一个有职业道德的程序员,职业道德不允许我这么做。哈哈哈,其实是我怂,我这么大条,万一泄露公司机密就 OVER 了)
RDD 写入 HIVE 动态分区表,因为我需要向两个动态分区表写数据,所以加了 type 字段
private static void writeHive(SparkSession sparkSession,JavaRDD rdd,String type){
Dataset writerTradeData = sparkSession.createDataFrame(rdd,type.equals("trade")?ApiTradePlus.class:ApiTradeOrderPlus.class);
writerTradeData.createOrReplaceTempView("tmp"+type);
String sql = "";
if(type.equals("trade")){
sql = "insert into tmp_trade `partition(tradedate)` select * from "+"tmp"+type;
}
else if(type.equals("order")){
sql = "insert into tmp_trade_order `partition(tradedate)` select * from "+"tmp"+type;
}
sparkSession.sql(sql);
}
别忘记最重要的 hive 操作,默认是不支持动态分区表需要开启配置。以 hive.exec.开头的几

本文介绍了如何使用Spark从Kafka读取数据并将其写入Hive动态分区表,详细展示了代码实现过程,包括直接写入和通过非分区表迁移的两种方法,以及在处理过程中遇到的Hadoop NameNode崩溃和Hive数据统计问题的解决方案。
最低0.47元/天 解锁文章
468

被折叠的 条评论
为什么被折叠?



