More Related Content
Similar to Spark在苏宁云商的实践及经验分享
Similar to Spark在苏宁云商的实践及经验分享 (20)
Spark在苏宁云商的实践及经验分享
- 5. 平台介绍-现状
• 1.3.0 standalone -->1.4.0 standalone --> 1.5.2 Spark on yarn;
• Spark发展初期,以业务上线为主;
• 8个中心、50+ 应用开发人员;
• 日均job:800+,30+ app;
• Node:500+
17/3/31 Copyright© 2002-2016 ,苏宁云商 5
- 9. 使用案例-全量价格
17/3/31 Copyright© 2002-2016 ,苏宁云商 9
1. 从多数据源抽取数据;
2. 多维度数据关联和转换;
3. 数据量很大,传统的计算方法
无法很好满足;
4. 全量+增量计算方式。
商品可售状态表A
商品可售状态表B
商品可售状态表C
商品基础价格表A 商品基础价格表B
商品促销信息 商品排序信息
MySQL X 1000
DB2 X 100
MySQL X 1000
MySQL X 1000 MySQL X 1000
HiveMySQL X 100
JOIN
UNION
JOIN
JOIN
HDFS
Hive
映射
价格产品线
寻
源
产
品
线
促销和其他产品线
JOIN
外围系统
消费
消费
- 15. 经验分享- 常见错误
• Collect 大量数据到Driver端,导致driver oom;算法开发的时候没有注意
解决办法:driver 不能堆积大量数据,尽量不要在driver保存数据
• 维表数据没有cache内存或者repartition数目太多
解决办法:将维表数据cache到内存,分区数量不能太多
• 未对Spark的持久化级别 进行选择,需要根据实际的业务需求进行选择
解决办法:统计RDD的数据量,大数据量将Memroy_AND_DISK作为首选
17/3/31 Copyright© 2002-2016 ,苏宁云商 15
- 17. 经验分享- 常见错误
• 经常会出现class not found,但是class 文件在包里面存在
解决办法: 打印classloader分析,建议不要轻易修改源码classloader
• PCA 算法只能支持小于14W feature 特性
解决办法:使用SVD 进行降维
• FPGrowth 不支持 KryoSerializer ( SPARK-7483)
解决办法:1.6.2之前版本使用java Serializer
17/3/31 Copyright© 2002-2016 ,苏宁云商 17
- 18. 经验分享- 平台配置
• Driver extraJavaOptions & Executor extraJavaOptions
-XX:MaxPermSize=512m
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80
-XX:GCTimeLimit=5 -XX:GCHeapFreeLimit=95
17/3/31 Copyright© 2002-2016 ,苏宁云商 18
- 19. 经验分享- 平台配置
• HistoryServer JavaOptions
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=80
-XX:GCTimeLimit=5 -XX:GCHeapFreeLimit=95
• spark.yarn.jar hdfs://path/spark-assembly-1.5.2-hadoop2.4.0.jar (设置
副本数和节点数目一样)
17/3/31 Copyright© 2002-2016 ,苏宁云商 19
- 20. 经验分享- Spark 添加复用JDBC Schema功能
• Spark在使用JDBC接口建立DataFrame时,需通过执行SQL来获取该JDBC源数据的
Schema;
• 解决办法:Schema 相同的table可以不用重复获取schema:
• 代码地址:https://github.com/ouyangshourui/SparkJDBCSchema/wiki
• 4000个DataFrame的初始化时间从原先的接近25分钟缩短为10分钟以内;
17/3/31 Copyright© 2002-2016 ,苏宁云商 20
- 21. 经验分享- Spark 平台权限
• 1.4.0 Standalone cluster 模式不支持 多用户;
• 相关组件读写权限问题无法解决,比如读取Hive、HBase、HDFS数据的权限问题;
• 解决办法:修改SparkContext sparkuser和system user name;
• 代码地址: https://github.com/ouyangshourui/StandaloneClusterAuthorization/
wiki
17/3/31 Copyright© 2002-2016 ,苏宁云商 21
- 22. 经验分享- Spark 平台权限
• Spark Sql Hive 元数据库密码加密:javax.jdo.option.ConnectionPassword暴露
给用户比较危险;
• 解决方法:修改HiveContext.scala文件中的metadataHive 变量,选择自定义的解
密算法解密;
• 代码地址: https://github.com/ouyangshourui/HivePasswordEncryptionDecry
ption/wiki
17/3/31 Copyright© 2002-2016 ,苏宁云商 22
- 23. 经验分享- Spark 平台权限
• Spark 1.5.2 Sql 放大了Hive读权限, 任何用户都可以读取别的用户Hive 表数据;
• 临时解决方法:生成 HiveTableScan operator 时调用driver 已有的Hive Client权
限接口检查当前用户的读权限;
• 代码地址:https://github.com/ouyangshourui/HiveReadpermission/wiki
17/3/31 Copyright© 2002-2016 ,苏宁云商 23
- 24. 经验分享- 升级遇到的问题
• 升级背景:1.4.0 Standalone 升级到1.5.2 on Yarn ;
• 用户 代码使用system.exit(-1) ,RM webUI却显示正常;建议直接throw
exception ;
• 自定义的封装 Mysql、 PostgreSQL JDBC没有考虑 driver JDBC Dialect 的实现 ,
导致数据无法返回;
17/3/31 Copyright© 2002-2016 ,苏宁云商 24
- 25. 经验分享- 升级遇到的问题
• 每个exectuor 都与hive 建立 connection 去获取 hiveConf,没有 broadcast
hiveConf( SPARK-10679);
• 多版本Spark Dynamic Resource Allocation 无法共存;DRA需重启Yarn
NodeManger ,耦合性太强(没有解决);
17/3/31 Copyright© 2002-2016 ,苏宁云商 25
- 26. 经验分享- metrics 收集
17/3/31 Copyright© 2002-2016 ,苏宁云商 26
1. 离线采集history log metric指标;
2. 实时采集CPU和Memory使用情况;
3. web展示指标:
Ø app统计
Ø 任务评分
Ø 任务排名
Ø 资源使用情况
Ø 优化建议
- 27. 经验分享- history metrics 收集
17/3/31 Copyright© 2002-2016 ,苏宁云商 27
1. 定制开发相关的Listener;
2. 使用Phoenix API,后期查询方
便,可以建立简单的索引;
3. 单独起一个History Server,不
影响正常业务;
- 28. TO DO
• Spark Streaming 全面落地,吸收Apache Bean 思想;
• Spark Sql 替代大部分hive 任务;
• Spark 现有任务优化加速;
• 完善机器学习平台,覆盖大部分电商和金融领域机器学习算法库;
• 全面拥抱Spark2.0,参与社区;
17/3/31 Copyright© 2002-2016 ,苏宁云商 28