0
点赞
收藏
分享

微信扫一扫

手把手带你玩转Spark机器学习-问题汇总[持续更新]


系列文章目录

  1. 手把手带你玩转Spark机器学习-专栏介绍
  2. 手把手带你玩转Spark机器学习-问题汇总
  3. 手把手带你玩转Spark机器学习-Spark的安装及使用
  4. 手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换
  5. 手把手带你玩转Spark机器学习-使用Spark构建分类模型
  6. 手把手带你玩转Spark机器学习-使用Spark构建回归模型
  7. 手把手带你玩转Spark机器学习-使用Spark构建聚类模型
  8. 手把手带你玩转Spark机器学习-使用Spark进行数据降维
  9. 手把手带你玩转Spark机器学习-使用Spark进行文本处理
  10. 手把手带你玩转Spark机器学习-深度学习在Spark上的应用

文章目录

  • 系列文章目录
  • 前言
  • 问题
  • 问题1:mml.Lightgbm进行fit操作的过程中
  • 问题2:from mmlspark.lightgbm import LightGBMClassifier or LightGBMRegressor
  • 问题3: AttributeError: 'function' object has no attribute 'overwrite'
  • 问题4:org.apache.spark.SparkException: spark.executor.cores must not be < spark.task.cpus
  • 问题5:/var/log/spark2/lineage 不存在或不可写
  • 问题6:client模式下某个excutor OutOfMemoryError内存不够报错
  • 问题7:spark xgboost训练时,无法获取到想要的worker数或者cores数
  • 问题8 Xgboost not found key:train

前言

主要记录在实战过程中遇到的各种问题及解决方法。

问题

问题1:mml.Lightgbm进行fit操作的过程中

  • TypeError: ‘JavaPackage’ object is not callable
  • 解决方法:这类问题一般都是在spark-submit或者spark config阶段未指定正确jar导致的,所有只要在submit或者config里面添加lightgbm对应的jar包即可:

--jars hdfs://yourpath/mmlspark_2.11-0.18.1.jar,hdfs://yourpath/com.microsoft.ml.lightgbm_lightgbmlib-2.2.350.jar

问题2:from mmlspark.lightgbm import LightGBMClassifier or LightGBMRegressor

  • Pyspark ModuleNotFoundError: No module named ‘mmlspark’ or mmlspark.lightgbm._LightGBMRegressor or _LightGBMClassifier
  • 解决方法:这个主要是没有安装好mmlspark的缘故,mmlspark是微软出的基于spark的机器学习库,这个库pip源安装的时候是老版本0.0.11111111,这种版本太老了,需要替换成新版的mmlspark:
    step1: 从链接中下载指定版本的jar包:比如说我们下载mmlspark_2.11的0.18.1版本的jar包


step2: 解压jar包:mmlspark_2.11-0.18.1.jar

手把手带你玩转Spark机器学习-问题汇总[持续更新]_spark


step3: 将mmlspark复制到 /yourpath/anaconda3/envs/mes/lib/python3.7/site-packages/

问题3: AttributeError: ‘function’ object has no attribute ‘overwrite’

  • AttributeError: ‘function’ object has no attribute ‘overwrite’
  • 解决方法:To overwrite it, please use write.overwrite().save(path) for Scala and use write().overwrite().save(path) for Java or Python,通过Spark进行模型读写的时候,如果是Scala语言使用write.overwrite().savepath(),对于java和python语言write后面要加括号。如果直接save的话,文件同名也会报错。

问题4:org.apache.spark.SparkException: spark.executor.cores must not be < spark.task.cpus

  • ERROR spark.SparkContext: Error initializing SparkContext.
  • 解决方法:这种个错误一般是未指定executor.cores的数量导致默认数量和cpus个数相等,设置下executor.cores的数量即可

问题5:/var/log/spark2/lineage 不存在或不可写

  • WARN lineage.LineageWriter: Lineage directory /var/log/spark2/lineage doesn’t exist or is not writable. Lineage for this application will be disabled.
  • 解决方法:创建目录 mkdir -p /var/log/spark2/lineage,并根据实际用户组赋予对应的权限,比如我这里是yarn:yarn 所以 chown yarn:yarn /var/log/spark2/lineage,同时查看权限是否赋予成功,ls -altri

问题6:client模式下某个excutor OutOfMemoryError内存不够报错

  • OutOfMemoryError
  • 解决方法:增大excutor的内存,通过–executor-memory 16g来实现

问题7:spark xgboost训练时,无法获取到想要的worker数或者cores数

  • XGBoost4J-Spark : Unable to get 250 workers(cores) for XGBoost training
  • 解决方法:xgboost在训练前,会检查所需要的资源是否足够,如果不够就会报错,可以适当介绍excutor和numWorker的数目
  • xgboost训练时有些需要注意的点:

经验1:二分类中不要设置参数,“num_class” -> 2, 会训练失败。多元分类时设置。

经验2:为了防止block,将训练数据分区数和申请的工作节点数numWorkers保持一致。即对训练数据做repartition处理。numWorkers默认值是32.

经验3:numWorker参数应该与executor数量设置一致,executor-cores设置小一些

经验4:在train的过程中,每个partition占用的内存最好限制在executor-memory的1/3以内,因为除了本来训练样本需要驻留的内存外,xgboost为了速度的提升,为每个线程申请了额外的内存,并且这些内存是JVM所管理不到的
经验5:检查训练数据,如果有缺失值,XGB4j会training failed

经验6:XGB4j 1.3.0以上版本,解决了 spark.speculation机制 和xgboost4j的worker的逻辑冲突问题,但1.2.0版本比1.3.1 、1.5.0运行更稳定

经验7:kill_spark_context_on_worker_failure 设置为false,默认值是true,如果worker训练失败会杀掉spark进程

问题8 Xgboost not found key:train

  • not found key:train
  • 解决方法,增大数据分区数,或者减少numWorkers的大小,要确保每个worker至少能被分配到一个patition。


举报

相关推荐

0 条评论