搭建Spark所遇过的坑

本文分享了在搭建和使用Spark过程中遇到的问题及其解决方法,包括Spark Streaming的计算模式、Hive版本匹配、Kafka配置、ES分片、数据倾斜等,并提供了针对各种异常的解决方案,如配置错误、日志绑定问题、资源管理等。
摘要由CSDN通过智能技术生成

原文链接:https://mp.csdn.net/postedit/82423831

出现此类问题有很多种, 当时遇到这问题的因为是在spark未改动的情况下, 更换了Hive的版本导致版本不对出现了此问题,

一.经验

  1. Spark Streaming包含三种计算模式:nonstate .stateful .window
  2. kafka可通过配置文件使用自带的zookeeper集群
  3. Spark一切操作归根结底是对RDD的操作
  4. 部署Spark任务,不用拷贝整个架包,只需拷贝被修改的文件,然后在目标服务器上编译打包。
  5. kafka的log.dirs不要设置成/tmp下的目录,貌似tmp目录有文件数和磁盘容量限制
  6. ES的分片类似kafka的partition
  7. spark Graph根据边集合构建图,顶点集合只是指定图中哪些顶点有效
  8. presto集群没必要采用on yarn模式,因为hadoop依赖HDFS,如果部分机器磁盘很小,hadoop会很尴尬,而presto是纯内存计算,不依赖磁盘,独立安装可以跨越多个集群,可以说有内存的地方就可以有presto
  9. presto进程一旦启动,JVM server会一直占用内存
  10. 如果maven下载很慢,很可能是被天朝的GFW墙了,可以在maven安装目录的setting.conf配置文件mirrors标签下加入国内镜像抵制**党的网络封锁,例如:
  11. <mirror>
    
      <id>nexus-aliyun</id>
    
      <mirrorOf>*</mirrorOf>
    
      <name>Nexus aliyun</name>
    
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    
    </mirror>
  12. 编译spark,hive on spark就不要加-Phive参数,若需sparkSQL支持hive语法则要加-Phive参数
  13. 通过hive源文件pom.xml查看适配的spark版本,只要打版本保持一致就行,例如spark1.6.0和1.6.2都能匹配
  14. 打开Hive命令行客户端,观察输出日志是否有打印“SLF4J: Found binding in [jar:file:/work/poa/hive-2.1.0-bin/lib/spark-assembly-1.6.2-hadoop2.6.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]”来判断hive有没有绑定spark
  15. kafka的comsumer groupID对于spark direct streaming无效
  16. shuffle write就是在一个stage结束计算之后,为了下一个stage可以执行shuffle类的算子,而将每个task处理的数据按key进行分类,将相同key都写入同一个磁盘文件中,而每一个磁盘文件都只属于下游stage的一个task,在将数据写入磁盘之前,会先将数据写入内存缓存中,下一个stage的task有多少个,当前stage的每个task就要创建多少份磁盘文件。
  17. 单个spark任务的excutor核数不宜设置过高,否则会导致其他JOB延迟
  18. 数据倾斜只发生在shuffle过程,可能触发shuffle操作的算子有:distinct, groupByKey, reduceByKey, aggregateByKey, join, cogroup, repartition等
  19. 运行时删除hadoop数据目录会导致依赖HDFS的JOB失效
  20. sparkSQL UDAF中update函数的第二个参数 input: Row 对应的并非DataFrame的行,而是被inputSchema投影了的行
  21. Spark的Driver只有在Action时才会收到结果
  22. Spark需要全局聚合变量时应当使用累加器(Accumulator)
  23. Kafka以topic与consumer group划分关系,一个topic的消息会被订阅它的消费者组全部消费,如果希望某个consumer使用topic的全部消息,可将该组只设一个消费者,每个组的消费者数目不能大于topic的partition总数,否则多出的consumer将无消可费
  24. 所有自定义类要实现serializable接口,否则在集
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值