《图解Spark:核心技术与案例实战》作者经验谈
1,看您有维护博客,还利用业余时间著书,在技术输出、自我提升以及本职工作的时间利用上您有没有什么心得和大家分享?(也可以包含一些您写书的小故事。)
回答:在工作之余能够写博客、著书主要对技术的坚持和热爱。自己平时除了工作时间回到家还得陪家人,用于自己学习的时间并不算多,自己每天在上下班的班车会看自己感兴趣的书或者视频,一天下来大概有一个多小时,在下班后会抽出两个多小时动手做实验或者写博客,当然节假日会有更多的时间用于学习和写东西。回顾自己写博客和写书的过程,开始的时候和大家一样都是很痛苦,有时候很多想法写不出来、有时候空白一片不知如何下笔,这种状态下容易分散注意力,很长时间推进不了事情,后来自己用了番茄工作法,按照半个小时为一个单元全神贯注只做一件事情,慢慢就能够集中精力进入写作状态。
2,对于刚开始学习Spark框架的开发者新手,您是否能提供些最佳实践方式?
回答:对于Spark新入门的同学,建议多看网上文章和博客,还有就是看Spark相关的书和视频,这样能够更加系统地学习Spark的知识。学习Spark的同时一定要动手做实验,也就是"纸上得来终觉浅,绝知此事要躬行"的道理。另外对Spark内部运行机制感兴趣的同学,可以分析Spark的源代码,对理解Spark运行原理有很好的帮助。如果个人精力允许平时也可以多参加一些社区活动、关注如InfoQ相关大数据的公众号,可以开拓眼界、了解业界技术发展方向。
3,目前支持的编程语言有Scala、Java、Python和R,您觉得这些语言相比而言有什么优劣?您有什么推荐?并且Spark是用Scala写的,对于开发者新手是否有难度?
回答:Scala是函数式编程语言,可运行在JVM上,不过Scala语法上有点晦涩,学习门槛较高、编译效率也较慢;Java是大家比较熟悉语言,使用起来门槛较低,另外Java拥有完善的生态系统,很多大数据产品由Java开发或可以运行在JVM上,在接口能够得到这些产品的支持,Java最大的痛点在于代码比较啰嗦,有可能其他语言用几行能够实现的,Java需要十几行甚至几十行才能够实现;Python在学术界较为流行,尤其在自然语言处理(NLP)、神经网络等领域有较多的开源产品可以选择,在机器学习中Python有后来居上的趋势,不过由于Python不是大数据处理框架的原生语言,在这些大数据处理产品的新功能往往不能第一时间支持Python语言;R是开源统计分析、绘图的语言,利用CRAN资源库实现丰富的机器学习算法、数据测试和分析过程,相对R语言略显深奥,另外R仅能单机运行(在Spark已经打破这个瓶颈,可以使用SparkR实现R分布式运行)。
大数据中使用何种编程语言也是大家比较纠结的问题,也有比较大的争议,个人认为使用何用语言需要根据个人对语言的熟悉程度和使用场景来确定,如果在机器学习中想利用NLP或密集的神经网络处理则建议使用Python,如果需要对大规模的数据进行统计分析和标绘,那么R语言成为首选,如果想利用现有大数据计算产品运行进行通用的处理,那么Java或者Scala更适合选择。
虽然自己是Java的深度使用者,但是在开始接触到Scala时,也还是有点痛苦,相比Java它融合了函数式和面向对象编程,语法上比较晦涩难懂,对于新手而言Scala有一定难度,如果是深入学习或者应用则建议掌握Scala,毕竟用了它就知道它的好处了。
4,Spark程序的性能和调优方面,从您的实践上来看,有哪些值得注意的?
回答:在不同的应用场景对Spark优化关注不同,自己谈一下个人的经验:
(1)资源调度:在实际部署的Spark集群资源调度一般分为粗粒度调度和细粒度调度两种模式。粗粒度包括了独立运行模式和Mesos粗粒度运行模式,在这种情况下整个机器作为分配单元执行作业,该模式优点是由于资源长期持有减少了资源调度的时间开销,缺点是该模式中无法感知资源使用的变化,易造成系统资源的闲置,从而造成了资源浪费。而细粒度包括了YARN运行模式和Mesos细粒度运行模式,该模式的优点是系统资源能够得到充分利用,缺点是该模式中每个任务都需要从管理器获取资源,调度延迟较大、开销较大。对于运行的作业工作量较大、集群共享程度低,建议使用粗粒度运行模式,而对于工作量比较均匀、集群共享程度高,则建议使用细粒度运行模式。
(2)作业调度:对于Spark的作业目前提供了两种调度策略:一种是FIFO模式,这也是目前默认的模式;另一种是FAIR模式,该模式的调度可以通过参数的配置来决定作业执行的优先模式。FIFO模式比较简单,但无法根据作业的优先级和权重进行分配,这种情况下对于调度算法也需要根据作业工作量和集群共享程度进行设置,一般认为工作量小或者集群共享程度低则建议使用FIFO模式,反之使用FAIR模式。
(3)Shuffle:尽可能避免Shuffle,如果不能避免则应该减少Shuffle数据的规模,比如在数据处理中包含宽依赖和窄依赖操作,可以通过窄依赖操作把数据规模减下来后再进行宽依赖的操作。另外在Spark中Shuffle分为基于哈希的Shuffle写操作和基于排序的Shuffle写操作,基于哈希的Shuffle写操作在Map和Reduce数量较大的情况会导致写文件数量大和缓存开销过大的问题,在Spark1.2版本开始默认为Shuffle写。
(4)序列化&压缩:业界公认大数据处理最大的瓶颈在于集群的IO。在Spark中,把数据处理过程中的数据存在内存中,减少磁盘的IO,极大提高处理速度。而对于在网络传输上建议采用高效的序列化和压缩算法,这样能够大幅度减少数据处理时间,比如可以使用Kryo序列化算法,在压缩算法LZ4提供了压缩速度和压缩比俱佳的性能。
(5)最后需要说的是如果条件允许,把Spark升级到2.0版本,在该版本中通过钨丝计划对Spark核心和Spark SQL进行底层优化,相比以前的版本有了较大幅度的提升。
5,能否谈谈使用Spark Streaming库执行实时流数据分析的看法?以及流处理和实时处理的定义和区别?实时处理的重要性有哪些?
回答:Spark Streaming是Spark核心API的一个扩展,具有延迟低、吞吐量高、容错能力强的实时流数据处理系统。它先接收实时流的数据并根据一定的时间间隔拆分成一批批的数据,这些批数据在Spark内核对应一个RDD实例,然后调用Spark作业引擎处理这些批数据,最终得到一批批结果数据。
个人觉得实时处理强调的是处理响应程度,需要在很短时间内(如毫秒级)对外部的事件进行响应,而流处理则强调的是数据输入和处理的形态,在这种处理形态中数据源源不断的输入,处理系统持续不断地进行处理。
实时处理对于某些场景非常重要,它能够根据规则快速识别并对识别出的风险采取响应的动作,比如京东基于Spark的风控系统对交易的数据进行监控,拦截恶意订单、过滤机器秒杀和防止商家刷单等行为。
6,Spark的机器学习库提供了丰富的算法,还有哪些其他的开源机器学习库可以支持Spark?它们各有什么优势?(优缺点?如最近的Intel BigDL, Tensorflowonspark等等?)
回答:个人了解TensorFlow、Caffe、MXNet、Apache Mahout和Intel BigDL等这些主流的开源机器学习库直接或者间接支持Spark,在Spark中的SparkR能够分布式地调用R语言的算法库,另外由于Spark支持Scala、Java和Python等语言,它可以调用支持这些语言接口的机器学习库。
它们之间的优缺点如下:
(1)TensorFlow可以通过Yahoo TensorFlowOnSpark实现TensorFlow深度学习开源框架与Spark兼容,TensorFlow是可移植的机器学习和神经网络库,有良好的执行和伸缩性,它支持多种语言、较为丰富的文档和实例,相对其他学习库较为成熟,。
(2)Caffe可以通过Yahoo CaffeOnSpark实现分布式版本,Caffe有强大的图像分类算法,不过由于Caffe发展停滞不前,选用需要慎重。
(3)MXNet是一个可移植的、可伸缩的深度学习库,支持Python、R、Scala、Julia和C++等语言的API,不过缺乏文档和实例。
(4)Apache Mahout是Apache旗下的一个开源项目,计算引擎由之前的MapReduce迁移到Spark,它提供了经典的机器学习的算法,是一个可靠、文档较为翔实的机器学习库。
(5)Intel BigDL是运行在Spark上的分布式深度学习库,它与Spark实现了无缝衔接,用户可以像编写Spark程序编写深度学习应用,并运行在Spark集群中,BigDL库目前支持Spark的1.5、1.6和2.0版本,不过由于产生时间不长,社区开放程度有待提高。
7,Spark现在是一枝独秀的状态,那么对Google的Apache Beam您有什么样的看法?是否会对Spark有冲击?
回答:Apache Beam原名Google DataFlow,是Google在2016年2月奉献给Apache基金会进行孵化,2017年1月毕业成为Apache的顶级项目。Apache Beam的主要目标是统一批处理和流处理的编程范式,为无限、乱序、web-scale的数据集处理提供简单灵活、功能丰富以及表达能力强大的SDK。直白来说就是Apache Beam就是在大数据处理引擎之外加了一层“壳”,这个“壳”定义数据处理的相关标准,在数据引擎的选用上可以选用它自己的Google Cloud Platform,也可以选择Flink、Spark等大数据处理产品,Apache Beam的角色类似于以前传统信息系统中集成平台。
个人觉得Apache Beam并没有直接与Spark竞争,它们的定位不同。Apache Beam是为大数据数据处理产品提供一个“集成平台”,而Spark目标是实现的是在一个堆栈中实现批处理、流处理、数据查询、图处理和机器学习等功能强大的产品。
8,您将会在大数据杂谈分享什么样的主题?(用作预告:))
回答:本次大数据杂谈将和京东Y事业部杨冬越同事做一次主题为《Spark技术在智能供应链的应用》的分享,在该分享首先会介绍京东智能供应链并介绍预测在供应链中的作用,接着介绍预测系统的业务和技术架构,再接着介绍系统核心系统并介绍Spark在核心系统中的使用,最后结合本人所著书《图解Spark:核心技术与案例实战》部分章节介绍在该系统中的使用。
回答:在京东购物的同学都有这样的体验,如果的是购买京东自营商品,能够在当天或者第二天就能收到商品,这是由京东强大的供应链实现的,本次大数据杂谈将和京东Y事业部杨冬越将做一次主题为《Spark技术在智能供应链的应用》的分享,揭开在大数据和智能化背景下京东智能供应链的内幕。在该分享首先会介绍京东智能供应链并介绍预测在供应链中的作用,接着介绍预测系统的业务和技术架构,再接着介绍系统核心系统并介绍Spark在核心系统中的使用,最后结合本人所著书《图解Spark:核心技术与案例实战》部分章节介绍在该系统中的使用。
该文发表于2017-02-23 InfoQ的大数据杂谈公众号,微信号:BigdataTina2016
链接地址为 http://mp.weixin.qq.com/s/XynuDFaVBl5mZ4r7GWIzrw
《图解Spark:核心技术与案例实战》作者经验谈的更多相关文章
- 图解CSS3核心技术与案例实战(1)
前言: 我买了一本<图解CSS3核心技术与案例实战>大漠写的,为了提高自己的自觉性呢,抓紧看书,把读书笔记放在这上面,跟大家一起分享,也为督促自己完成读书计划. 文末有微信公众号,感谢你的 ...
- [已读]图解CSS3核心技术与案例实战
买的时候犹豫了好久,也征询了下几个前端朋友.我一直蛮怕买华章的书,好在这本内容很不错,买得值了. 大漠的css功底很深厚,这本书也很厚= =,读完之后对css圆角以及background-origin ...
- 《图解 CSS3 核心技术与案例实战》
第一章 解开 CSS3 的面纱 使用 CSS3 的好处 减少开发和维护成本:如传统实现圆角边框需要绘图.切图才能完成,而使用 css 可以直接完成 提高页面性能 渐进增强(Progressive En ...
- 《图解CSS3:核心技术与案例实战》
<图解CSS3:核心技术与案例实战> 基本信息 作者: 大漠 丛书名: Web开发技术丛书 出版社:机械工业出版社 ISBN:9787111469209 上架时间:2014-7-2 出版日 ...
- Spark Streaming updateStateByKey案例实战和内幕源码解密
本节课程主要分二个部分: 一.Spark Streaming updateStateByKey案例实战二.Spark Streaming updateStateByKey源码解密 第一部分: upda ...
- 《图解Spark:核心技术与案例实战》介绍及书附资源
本书中所使用到的测试数据.代码和安装包放在百度盘提供 下载 ,地址为https://pan.baidu.com/s/1o8ydtKA 密码:imaa 另外在百度盘提供本书附录 下载 ,地址为http ...
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- Spark Streaming 进阶与案例实战
Spark Streaming 进阶与案例实战 1.带状态的算子: UpdateStateByKey 2.实战:计算到目前位置累积出现的单词个数写入到MySql中 1.create table CRE ...
- spark 随机森林算法案例实战
随机森林算法 由多个决策树构成的森林,算法分类结果由这些决策树投票得到,决策树在生成的过程当中分别在行方向和列方向上添加随机过程,行方向上构建决策树时采用放回抽样(bootstraping)得到训练数 ...
随机推荐
- 读书笔记-你不知道的JS中-promise
之前的笔记没保存没掉了,好气,重新写! 填坑-- 现在与将来 在单个JS文件中,程序由许多块组成,这些块有的现在执行,有的将来执行,最常见的块单位是函数. 程序中'将来'执行的部分并不一定在'现在'运 ...
- 关于CSS3 object-position/object-fit属性的使用
object-position/object-fit属性一般用在替换元素上. 什么叫替换元素? 不是所有元素都叫"替换元素".在CSS中,"替换元素"指的是: ...
- gulp一般使用
gulp的基本使用总结了一下几点: 1.gulp-ejs的使用 [ file include,html文件合并 ]: let ejs = require("gulp-ejs"); ...
- Python 解LeetCode:671. Second Minimum Node In a Binary Tree
题目在这里,要求一个二叉树的倒数第二个小的值.二叉树的特点是父节点的值会小于子节点的值,父节点要么没有子节点,要不左右孩子节点都有. 分析一下,根据定义,跟节点的值肯定是二叉树中最小的值,剩下的只需要 ...
- 如何用 Graylog 管理日志?- 每天5分钟玩转 Docker 容器技术(93)
上一节已经部署好了 Graylog,现在学习如何用它来管理日志. 首先启动测试容器. docker run -d \ --log-driver=gelf \ --log-opt gelf-addres ...
- robotframework自动化系列:新增流程
刚接手项目的时候,要求所有流程在上线之前必须确保正向操作是正确的:这个时候又有新的模块需要测试,所以引入自动化测试是非常有必要的!通过对比,尝试使用RF进行自动化的回归测试. 测试中最常见的操作就是增 ...
- 逆向知识第八讲,if语句在汇编中表达的方式
逆向知识第八讲,if语句在汇编中表达的方式 一丶if else的最简单情况还原(无分支情况) 高级代码: #include "stdafx.h" int main(int argc ...
- 71、django之Ajax续
接上篇随笔.继续介绍ajax的使用. 上篇友情连接:http://www.cnblogs.com/liluning/p/7831169.html 本篇导航: Ajax响应参数 csrf 跨站请求伪造 ...
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
- 《天书夜读:从汇编语言到windows内核编程》十 线程与事件
1)驱动中使用到的线程是系统线程,在system进程中.创建线程API函数:PsCreateSystemThread:结束线程(线程内自行调用)API函数:PsTerminateSystemThrea ...