《图解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 

posted @ 2017-03-27 22:44  shishanyuan  阅读(2982)  评论(1编辑  收藏  举报