pyspark下kafka+streaming落地数据到HIVE中

网上查找的kafka通过spark streaming落地到HIVE的方案一般都是Scala写的,为此碰到了很多的坑,特此记录一下使用pyspark来实现实时落地到HIVE的方案

说在前面

spark Streaming 接受kafka的数据落地HIVIE有2个原生的问题

  1. 偏移量管理问题:一般建议都是使用直连的方式连接kafka,而不是接收器的方式,所以需要直接来管理偏移量
  2. 小文件问题:每个batch都会产生和kafka partition个数等同的parquet,如果直接落地的话会产生很多小文件,导致数据查询缓慢和文件系统崩溃

知识面准备

  1. spark的streaming官方文档建议先看一下:http://spark.apache.org/docs/2.2.1/streaming-programming-guide.html 至少有个基本的了解。
  2. 还有kafka的集成文档:http://spark.apache.org/docs/2.2.1/streaming-kafka-integration.html, 这里有2个版本,分别是0.8和1.0,1.0那个不支持Python就不用看了。
  3. 以及pyspark中的streaming文档:http://spark.apache.org/docs/2.2.1/api/python/pyspark.streaming.html,重点看一下kafkaUtil模块

环境准备

  1. 需要确认自己的spark版本,因为需要下载指定的依赖jar包才能正常的使用streaming,我的是spark2.2.1的,所以至少需要以下jar包:
--jars org.scala-lang_scala-reflect-2.10.4.jar,\
org.slf4j_slf4j-api-1.7.7.jar,\
com.typesafe.scala-logging_scala-logging-api_2.10-2.1.2.jar,\
com.typesafe.scala-logging_scala-logging-slf4j_2.10-2.1.2.jar,\
spark-streaming-kafka-0-8_2.11-2.2.1.jar,\
spark-streaming-kafka-0-8-assembly_2.11-2.2.1.jar

这些jar包都可以通过maven的库去下载,例如:https://mvnrepository.com/artifact/org.apache.spark/spark-streaming-kafka-0-8_2.11/2.2.1 是下载park-streaming-kafka-0-8_2.11-2.2.1.jar,其他的类似,自己在maven库里面搜一下下载好,在spark-submit的时候需要引用进来。一定要注意版本,版本不对会报莫名的错误,我之前就是用来2.3.1的版本,代码一直调试不通。

代码流程

  • 主流程:
def kafka_to_hive(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值