《图解Spark:核心技术与案例实战》做者经验谈

1,看您有维护博客,还利用业余时间著书,在技术输出、自我提高以及本职工做的时间利用上您有没有什么心得和你们分享?(也能够包含一些您写书的小故事。)
回答:在工做之余可以写博客、著书主要对技术的坚持和热爱。本身平时除了工做时间回到家还得陪家人,用于本身学习的时间并不算多,本身天天在上下班的班车会看本身感兴趣的书或者视频,一天下来大概有一个多小时,在下班后会抽出两个多小时动手作实验或者写博客,固然节假日会有更多的时间用于学习和写东西。回顾本身写博客和写书的过程,开始的时候和你们同样都是很痛苦,有时候不少想法写不出来、有时候空白一片不知如何下笔,这种状态下容易分散注意力,很长时间推动不了事情,后来本身用了番茄工做法,按照半个小时为一个单元全神贯注只作一件事情,慢慢就可以集中精力进入写做状态。web


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.五、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 

相关文章
相关标签/搜索