Spark中常见问题
Spark中的闭包
闭包则是在driver端声明 excutor端引用 闭包一定经过序列化
在函数内部引用了外部一个变量
会发现以下问题:

意思就是没有经过序列化 强调闭包一定要经过序列化!!!
Spark的广播变量
1.在driver端声明,把数据广播到executor端,在executor端引用
2.广播后的数据,是只读的,不可以修改的
3.Rdd不支持广播,rdd不支持嵌套操作
4.广播之后的数据,保证了每个executor中所有task公用的一份数据
5.(具体了解 请关注我!!!)
spark-Streaming连接kafka的两种方法 ,
- receiver
- 直连
receiver和直连区别
- Reciver方式接收固定时间的数据 (放在内存中),但是为了保证数据不丢失 还要将前面接收到的数据 写入Hdfs (wals机制) 使用Kafka高级API 自动维护偏移量 省事 但是 需要等到固定的时间才能处理 效率低
- 直连方式 相当于直接连到kafka的分区上 使用 kafka的底层api 效率高 但是需要手动维护偏移量
如果是直连 先是从driver端读取偏移量 如果没有 就从头读 如果有 就从那开始读 之后 开始提交任务 因为现在是executor之间连到kafka的分区 一个分区 对应一个task 这个task不会消失 一直的处理
这样处理 是边读边处理 但是 也是按多长时间算一个批次