为什么开发者喜欢用apache kylin sparkspark的优势

使用Eclipse构建Spark Java集成开发环境 - 简书
下载简书移动应用
写了141461字,被294人关注,获得了527个喜欢
使用Eclipse构建Spark Java集成开发环境
此专题默认你有Java基础,对SparK已经有初步了解,并且准备学习开发spark应用。专题内容基于windows环境。一.软件准备1.
这里选择了已经为Hadoop2.4编译好的版本,为了能和Hadoop2.4更好的结合。当然有能力你可自己编译。2.
根据自己的系统选择合适的版本,下载安装。二.搭建spark单机环境1.解压缩文件
2.系统环境变量配置1)新建SPARK_HOME。
2)修改Path
3)检测环境变量
三.基于Spark使用Java开发WordCount1.使用Eclipse建立Java工程,新建WordCount类。2.添加依赖jar包(位于SPARK_HOME/lib/下)
3.编写WordCount类WordCount.javapackage chaobo.spark.import java.util.Aimport java.util.Limport java.util.regex.Pimport org.apache.spark.SparkCimport org.apache.spark.api.java.JavaPairRDD;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkCimport org.apache.spark.api.java.function.FlatMapFimport org.apache.spark.api.java.function.Function2;import org.apache.spark.api.java.function.PairFimport scala.Tuple2;public class WordCount {public static void main(String[] args) {final Pattern SPLIT = pile(" ");SparkConf conf = new SparkConf().setMaster("local[4]").setAppName("word count");JavaSparkContext context = new JavaSparkContext(conf);JavaRDDlines = context.textFile("C:\\Users\\chaobo\\Desktop\\spark.txt");JavaRDDwords = lines.flatMap(new FlatMapFunction() {@Overridepublic Iterablecall(String line) throws Exception {return Arrays.asList(SPLIT.split(line));}});JavaPairRDDones = words.mapToPair(new PairFunction() {@Overridepublic Tuple2call(String word) throws Exception {return new Tuple2(word, 1);}});JavaPairRDDcounts = ones.reduceByKey(new Function2() {@Overridepublic Integer call(Integer arg0, Integer arg1) throws Exception {return arg0 + arg1;}});List output = counts.collect();for (Tuple2tuple : output) {System.out.println(tuple._1() + ": " + tuple._2());}context.close();}}4,测试结果
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
如果你是程序员,或者有一颗喜欢写程序的心,喜欢分享技术干货、项目经验、程序员日常囧事等等,欢迎投稿《程序员》专题。
专题主编:小...
· 149432人关注
关注Java开发相关技术
· 4903人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:中国领先的IT技术网站
51CTO旗下网站
Spark成为大数据分析领域新核心的五个理由
为了更为顺畅地实现Hadoop基础之上的高级与实时分析目标,Apache Spark凭借着自身的出色表现很快成为大数据领域的新核心。
作者:核子可乐译来源:51CTO| 16:40
在过去几年当中,随着Hadoop逐步成为大数据处理领域的主导性解决思路,原本存在的诸多争议也开始尘埃落定。首先,Hadoop分布式文件系统是处理大数据的正确存储平台。其次,YARN是大数据环境下理想的资源分配与管理框架选项。第三也是最重要的一点,没有哪套单一处理框架能够解决所有问题。虽然MapReduce确实是一项了不起的技术成果,但仍然不足以成为百试百灵的特效药。
依赖于Hadoop的企业需要借助一系列分析型基础设施与流程以找到与各类关键性问题相关的结论与解答。企业客户需要数据准备、描述性分析、搜索、预测性分析以及机器学习与图形处理等更为先进的功能。与此同时,企业还需要一套能够满足其实际需求的工具集,允许他们充分运用目前已经具备的各类技能及其它资源。就目前而言,并没有哪种标准化单一处理框架足以提供这样的效果。从这个角度出发,Spark的优势恰好得到了完美体现。
尽管Spark还仅仅是个相对年轻的数据项目,但其能够满足前面提到的全部需求,甚至可以做得更多。在今天的文章中,我们将列举五大理由,证明为什么由Spark领衔的时代已经来临。
1. Spark让高级分析由理想变为现实
尽管多数大型创新型企业正在努力拓展其高级分析能力,但在最近于纽约召开的一次大数据分析会议上,只有20%的与会者表示目前正在企业内部部署高级分析解决方案。另外80%与会者反映其仍然只具备简单的数据准备与基本分析能力。在这些企业中,只有极少数数据科学家开始将大量时间用于实现并管理描述性分析机制。
Spark项目提供的框架能够让高级分析的开箱即用目标成为现实。这套框架当中包含众多工具,例如查询加速、机器学习库、图形处理引擎以及流分析引擎等等。对于企业而言,即使拥有极为杰出的数据科学家人才(当然这一前提同样很难实现),他们也几乎不可能通过MapReduce实现上述分析目标。除此之外,Spark还提供易于使用且速度惊人的预置库。在此基础之上,数据科学家们将被解放出来,从而将主要精力集中在数据准备及质量控制之外的、更为关键的事务身上。有了Spark的协助,他们甚至能够确保对分析结果做出正确的解释。
2. Spark让一切更为简便
长久以来,Hadoop面临的最大难题就是使用难度过高,企业甚至很难找到有能力打理Hadoop的人才。虽然随着新版本的不断出炉,如今Hadoop在便捷性与功能水平方面已经得到了长足进步,但针对难度的诟病之声依然不绝于耳。相较于强制要求用户了解一系列高复杂性知识背景,例如Java与MapReduce编程模式,Spark项目则在设计思路上保证了每一位了解数据库及一定程度脚本技能(使用Python或者Scala语言)的用户都能够轻松上手。在这种情况下,企业能够更顺畅地找到有能力理解其数据以及相关处理工具的招聘对象。此外,供应商还能够快速为其开发出分析解决方案,并在短时间内将创新型成果交付至客户手中。
3. Spark提供多种语言选项
在讨论这一话题时,我们不禁要问:如果SQL事实上并不存在,那么我们是否会为了应对大数据分析挑战而发明SQL这样一种语言?答案恐怕是否定的&&至少不会仅仅只发明SQL。我们当然希望能够根据具体问题的不同而拥有更多更为灵活的选项,通过多种角度实现数据整理与检索,并以更为高效的方式将数据移动到分析框架当中。Spark就抛开了一切以SQL为中心的僵化思路,将通往数据宝库的大门向最快、最精致的分析手段敞开,这种不畏数据与业务挑战的解决思路确实值得赞赏。
4. Spark加快结果整理速度
随着业务发展步伐的不断加快,企业对于实时分析结果的需要也变得愈发迫切。Spark项目提供的并发内存内处理机制能够带来数倍于其它采用磁盘访问方式的解决方案的结果交付速度。传统方案带来的高延迟水平会严重拖慢增量分析及业务流程的处理速度,并使以此为基础的运营活动难于开展。随着更多供应商开始利用Spark构建应用程序,分析任务流程的执行效率将得到极大提高。分析结果的快速交付意味着分析人士能够反复验证自己的论断,给出更为精确且完整的答案。总而言之,Spark项目让分析师们将精力集中在核心工作上:更快更好地为难题找出解答。
5. Spark对于Hadoop供应商选择不设硬性要求
目前各大Hadoop发行版本都能够支持Spark,其理由也非常充分。Spark是一套中立性解决方案,即不会将用户绑定到任何一家供应商身上。由于Spark属于开源项目,因此企业客户能够分析地构建Spark分析基础设施而不必担心其是否会受到某些Hadoop供应商在特定发展思路方面的挟持。如果客户决定转移平台,其分析数据也能够顺利实现迁移。
Spark项目蕴含着巨大的能量,而且已经在短时间内经受住了考验、证明其有能力密切匹配大数据分析业务的实际要求。目前我们所迎来的还仅仅是&Spark时代&的开端。随着企业越来越多地发挥Spark项目中的潜能,我们将逐步见证Spark在任意大数据分析环境下巩固其核心技术地位,围绕其建立起的生态系统也将继续茁壮成长。如果企业客户希望认真考量高级实时分析技术的可行性,那么将Spark引入自身大数据集几乎已经成为一种必然。
原文标题:5 reasons to turn to Spark for big data analytics
核子可乐译【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点热点热点热点热点
24H热文一周话题本月最赞
讲师:22人学习过
讲师:7人学习过
讲师:12人学习过
精选博文论坛热帖下载排行
这并不是一本传统的技术专著,因为它并没有包含一行代码,而更像是一部技术评论。作者通过幽默诙谐而又不失辛辣的语言,从程序员、用户等多...
订阅51CTO邮刊访谈:Spark从入门到调优,是否有捷径可走?
访谈:Spark从入门到调优,是否有捷径可走?
文章末尾有大家期盼已久的线下活动预告!Mohammed Guller撰写的《Spark大数据分析》(Big Data Analytics with Spark)一书针对使用Apache Spark框架执行批处理、互操作、图表、数据流分析,以及机器学习等不同类型的大数据分析项目提供了实用的学习指南。InfoQ采访了本书以及各种大数据应用程序开发工具的作者Mohammed Guller。InfoQ:您对Apache Spark框架的定义是怎样的?该框架对大数据分析项目和倡议能提供什么帮助?Guller:Apache Spark是一个快速、简单易用、通用的大数据集处理集群式计算框架,可实现极大规模和极高速度。更重要的是,借助该框架可以轻松地针对大规模数据集执行各类数据处理任务。它为批处理、即席分析、机器学习、流处理以及图表分析提供了一套集成库。数据正在以指数形式增长。另外目前生成的大部分数据并非结构化的,而是多结构化或非结构化的。关系型数据库等传统工具无法应对今天数据的数据量、生成速度和种类。因此需要Spark这样的框架。它使得用户能轻松处理不同数量、速度和种类的大数据。另外要注意的是,组织需要通过不同方式处理或分析数据以从中获得价值。Spark为不同类型数据的处理和分析任务提供了统一平台。与专门承担批处理或流处理任务的专用框架不同,使用Spark时无需复制代码或数据。InfoQ:开发者在项目中使用Spark后需要用到哪些开发和测试工具,您能否介绍一下?Guller:一般来说,开发者可以针对Spark所能支持的编程语言使用任何可用的工具。目前Spark可支持Scala、Java、Python和R。以Scala为例。Spark自带一个名为Spark-Shell的交互式开发环境,这个环境就是基于Scala REPL(Read Evaluate Print Loop)工具实现的。用户可以借助它快速简单地上手Spark。此外开发者还可以使用标准的Scala IDE,例如Eclipse和IntelliJ IDEA。如果不想使用IDE,还可以用惯用的文本编辑器编写代码并使用SBT(Simple Build Tool)编译。InfoQ:对于刚开始学习Spark框架的开发者新手,您是否能提供些最佳实践?Guller:学习Spark的最好方式是大量做实验,并使用Spark API编写代码。编写执行代码后,相关概念也会变得更清楚。学习任何新的语言或工具都是如此。虽然Spark是大数据处理框架,但学习Spark的过程中并不需要具备大规模集群或大型数据集。你可以在自己的笔记本上使用小规模数据集运行Spark,借此熟悉Spark提供的API和各种库。我的书中专门有一章向初学者介绍如何轻松上手Spark。InfoQ:Spark目前支持的编程语言有Scala、Java、Python和R,您觉得这些语言相比而言有什么优劣?如果开发者新手需要选择一种语言,您有什么推荐?Guller:Spark本身是使用Scala编写的。因此以前Scala是Spark的“一等公民”,对其他语言的支持都略有滞后。然而目前发布的每个Spark新版本中,这样的差距变得越来越小。同理,以前使用Scala编写的Spark应用程序比Python应用程序性能更优,但Spark正在对此进行各种优化,速度的差异也会逐渐减小。我个人很喜欢Scala,这种语言可以提高生产力,有助于写出更简洁,质量更高的代码。我也正是因此重新拾回了对编程的热爱。话虽如此,开发者其实可以使用自己习惯的任何语言。如果你对Python比较在行就用Python。只要你熟悉的语言是Spark所能支持的,就没必要更换或学习新的语言。如果希望学习新语言并获得更优化的性能,那么我要推荐Scala。我的书中专门有一章是介绍功能编程和Scala的。InfoQ:在本地计算机或云端设置Spark集群的最佳方式是什么?Guller:Spark提供的spark-ec2脚本可用于在Amazon AWS设置Spark集群。这个脚本可启动、管理和关闭Amazon云中的Spark集群。同时该脚本可以安装Spark和HDFS。这是一个非常灵活的脚本,支持多种输入参数,还可针对具体的处理需求和预算创建自定义集群。InfoQ:能否谈谈使用Spark Streaming库执行实时流数据分析?Guller:Spark Streaming库扩展了Spark的流处理能力,能够为用户提供近乎实时的流数据分析能力。它使用了一种微批(Micro-batching)体系结构。这种技术在本质上会将一条数据流拆分为多个微批,并可由开发者指定批区间(Batch interval)。每个微批可由一个RDD(Resilient Distributed Dataset)代表,RDD同时也是Spark最主要的数据抽象。微批体系结构有优势也有劣势。优势方面,可以提供极高的吞吐量,因此Spark Streaming非常适合针对流数据执行分析。然而如果应用程序需要以极低延迟(毫秒级别)分别处理流中的每个事件,可能并不适合使用Spark Streaming。InfoQ:Spark程序的性能和调优方面有什么需要注意的?Guller:这是个很大的话题。Spark提供了很多性能调优机制,我会介绍一些最需要引起注意的重要事项。首先,对于大部分数据处理应用程序,磁盘I/O都是影响应用程序执行速度的决定性因素。Spark可以让用户在内存中创建数据,请尽量利用这一特性。将数据缓存在内存中可以让应用程序提速100倍以上。当然这也意味着最好使用具有大量内存的计算机搭建Spark集群。其次,请避免需要进行数据重排(Data shuffling)的操作。跨越网络进行数据重排是一种开销很高的操作,在编写数据处理逻辑时一定要注意这一点。有时候相同的逻辑也可以通过更高效的操作实现,例如不要使用groupByKey操作,而是可以使用reduceByKey操作。第三,优化数据中的分区数量。如果数据尚未分区,就无法充分利用Spark在并行数据处理方面的优势。例如,假设有一个100内核的Spark集群,但如果数据只有2个分区,此时将无法充分运用所有计算能力。第四,通过共置的数据节点和计算节点可以获得更好的性能。举例来说,如果数据在HDFS中,请在同一个HDFS集群中安装Spark。Spark会在距离数据尽可能近的位置处理这些数据。例如,它首先会尝试在数据所在计算机上执行任务。如果该计算机无法执行任务,随后会尝试使用同一机机柜的其他计算机。如果依然不可行,最后才会选择使用任意一台计算机。请尽量将磁盘和网络I/O降至最低。这就是一些值得大家注意的,有关性能的常见注意事项。InfoQ:目前Spark程序在安全保护方面有哪些措施?如何只让获得许可的用户或应用执行这些程序?Guller:Spark支持两种身份验证方法:共享密钥(Shared secret)和Kerberos。共享密钥身份验证机制可以配合所有集群管理器使用:YARN、Mesos,以及独立使用。此外YARN还可将Kerberos与Spark配合使用。Spark还支持使用SSL与SASL进行加密。SSL主要用于安全通信协议,SASL主要用于保护块传输服务。InfoQ:如何使用Spark Web Console和其他工具监控Spark程序?通常在监控Spark程序时您会使用哪些度量指标?Guller:Spark提供了完善的监控能力。我的书中有一章专门介绍了这个话题。Spark不仅可以暴露各种度量指标,而且针对Spark集群和其中运行的应用程序提供了基于Web的监控界面。此外还能支持第三方监控工具,例如Graphite、Ganglia以及基于JMX的监控应用。我会在性能优化和调试过程中进行监控。具体选择的度量指标取决于打算要解决的问题。例如,可以使用监控界面检查集群状态以及应用程序的资源分配情况。同理,也可以使用监控界面查看应用程序所提交的作业中的并行数量。另外还可以查看不同任务处理的数据量和所用时间。这些信息可以帮你找出卡滞的任务,当然这些只是几个简单的例子。InfoQ:您期待在以后发布的Spark版本中见到什么新功能?Guller:Spark开发者社区在每个新版本中都在尽全力改善Spark。因此我的期待并不重要。但我希望看到更多与机器学习有关的新功能。另外我觉得Spark还缺少一样东西:针对Scala开发者提供的图表或数据绘图(Plotting)库。探索式可视化是数据分析的重要一环,R开发者可以使用ggplot2,Python有matplotlib,Scala开发者要是也有类似的技术就太好了。另外我还希望看到Spark的统计和机器学习库能够赶上R提供的类似技术。最后,我还希望能够通过更好的支持让用户使用PMML和PFA等标准导出和导入机器学习模型。InfoQ:Spark Machine Learning目前提供了多种不同算法。你是否看到有其他ML库能够为组织的机器学习和数据科学需求提更多价值?Guller:你说的没错,Spark的机器学习库提供了丰富的算法,并且每个新版都增加了新的算法。Spark可以配合外部机器学习库使用,因此无论Spark缺乏哪种能力,都可以通过其他库弥补。例如,Stanford CoreNLP库配合Spark使用可以执行NLP-heavy机器学习任务,类似的SparkNet、CaffeOnSpark、DeepLearning4J或TensorFlow也可以与Spark配合使用实现更深入的学习。Guller还谈到了Spark框架为用户提供的价值。Guller:Spark是一个很棒的大数据分析和处理框架,非常易于使用,针对不同任务提供了丰富的库。此外它还针对非常大规模数据集的处理提供了扩展能力和极高的速度。任何需要处理大数据或进入大数据领域的用户都有必要掌握。他同时还提到有很多人向他询问Hadoop和Spark之间的关系,并回答了两个最长听到的问题。InfoQ:Spark会取代Hadoop吗?Guller:简单来说,不会。今天的Hadoop代表了多个产品组成的生态系统,Spark也是这个生态系统的成员。就算最核心的Hadoop也包含三个组件:一个集群管理器,一个分布式计算框架,以及一个分布式文件系统。其中集群管理器是YARN,计算框架是MapReduce,分布式文件系统是HDFS。Spark是Hadoop MapReduce组件的继任者。很多人在使用Spark作业取代原有的MapReduce作业,或在Spark中编写新的作业。因此可以说Spark会取代MapReduce,但无法取代Hadoop。另外有个重要的事情需要注意,Spark可以配合Hadoop使用,但也可以在不具备Hadoop的情况下使用。例如,可以使用Mesos或独立集群管理器替代YARN,同理也可以使用S3或其他数据源代替HDFS。因此使用Spark并非必须要同时使用Hadoop。InfoQ:为什么有人使用Spark代替MapReduce?Guller:相比MapReduce,Spark可以提供更多优势。首先,Spark比MapReduce速度快很多。取决于具体应用,可能会比MapReduce快100倍。Spark如此之快的一个原因在于其先进的作业执行引擎。Spark作业可以划分为任意数量的阶段(Stage),而MapReduce作业只能分为两个阶段。另外Spark可以让应用程序将数据缓存在内存中。缓存机制可极大改进应用程序性能。磁盘I/O会大幅影响数据处理应用程序的执行速度,Spark则能将磁盘I/O降至最低。其次,Spark很易用。Spark提供了丰富的API和超过80种操作,MapReduce只能提供两种操作:Map和Reduce。Spark API可以通过Scala、Python、Java和R四种语言使用。相比在MapReduce中编写的作业,相同数据处理作业使用Scala/Spark编写时代码量可以减少5-10倍。因此Spark也能大幅提高开发者的生产力。第三,Spark针对不同类型的数据处理任务提供了统一的工具。该产品内置了用于批处理、交互式分析、机器学习、流处理,以及图表分析的集成库,用户不再需要学习多种工具。也不需要将代码和数据复制到多个位置。另外从运营的角度来说,一个集群的管理,无疑要比针对不同类型作业创建多个专用集群管理起来更简单。关于这本图书的作者&Mohammed Guller是Glassbeam的首席架构师,主要负责高级分析和预测分析产品的开发。过去20多年来,Mohammed成功地领导了诸多创新式技术产品从概念到发布的全过程。在加入Glassbeam之前,他是的创始人,这是他在IBM工作五年后成立的。加入IBM之前,他曾就职于多个高科技初创公司,负责新产品的开发工作。Mohammed具备美国加州大学伯克利分校工商管理硕士学位,以及印度古吉拉特邦大学Rollwala计算机中心的计算机应用硕士学位。线下活动预告!
发表评论:
TA的最新馆藏如何将Apache Spark用于不同类型的大数据分析用例 | 中国数据分析行业网
中国数据分析行业现状
Datahoop大数据分析平台
入会申请快速指南
1.请您先阅读入会须知[
2.下载入会申请表 [] [
3.通过协会邮箱提交申请表
Email : xiehui@chinacpda.org
4.如果您还有其它疑问,请联系
协会会员处 010-1
5.查看更多会员入会相关信息:
中国商业联合数据分析专业委员会
址:北京市朝阳区朝外大街乙6号朝外SOHO,C座931邮
编:100020总
机:(010)23/
行 政 处:010-5
培 训 处:010-会 员 处:010-1、652Email
:xiehui@chinacpda.org乘 地 铁:东大桥站乘 公 交:关东店站
> 如何将Apache Spark用于不同类型的大数据分析用例
了解如何将Apache Spark用于不同类型的大数据分析用例,例如批处理、互操作、图表、数据流分析,以及机器学习。
了解Spark Core及加载项库,包括Spark SQL、Spark Streaming、GraphX、Mllib和Spark ML。
了解开发者在项目中使用Spark时可能需要用到的开发和测试工具。
Spark程序性能和调优最佳实践。
了解Spark在集群设置、管理和监控中的使用。
Mohammed Guller撰写的《 Spark大数据分析 》(Big Data Analytics with Spark)一书针对使用 Apache Spark 框架执行批处理、互操作、图表、数据流分析,以及机器学习等不同类型的大数据分析项目提供了实用的指南。其中介绍了 Spark core 及其加载项库,包括Spark SQL、Spark Streaming、GraphX、Mllib,以及Spark ML。
本书读者将了解到如何使用Apache Spark框架的内存中(In-memory)缓存和高级执行引擎组件进行数据分析。
作者谈到了如何使用Spark作为数据处理的统一平台,执行诸如ETL管线、商业智能、实时数据流处理、图表分析,以及机器学习等任务。同时他还讨论了其他话题,例如Spark程序的集群管理器和监控。
本书还介绍了经常配合Spark使用的其他技术和框架,例如分布式文件管理系统(HDFS)、Avro、Parquet、分布式消息( Kafka )、NoSQL数据库( Cassandra 、 HBase ),以及集群管理( Mesos )。
我们与Mohammed Guller讨论了本书、Spark框架,以及用于Spark大数据应用程序的开发者工具。
问:您对Apache Spark框架的定义是怎样的?该框架对大数据分析项目和倡议能提供什么帮助?
Guller:Apache Spark是一个快速、简单易用、通用的大数据集处理集群式计算框架,可实现极大规模和极高速度。更重要的是,借助该框架可以轻松地针对大规模数据集执行各类数据处理任务。它为批处理、即席分析、机器学习、流处理以及图表分析提供了一套集成库。
数据正在以指数形式增长。另外目前生成的大部分数据并非结构化的,而是多结构化或非结构化的。关系型数据库等传统工具无法应对今天数据的数据量、生成速度和种类。因此需要Spark这样的框架。它使得用户能轻松处理不同数量、速度和种类的大数据。另外要注意的是,组织需要通过不同方式处理或分析数据以从中获得价值。Spark为不同类型数据的处理和分析任务提供了统一平台。与专门承担批处理或流处理任务的专用框架不同,使用Spark时无需复制代码或数据。
问:开发者在项目中使用Spark后需要用到哪些开发和测试工具,您能否介绍一下?
Guller:一般来说,开发者可以针对Spark所能支持的编程语言使用任何可用的工具。目前Spark可支持Scala、Java、Python和R。
以Scala为例。Spark自带一个名为Spark-Shell的交互式开发环境,这个环境就是基于Scala REPL(Read Evaluate Print Loop)工具实现的。用户可以借助它快速简单地上手Spark。此外开发者还可以使用标准的Scala IDE,例如Eclipse和IntelliJ IDEA。如果不想使用IDE,还可以用惯用的文本编辑器编写代码并使用SBT(Simple Build Tool)编译。
问:对于刚开始学习Spark框架的开发者新手,您是否能提供些最佳实践?
Guller:学习Spark的最好方式是大量做实验,并使用Spark API编写代码。编写执行代码后,相关概念也会变得更清楚。学习任何新的语言或工具都是如此。
虽然Spark是大数据处理框架,但学习Spark的过程中并不需要具备大规模集群或大型数据集。你可以在自己的笔记本上使用小规模数据集运行Spark,借此熟悉Spark提供的API和各种库。我的书中专门有一章向初学者介绍如何轻松上手Spark。
问:Spark目前支持的编程语言有Scala、Java、Python和R,您觉得这些语言相比而言有什么优劣?如果开发者新手需要选择一种语言,您有什么推荐?
Guller:Spark本身是使用Scala编写的。因此以前Scala是Spark的“一等公民”,对其他语言的支持都略有滞后。然而目前发布的每个Spark新版本中,这样的差距变得越来越小。同理,以前使用Scala编写的Spark应用程序比Python应用程序性能更优,但Spark正在对此进行各种优化,速度的差异也会逐渐减小。
我个人很喜欢Scala,这种语言可以提高生产力,有助于写出更简洁,质量更高的代码。我也正是因此重新拾回了对编程的热爱。
话虽如此,开发者其实可以使用自己习惯的任何语言。如果你对Python比较在行就用Python。只要你熟悉的语言是Spark所能支持的,就没必要更换或学习新的语言。
如果希望学习新语言并获得更优化的性能,那么我要推荐Scala。我的书中专门有一章是介绍功能编程和Scala的。
问:在本地计算机或云端设置Spark集群的最佳方式是什么?
Guller:Spark提供的spark-ec2脚本可用于在Amazon AWS设置Spark集群。这个脚本可启动、管理和关闭Amazon云中的Spark集群。同时该脚本可以安装Spark和HDFS。这是一个非常灵活的脚本,支持多种输入参数,还可针对具体的处理需求和预算创建自定义集群。
问:能否谈谈使用Spark Streaming库执行实时流数据分析?
Guller:Spark Streaming库扩展了Spark的流处理能力,能够为用户提供近乎实时的流数据分析能力。它使用了一种微批(Micro-batching)体系结构。这种技术在本质上会将一条数据流拆分为多个微批,并可由开发者指定批区间(Batch interval)。每个微批可由一个RDD(Resilient Distributed Dataset)代表,RDD同时也是Spark最主要的数据抽象。
微批体系结构有优势也有劣势。优势方面,可以提供极高的吞吐量,因此Spark Streaming非常适合针对流数据执行分析。然而如果应用程序需要以极低延迟(毫秒级别)分别处理流中的每个事件,可能并不适合使用Spark Streaming。
问:Spark程序的性能和调优方面有什么需要注意的?
Guller:这是个很大的话题。Spark提供了很多性能调优机制,我会介绍一些最需要引起注意的重要事项。
首先,对于大部分数据处理应用程序,磁盘I/O都是影响应用程序执行速度的决定性因素。Spark可以让用户在内存中创建数据,请尽量利用这一特性。将数据缓存在内存中可以让应用程序提速100倍以上。当然这也意味着最好使用具有大量内存的计算机搭建Spark集群。
其次,请避免需要进行数据重排(Data shuffling)的操作。跨越网络进行数据重排是一种开销很高的操作,在编写数据处理逻辑时一定要注意这一点。有时候相同的逻辑也可以通过更高效的操作实现,例如不要使用groupByKey操作,而是可以使用reduceByKey操作。
第三,优化数据中的分区数量。如果数据尚未分区,就无法充分利用Spark在并行数据处理方面的优势。例如,假设有一个100内核的Spark集群,但如果数据只有2个分区,此时将无法充分运用所有计算能力。
第四,通过共置的数据节点和计算节点可以获得更好的性能。举例来说,如果数据在HDFS中,请在同一个HDFS集群中安装Spark。Spark会在距离数据尽可能近的位置处理这些数据。例如,它首先会尝试在数据所在计算机上执行任务。如果该计算机无法执行任务,随后会尝试使用同一机机柜的其他计算机。如果依然不可行,最后才会选择使用任意一台计算机。请尽量将磁盘和网络I/O降至最低。
这就是一些值得大家注意的,有关性能的常见注意事项。
问:目前Spark程序在安全保护方面有哪些措施?如何只让获得许可的用户或应用执行这些程序?
Guller:Spark支持两种身份验证方法:共享密钥(Shared secret)和Kerberos。共享密钥身份验证机制可以配合所有集群管理器使用:YARN、Mesos,以及独立使用。此外YARN还可将Kerberos与Spark配合使用。
Spark还支持使用SSL与SASL进行加密。SSL主要用于安全通信协议,SASL主要用于保护块传输服务。
问:如何使用Spark Web Console和其他工具监控Spark程序?通常在监控Spark程序时您会使用哪些度量指标?
Guller:Spark提供了完善的监控能力。我的书中有一章专门介绍了这个话题。Spark不仅可以暴露各种度量指标,而且针对Spark集群和其中运行的应用程序提供了基于Web的监控界面。此外还能支持第三方监控工具,例如Graphite、Ganglia以及基于JMX的监控应用。
我会在性能优化和调试过程中进行监控。具体选择的度量指标取决于打算要解决的问题。例如,可以使用监控界面检查集群状态以及应用程序的资源分配情况。同理,也可以使用监控界面查看应用程序所提交的作业中的并行数量。另外还可以查看不同任务处理的数据量和所用时间。这些信息可以帮你找出卡滞的任务,当然这些只是几个简单的例子。
问:您期待在以后发布的Spark版本中见到什么新功能?
Guller:Spark开发者社区在每个新版本中都在尽全力改善Spark。因此我的期待并不重要。但我希望看到更多与机器学习有关的新功能。
另外我觉得Spark还缺少一样东西:针对Scala开发者提供的图表或数据绘图(Plotting)库。探索式可视化是数据分析的重要一环,R开发者可以使用ggplot2,Python有matplotlib,Scala开发者要是也有类似的技术就太好了。
另外我还希望看到Spark的统计和机器学习库能够赶上R提供的类似技术。最后,我还希望能够通过更好的支持让用户使用PMML和PFA等标准导出和导入机器学习模型。
问:Spark Machine Learning目前提供了多种不同算法。你是否看到有其他ML库能够为组织的机器学习和数据科学需求提更多价值?
Guller:你说的没错,Spark的机器学习库提供了丰富的算法,并且每个新版都增加了新的算法。
Spark可以配合外部机器学习库使用,因此无论Spark缺乏哪种能力,都可以通过其他库弥补。例如,Stanford CoreNLP库配合Spark使用可以执行NLP-heavy机器学习任务,类似的SparkNet、CaffeOnSpark、DeepLearning4J或TensorFlow也可以与Spark配合使用实现更深入的学习。
Guller还谈到了Spark框架为用户提供的价值。
Guller:Spark是一个很棒的大数据分析和处理框架,非常易于使用,针对不同任务提供了丰富的库。此外它还针对非常大规模数据集的处理提供了扩展能力和极高的速度。任何需要处理大数据或进入大数据领域的用户都有必要掌握。
他同时还提到有很多人向他询问Hadoop和Spark之间的关系,并回答了两个最长听到的问题。
问:Spark会取代Hadoop吗?
Guller:简单来说,不会。今天的Hadoop代表了多个产品组成的生态系统,Spark也是这个生态系统的成员。就算最核心的Hadoop也包含三个组件:一个集群管理器,一个分布式计算框架,以及一个分布式文件系统。其中集群管理器是YARN,计算框架是MapReduce,分布式文件系统是HDFS。Spark是Hadoop MapReduce组件的继任者。
很多人在使用Spark作业取代原有的MapReduce作业,或在Spark中编写新的作业。因此可以说Spark会取代MapReduce,但无法取代Hadoop。
另外有个重要的事情需要注意,Spark可以配合Hadoop使用,但也可以在不具备Hadoop的情况下使用。例如,可以使用Mesos或独立集群管理器替代YARN,同理也可以使用S3或其他数据源代替HDFS。因此使用Spark并非必须要同时使用Hadoop。
问:为什么有人使用Spark代替MapReduce?
Guller:相比MapReduce,Spark可以提供更多优势。
首先,Spark比MapReduce速度快很多。取决于具体应用,可能会比MapReduce快100倍。Spark如此之快的一个原因在于其先进的作业执行引擎。Spark作业可以划分为任意数量的阶段(Stage),而MapReduce作业只能分为两个阶段。另外Spark可以让应用程序将数据缓存在内存中。缓存机制可极大改进应用程序性能。磁盘I/O会大幅影响数据处理应用程序的执行速度,Spark则能将磁盘I/O降至最低。
其次,Spark很易用。Spark提供了丰富的API和超过80种操作,MapReduce只能提供两种操作:Map和Reduce。Spark API可以通过Scala、Python、Java和R四种语言使用。相比在MapReduce中编写的作业,相同数据处理作业使用Scala/Spark编写时代码量可以减少5-10倍。因此Spark也能大幅提高开发者的生产力。
第三,Spark针对不同类型的数据处理任务提供了统一的工具。该产品内置了用于批处理、交互式分析、机器学习、流处理,以及图表分析的集成库,用户不再需要学习多种工具。也不需要将代码和数据复制到多个位置。另外从运营的角度来说,一个集群的管理,无疑要比针对不同类型作业创建多个专用集群管理起来更简单。
关于这本图书的作者
Mohammed Guller 是Glassbeam的首席架构师,主要负责高级分析和预测分析产品的开发。过去20多年来,Mohammed成功地领导了诸多创新式技术产品从概念到发布的全过程。在加入Glassbeam之前,他是的创始人,这是他在IBM工作五年后成立的。加入IBM之前,他曾就职于多个高科技初创公司,负责新产品的开发工作。Mohammed具备美国加州大学伯克利分校工商管理硕士学位,以及印度古吉拉特邦大学Rollwala计算机中心的计算机应用硕士学位。
查看英文原文: Big Data Analytics with Spark Book Review and Interview

我要回帖

更多关于 apache spark 教程 的文章

 

随机推荐