[0.0.0] 大型spark项目实战
2016-06-27 00:06
232 查看
参考
电商用户行为分析大数据平台 - 中华石杉DT大数据梦工厂-王家林
spark官网文档
场景
在项目实战中理解:1、spark core、sql、streaming以及机器学习与图计算相关的知识点
2、性能调优、troubleshooting与数据倾斜解决方案
当然,随便发发牢骚,关于生活。
前言
关于spark大型项目实战
话说Snail n个月前,因工作需要准备自学spark,走大数据开发之路。n个月后的今天,自我感觉该学的spark知识点都学的差不多了:scala编程语言从零基础到对其高级特性,比如,隐式转换、类型类有比较深刻的认识;基本从头至尾过滤了一遍spark官网相关文档;以相对真实的实验环境(2台阿里云主机)对spark官网以及《DT大数据梦工厂》王家林老师授课的案例进行了实验 - 当然,这其中遇到了不少问题 - 然而,“用蓬勃的生命力战胜人性的悲剧性”,人活着的意义,不就在于探索未知领域,不就在于瞎折腾,不就在于体验人生百态、世间冷暖吗?现在,Snail急需要做一个大型spark项目来进一步巩固与理解前面所学的 - 当然,更重要的是,面试的时候的可以装逼,以精湛的spark技术直接kill面试官(注:snail一前同事堪称面霸,‘kill面试官’这个词语正是出自他那里)! 都是猿,大家静下心里讨论技术,互相学习多好啊,为何一定要‘编’项目经验,大谈各种自己都没有实际使用过的技术甚至一点都不了解的技术名字?其实,也挺好?!王教主说,I love pains 。
好的,反正在网上一顿乱搜索后,Snail最终找到了《Spark大型项目实战:电商用户行为分析大数据平台》这个项目,果断花几百大洋买下了整套视频,并且一口气学到了68课:中华石杉讲的确实很不错,相当不错,极有条例,深入浅出 ,特别是spark性能调优这一部分,结合项目全面解读了 spark Shuffle机制。 《大型spark项目实战》旨在以博文的形式记录与再现Snail所理解的《Spark大型项目实战:电商用户行为分析大数据平台》课程经典。废话先说到这里,本系列博文共分为三大部分:准备篇、开发篇与性能调优篇,let’s rock and spark !
一、准备篇
该部分主要解读项目开发流程、数据流转与公共组件的开发,旨在找准spark工程师在整个项目开发过程中的位置。具体包括配置管理组件、JDBC辅助组件、日志组件、异常处理组件,以及常用工具类(日期转换、字符串处理等)与测试环境数据模拟程序的开发以及项目开发流程、数据流转图。二、开发篇
包括四大spark业务模块的开发:用户访问session分析
页面单跳转化率
各区域热门商品统计
广告点击流量实时统计
按照中华石杉的说话,这四大模块用到了spark core、spark sql以及spark streaming 90%以上的知识点 ,至于spark其他子框架:机器学习,图计算并没有涉及到。Snail决定在以后的工作中为该项目加上机器学习,图计算等,以期完整。
三、性能调优篇
性能调优篇部分又包括性能调优、troubleshooting与数据倾向解决方案三大子模块性能调优模块
以spark业务代码模块为背景,不止于通过配置各种参数让spark应用程序更快速的输出结果,而是详解性能调优背后的故事。Snail按其对性能影响的程度将其总结为调优三部曲:
宏观调优
包括分配更过资源,调节并行度,重构RDD架构以及RDD持久化三种手段;
Shuffle调优
包括合并map端输出文件、调节map端内存缓冲与reduce端内存占比、权衡HashShuffleManager、SortShuffleManager与Tungsten-sort ShuffleManager。
3、微观调优
微观调优包括配置文件类调优与算子类调优。其中,配置文件类调优包括:广播大变量、使用Kryo序列化、使用fastutil优化数据存取格式、调节数据本地化等待时长、降低cache操作的内存占比、调节executor堆外内存与连接等待时长; 算子类调优包括:使用MapPartitions提升Map类操作性能、filter过后使用coalesce减少分区数量、使用foreachPartition优化写数据库性能、使用repartition解决Spark SQL低并行度的性能问题、reduceByKey本地聚合介绍。
Troubleshooting模块
主要包括控制shuffle reduce端缓冲大小以避免OOM、JVM GC导致的shuffle文件拉取失败、YARN队列资源不足导致的application直接失败、各种序列化导致的报错、算子函数返回NULL导致的问题、yarn-client模式导致的网卡流量激增问题、yarn-cluster模式的JVM栈内存溢出问题、持久化方式以及checkpoint的使用等生产环境常见问题的解决方案。
数据倾斜部分
旨在分析数据倾斜解决方案的原理以及现象,解读提高shuffle操作reduce并行度、使用随机Key实现双重聚合、将reduce join转换为map join、sample采样倾斜key单独进行join、使用随机数以及扩容表进行join等数据倾斜问题的解决方案。
总结
不知不觉到了 00:04 该洗洗碎了good night , spark
相关文章推荐
- [代码实例][gtk+]画布
- 【转】有趣的Autolayout示例-Masonry实现
- linux 和 android 源码的 cross reference (即网页浏览代码的引用)
- MFC 虚函数
- 使用Hibernate注解来配置多对一单向的三种方法
- 自旋锁
- 2016-6-26 杂感
- STL学习
- 【java.lang.UnsupportedClassVersionError】版本不一致出错
- Ceph相关博客、网站(256篇OpenStack博客)
- 【转】Masonry介绍与使用实践(快速上手Autolayout)
- Windows自带的虚拟机Hyper-v
- 【转】iOS自动布局进阶用法
- Deepin 15.3 编译同步SudaMod 2.0
- 美团App iOS开发与FRP
- 详解ASP.NET Core 网站发布到Linux服务器
- 那些靠运营搏出位的产品
- python设计模式大全
- Python教程之全局变量用法
- Python使用smtplib模块发送电子邮件的流程详解