Spark小文件处理
1.通过Spark中的repartition()方法进行从分区。
2.降低spark的并行度,减少文件数量。
3. 新增一个并行化任务,以 group by 文件的形式合并小文件
spark接收kafka的两种方式区别
Receive的方式(通过zk连接kafka队列获取数据)
保证数据高可用的情况下,要开启预写日志,才能保证数据0丢失。
Direct的方式(直接到kafka节点上取数据)
这种方式会周期性的查询Kafka,来获得topic+partition的最新offset,
优点:
1.简化并行读取,不需要创建多个Dstream并进行union操作,spark会创建和kafka partition一样多的RDD partition,并行的从kafka读取数据。
2.数据高可用方面,Receive方式中,需要开启WAL预写机制,效率低下,kafka本身就有高可用机制,浪费资源,而direct不依赖预写日志,直接从kafka的副本中拉取数据
3.一次仅一次的事务
receive方式,保证数据零丢失,,但是无法保证数据被仅仅处理过一次,因为spark和zk直接可能是不同步的,
direct方式,sparkstreaming就自己负责追踪消费的offset,并保存在checkpoint之中,spark自己一定是同步的,因此可以保证数据是消费一次且仅消费一次。