前言
前段时间开始接触大数据相关分布式框架,对Hadoop和Spark的运行机制有了初步了解。在此基础上,我进行了一次关于FPGrowth关联规则算法的简单实践,此文章是对实践过程中所遇问题的总结归纳。
另:GitHub实践项目地址:https://github.com/NAMZseng/Spark_FPGrowth
Q1
Spark 2.x版本无1.x版本中的lib文件夹
从 2.x版本开始,原有的lib目录下的整个大jar包(lib/spark-assembly-*jar)已经分散到各个小的jar包从,放置在jars/目录下。
Q2
每次提交spark任务到yarn的时,出现 Neither spark.yarn.jars nor spark.yarn.archive is set
- Reason:
因为没有设置spark.yarn.jars,所以每次提交任务到yarn,yarn都会把$SPARK_HOME/jars打包成zip文件上传到hdfs对应的用户目录,这样对任务的顺利执行没有太大影响,但因为每次都需要上传,所以会降低任务执行的效率。- Solution:
将spark.yarn.jars上传到hdfs中,并指定其为公共依赖包
- hdfs dfs -mkdir /root/spark_jars
- hdfs dfs -put $SPARK_HOME/jars/* /root/spark_jars/
- 在spark-default.conf中添加
spark.yarn.jars hdfs:///root/spark_jars/*
Q3
spark-submit 提交任务时,出现NoClassDefFoundError
- 查看 $SPARK_HOME/jars/文件夹中的 scala-complier版本(注:Spark 2.4.0中的为2.11.12)
- 编译任务代码时,使用相应版本的scala包
- 另:NoClassdefFoundError问题相关
https://blog.csdn.net/jamesjxin/article/details/46606307
Q4
提交任务时,出现beyond the 'VIRTUAL' memory limit. 2.2 GB of 2.1 GB virtual memory used
- Reason:
为YARN的虚拟内存计算方式导致。若用户程序申请的内存为1GB,YARN根据此值乘以一个比例(默认为2.1)得出申请的虚拟内存的值2.1GB,当YARN计算的用户程序所需虚拟内存值大于计算出来的值时,就会报出以上错误。- solution1:在yarn.site.xml修改
yarn.nodemanager.vmem-pmem-ratio
值(默认为2.1)- solution2: 将
yarn.nodemanager.vmem-check-enabled
的值改为false,即不检查VM的值
Q5
提交任务时,出现Remote RPC client disassociated. Likely due to containers exceeding thresholds, or network issues. Check driver logs for WARN messages
- minSupport或minConfidence设置太大,spark运行时内存不足。
- 应根据数据选取合适置信参数