如图所示一根弹性细绳阿里云弹性配置。APP应用遇到手机拍照上传速度很慢 请问图片的出网和入网速度正常么?会不会被限制了

您还在为大文件上传失败、上传速度慢而发愁吗?快来试试云加速网络吧-还在为找工作发愁吗-阿里云
查看完整版本: [--
您还在为大文件上传失败、上传速度慢而发愁吗?快来试试云加速网络吧
云加速网络(CAN)开始公测啦!&各位亲们,您还在为大文件上传不成功、上传速度慢而发愁吗?快来试试云加速网络吧!!!云加速网络(CAN)是专为具有海量大文件传输的OSS用户开发的文件加速传输解决方案,旨在解决用户在使用OSS控制台或其它替代工具将海量大文件从本地上传到OSS过程中面临的传输速度慢、传输不稳定等问题,帮助用户在现有带宽下以最快的速度将大文件传输到OSS。我们的优势:快速:加速传输技术基于自主研发的PLUT高速数据传输协议,数据传输速度可达到常规文件传输协议(FTP/HTTP等)几十倍。稳定:专有客户端,避免浏览器上传过程中限制和不稳定问题,支持指定文件夹自动上传。灵活:用户可根据所处网络状况自主选择普通TCP传输或UDP加速传输。&便利:云加速网络自有云端加速服务器,用户无需配置云服务器,只要您已开通OSS服务并注册云加速服务账号,即可体验云加速网络带来的大文件高速传输。云加速网络(CAN)客户端安装/使用说明:1 注册账号并下载CAN客户端&& 用户使用CAN需填写试用申请,我们的服务人员将及时与您取得联系并为您开通账号并提示您下载CAN云加速网络客户端。2 安装CAN客户端&& 用户下载CAN客户端后根据提示安装客户端。目前客户端仅支持windows 64位版本。3 使用CAN客户端进行文件传输&&3.1 使用为您开通的账号和密码登陆。&&3.2 设置云端OSS bucket 和本地上传目录,公测期间仅支持深圳bucket。&[attachment=81144]&&&&3.3 选择普通TCP或UDP加速上传并配置线程数。[attachment=81145]&&&3.4 选择需要同步的子文件夹[attachment=81381]&&4 上传过程中查看任务列表,选择失败任务进行重传。[attachment=81166]&&更多详细介绍请下载附件:[attachment=81165]& & & &
这款软件是解决大文件传输慢的问题吗?支持大量文件上传吗?&
1、云加速网络允许用户根据不同的网络状况选择TCP(网络好)或UDP(网络差时)传输,保证传输速度。&2、云加速网络对文件的个数和大小没有限制,支持多文件批量自动上传。&欢迎试用云加速通道。
感觉更像宣传,有详细的实现技术原理不,有用到CDN了吗
您好,现在云加速网络仍处于公测阶段,不需要付费,后期会细分普通版及企业版。企业版针对具有海量数据高速传输需求的企业用户,企业版是付费的;普通版面对一般用户,可以免费使用。
普通用户也海量使用不?
初期不限量
我们不用CDN
查看完整版本: [--
Powered by
Gzip disabledspark集群中的节点可以只处理自身独立数据库里的数据,然后汇总吗?
我将spark搭建在两台机器上,其中一台既是master又是slave,另一台是slave,两台机器上均装有独立的mongodb数据库。我是否可以让它们只统计自身数据库的内容,然后将结果汇总到一台服务器上的数据库里?目前我的代码如下,但是最终只统计了master里的数据,另一个worker没有统计上。
val config = new Configuration()
//以下代码表示只统计本机数据库上的数据,猜测问题可能出在这里
config.set("mongo.input.uri", "mongodb://127.0.0.1:27017/local.test")
//统计结果输出到服务器上
config.set("mongo.output.uri", "mongodb://103.25.23.80:60013/test_hao.result")
val mongoRDD = sc.newAPIHadoopRDD(config, classOf[com.mongodb.hadoop.MongoInputFormat], classOf[Object], classOf[BSONObject])
// Input contains tuples of (ObjectId, BSONObject)
val countsRDD = mongoRDD.flatMap(arg =& {
var str = arg._2.get("type").toString
str = str.toLowerCase().replaceAll("[.,!?\n]", " ")
str.split(" ")
.map(word =& (word, 1))
.reduceByKey((a, b) =& a + b)
// Output contains tuples of (null, BSONObject) - ObjectId will be generated by Mongo driver if null
val saveRDD = countsRDD.map((tuple) =& {
var bson = new BasicBSONObject()
bson.put("word", tuple._1)
bson.put("count", tuple._2.toString() )
(null, bson)
// Only MongoOutputFormat and config are relevant
saveRDD.saveAsNewAPIHadoopFile("file:///bogus", classOf[Any], classOf[Any], classOf[com.mongodb.hadoop.MongoOutputFormat[Any, Any]], config)
自问自答。原因可能是这样:
val mongoRDD = sc.newAPIHadoopRDD(config, classOf[com.mongodb.hadoop.MongoInputFormat], classOf[Object], classOf[BSONObject])
这行代码表示这是由driver读取数据库,然后将符合条件的数据载入RDD,由于之前设置了是将127.0.0.1作为输入,也就是从driver的mongodb上读取数据。由于driver就在master上,所以读取的数据也自然就是master上的数据了。
怎么掌握HA下的Spark集群工作原理?
默认情况下,Standalone的Spark集群是Master-Slaves架构的集群模式,由一台master来调度资源,这就和大部分的Master-Slaves结构集群一样,存在着Master单点故障的问题。如何解决这个单点故障的问题呢?Spark提供了两种方案:基于文件系统的单点恢复(Single-Node Recovery with Local File )和基于zookeeper的Standby Masters(Standby Masters with ZooKeeper)。其中ZooKeeper是生产环境下的最佳选择。
ZooKeeper提供了一个Leader Election机制,利用这个机制你可以在集群中开启多个master并使它们都注册到ZooKeeper实例,ZooKeeper会管理使其中只有一个是Active的,其他的都是Standby的,Active状态的master可以提供服务,standby状态的则不可以。ZooKeeper保存了集群的状态信息,该信息包括所有的Worker,Driver 和Application。当Active的Master出现故障时,ZooKeeper会从其他standby的master中选举出一台,然后该新选举出来的master会恢复挂掉了的master的状态信息,之后该Master就可以正常提供调度服务。整个恢复过程只需要1到2分钟。需要注意的是,在这1到2分钟内,只会影响新程序的提交,那些在master崩溃时已经运行在集群中的程序并不会受影响。
下面我们就实战如何配置ZooKeeper下的spark HA。
注:DT_大数据梦工厂(IMF传奇行动绝密课程)有所有大数据实战资料更多私密内容,请关注微信公众号:DT_Spark如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上20:00开设的Spark永久免费公开课,地址YY房间号:
spark集群搭建:
没有hdfs,spark不能集群方式跑是吧?修改
可以读本地文件,但是只能spark本地模式运行计算这个从本地读的数据,是吧?修改
kafka,redis,mysql,都可以作为数据源。只要你能拉到数,管从哪拉呢?
可以跑。配置你每个节点上都存一份,或者放在 NFS 里。数据你不从 HDFS 取就行了。&
spark-standalone模式可以不启动hdfs跑吗可以看看《为什么会有第一代大数据Hadoop和第二代大数据Spark?》这个视频,深刻讲解了spark和Hadoop的优缺点和hadoop和大数据的关系,观点一针见血,分析的入木三分
相同的面料,都是基于MapReduce实现分布式计算,可能在面料选取(架构)或个别针线活上稍有些技巧性的区别。 Spark的实现略不同于Hadoop的是,Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
要分开存储和计算看这问题。Hadoop中,hdfs已经算是大数据存储的标配了,mr基本已淘汰(即便用hive都改tez了)。数据分析和挖掘,spark已经是趋势了。Spark也能支持秒级的流式计算,但毫秒级的,还得用storm。Hadoop还有个组件yarn,做资源管理调度的,spark可以运行在yarn上,也可以独立运行(还)有种方式是运行在mesos上。
最近面试腾讯, 一面和二面都问起了hadoop和spark的区别和联系, 回答的不太好。应用场景: hadoop更擅长于离线批处理
spark更擅长于迭代处理。
但是 hadoop和spark的区别也在于 前者基于磁盘多次IO, 后者基于内存计算移动计算而非数据。需要注意的是hadoop和spark的Map / Reduce思想 以及其二者的shuffle过程。 我一直没有讲明白shuffle的过程。Hadoop提供map和reduce算子,而spark提供了大量的transform和action算子,比Hadoop丰富。
提到大数据,就不能不提Hadoop和 Spark,那么作为大数据领域中的两座大山,它们到底是什么?各自又有什么魅力呢?
Hadoop ,Spark为何物?
Hadoop是的一个项目
Spark是一个运算速度快如闪电的Apache项目
一种软件库和框架
可跨计算器集群对庞大数据集(大数据)进行分布式处理
大数据分析领域的重量级大数据平台
一种用于数据大规模处理的快速通用引擎
处理PB级别数据运算速度最快的开源工具
它有四个主要模块:
Hadoop Common
Hadoop分布式文件系统(HDFS)
Hadoop YARN
Hadoop MapReduce
Spark核心组件可以和其他一些高效的软件库无缝连接使用
这些软件库包括:
Spark Streming
MLlib(机器学习专用)
Spark是一种集群计算框架,意味着Hadoop vs Spark
Spark VS MapReduce
2. Hadoop vs Spark使用难易度
随带易于使用的API,支持Scala(原生语言)、Java、Python和Spark SQL。Spark
SQL非常类似于SQL 92,且有一种交互模式,可马上上手。
Hadoop MapReduce没有交互模式,有Hive和Pig等附加模块,采用者使用MapReduce更加容易。
Spark因易用性受到追捧
3. Hadoop vs Spark使用成本大比拼
MapReduce和Spark都是Apache项目,是开源免费软件产品
MapReduce使用常规数量的内存
Spark需要大量内存
需要速度更快的磁盘和大量磁盘空间来运行MapReduce
需要更多的系统,将磁盘输入/输出分布到多个系统上
使用常规数量的常规转速磁盘
不使用磁盘输入/输入用于处理,已使用的磁盘空间可以用于SAN或NAS
Spark系统的成本更高,但技术减少了数量,最终结果是系统成本较高,但是数量大大减少
4.Hadoop与Spark的特性
数据处理方式
MapReduce使用批量处理
Spark使用内存处理
不断收集来自网站的信息,不需要这些数据具有实时性或近乎实时性
它在内存中处理一切数据,为来自多个来源的数据提供了近乎实时分析的功能
Hadoop MapReduce运行顺序:集群读取-执行操作-写回到集群-读取更新后的数据-执行下一个数据操作
Spark执行类似的操作,不过是在内存中一步执行:集群读取-执行操作-写回到集群
在兼容性一点上,二者互相兼容,MapReduce通过JDBC和ODC兼容诸多数据源、文件格式和商业智能工具,Spark亦是如此。
使用TaskTracker节点,它为 JobTracker节点提供了心跳(heartbeat)
用弹性分布式数据集(RDD),它们是容错集合,里面的数据元素可执行并行操作,使RDD可以引用外部存储系统中的数据集,Spark可以用Hadoop支持的任何存储源创建RDD ,Spark的缓存也具有容错性。
MapReduce和Spark都可以使用HDFS来扩展
据目前所知,最大的Hadoop集群是42000个节点,可以说扩展无极限
最大的已知Spark集群是8000个节点,随着大数据增多,预计集群规模也会随之变大
Hadoop支持Kerberos身份验证
Spark的安全性弱一点,目前只支持通过共享密钥(密码验证)的身份验证
能够充分利用活动目录Kerberos和LDAP用于身份验证
在HDFS上运行Spark,它可以使用HDFS ACL和文件级权限
Hadoop分布式文件系统支持访问控制列表(ACL)和传统的文件权限模式,确保用户拥有正确的权限
Spark可以在YARN上运行,因而能够使用Kerberos身份验证
事实上,Hadoop vs Spark并没有真正的孰优孰劣,它们不是你死我活的关系,而是一种相互共生的关系,Spark帮助人们简化了处理大规模数据的步骤流程,而Hadoop又提供了Spark所没有的功能特性,可以说二者只有相辅相成,互利共生,才能够为企业、为团队提供更为有效的数据分析,为决策者提供更为有效的建议。
关于大数据的&大&,我想纠正一下大家的看法。大数据不仅仅是大,它Bigger than big。如果是&大&,那么,多大才是大?PB?TB?大数据的关键特性在于,区别于传统的统计学,它处理的对象是数据的整体,而不是&样本&。传统的统计学,都是根据样本来推测整体,免不了偏差&&所以它有个概念叫做&显著&(Confidence),告诉你,我针对样本得出的结论,有多大把握对整体也是真的。之所以会这样,因为过去计算机科学不发达,数据的采集和计算都是大问题,只能抽样。现在不同了,数据的采集,存储,计算都不是问题,为什么还要抽样呢?因此,诞生了大数据概念,直接处理数据整体,而不是抽样。有了上述铺垫,再举个栗子。如果回答PB是大,OK,10PB算大了吧?是不是大数据?是。OK,那我告诉你,这10PB来自阿里,但只是其已处理数据量的1/10。那么,现在它还是不是大数据?对比一下,一个中小型网站,每天只有10G的数据,是不是大数据?可能不是?OK,但这已经是他全部的数据量了。
大数据这个概念很宽泛,就类似于什么PC时代、互联网、移动互联网再到现在的大数据时代,一种技术不断发展的时代浪潮而已,定义有很多,我认为可以这样定义:以数据为中心更加精准的服务。你能想象到很多例子,如果不知道的话可以看《大数据时代》这本书。而Hadoop、Spark都是处理大数据的一种技术手段,Spark由于是在内存中计算,速度要更快一些。还有很多其它处理大数据的方式,技术没有最好只有最合适的。
1. 大数据,数据量至少在TB级别。2. Hadoop是大数据处理的开源软件,也是使用最广的。3. Hadoop的计算过程,大量使用磁盘存储。Spark的计算,大量使用内存存储,所以Spark块。两者并行。4. spark支持从Hadoop的hdfs做数据输入输出。5. Hadoop 2.x支持Spark作为一个组件。
Hadoop是一个基础平台,存储有HDFS、资源调度有YARN、计算引擎有内置的MapReduce(跑在YARN上),Hadoop的HDFS、YARN是大数据系统的底层组件。对于Spark,我从以下角度理解:1. 是一种内存计算引擎,与MR是竞争关系,但效率比MR高。2. 需要外部的资源调度系统来支持,可以跑在YARN上,也可以跑在Mesos上,当然可以用Standalone模式。3. Spark核心计算引擎外围有若干数据分析组件,Spark SQL(SQL接口)、Spark Streaming(流计算)、MLlib(机器学习)、GraphX(图计算),&One Stack to rule them all&。总体来说,Spark是跑在Hadoop上(依赖YARN和HDFS)的内存计算引擎,内置多种丰富组件,可以处理数据分析各个领域的问题。
大数据(Big Data)大数据,官方定义是指那些数据量特别大、数据类别特别复杂的数据集,这种数据集无法用传统的数据库进行存储,管理和处理。大数据的主要特点为数据量大(Volume),数据类别复杂(Variety),数据处理速度快(Velocity)和数据真实性高(Veracity),合起来被称为4V。大数据中的数据量非常巨大,达到了PB级别。而且这庞大的数据之中,不仅仅包括结构化数据(如数字、符号等数据),还包括非结构化数据(如文本、图像、声音、视频等数据)。这使得大数据的存储,管理和处理很难利用传统的关系型数据库去完成。在大数据之中,有价值的信息往往深藏其中。这就需要对大数据的处理速度要非常快,才能短时间之内就能从大量的复杂数据之中获取到有价值的信息。在大数据的大量复杂的数据之中,通常不仅仅包含真实的数据,一些虚假的数据也混杂其中。这就需要在大数据的处理中将虚假的数据剔除,利用真实的数据来分析得出真实的结果。大数据分析(Big Data Analysis)大数据,表面上看就是大量复杂的数据,这些数据本身的价值并不高,但是对这些大量复杂的数据进行分析处理后,却能从中提炼出很有价值的信息。对大数据的分析,主要分为五个方面:可视化分析(Analytic Visualization)、数据挖掘算法(Date Mining Algorithms)、预测性分析能力(Predictive Analytic Capabilities)、语义引擎(Semantic Engines)和数据质量管理(Data Quality Management)。可视化分析是普通消费者常常可以见到的一种大数据分析结果的表现形式,比如说百度制作的&百度地图春节人口迁徙大数据&就是典型的案例之一。可视化分析将大量复杂的数据自动转化成直观形象的图表,使其能够更加容易的被普通消费者所接受和理解。数据挖掘算法是大数据分析的理论核心,其本质是一组根据算法事先定义好的数学公式,将收集到的数据作为参数变量带入其中,从而能够从大量复杂的数据中提取到有价值的信息。著名的&啤酒和尿布&的故事就是数据挖掘算法的经典案例。沃尔玛通过对啤酒和尿布购买数据的分析,挖掘出以前未知的两者间的联系,并利用这种联系,提升了商品的销量。亚马逊的推荐引擎和谷歌的广告系统都大量使用了数据挖掘算法。预测性分析能力是大数据分析最重要的应用领域。从大量复杂的数据中挖掘出规律,建立起科学的事件模型,通过将新的数据带入模型,就可以预测未来的事件走向。预测性分析能力常常被应用在金融分析和科学研究领域,用于股票预测或气象预测等。语义引擎是机器学习的成果之一。过去,计算机对用户输入内容的理解仅仅停留在字符阶段,不能很好的理解输入内容的意思,因此常常不能准确的了解用户的需求。通过对大量复杂的数据进行分析,让计算机从中自我学习,可以使计算机能够尽量精确的了解用户输入内容的意思,从而把握住用户的需求,提供更好的用户体验。苹果的Siri和谷歌的Google Now都采用了语义引擎。数据质量管理是大数据在企业领域的重要应用。为了保证大数据分析结果的准确性,需要将大数据中不真实的数据剔除掉,保留最准确的数据。这就需要建立有效的数据质量管理系统,分析收集到的大量复杂的数据,挑选出真实有效的数据。分布式计算(Distributed Computing)对于如何处理大数据,计算机科学界有两大方向:第一个方向是集中式计算,就是通过不断增加处理器的数量来增强单个计算机的计算能力,从而提高处理数据的速度。第二个方向是分布式计算,就是把一组计算机通过网络相互连接组成分散系统,然后将需要处理的大量数据分散成多个部分,交由分散系统内的计算机组同时计算,最后将这些计算结果合并得到最终的结果。尽管分散系统内的单个计算机的计算能力不强,但是由于每个计算机只计算一部分数据,而且是多台计算机同时计算,所以就分散系统而言,处理数据的速度会远高于单个计算机。过去,分布式计算理论比较复杂,技术实现比较困难,因此在处理大数据方面,集中式计算一直是主流解决方案。IBM的大型机就是集中式计算的典型硬件,很多银行和政府机构都用它处理大数据。不过,对于当时的互联网公司来说,IBM的大型机的价格过于昂贵。因此,互联网公司的把研究方向放在了可以使用在廉价计算机上的分布式计算上。服务器集群(Server Cluster)服务器集群是一种提升服务器整体计算能力的解决方案。它是由互相连接在一起的服务器群所组成的一个并行式或分布式系统。服务器集群中的服务器运行同一个计算任务。因此,从外部看,这群服务器表现为一台虚拟的服务器,对外提供统一的服务。尽管单台服务器的运算能力有限,但是将成百上千的服务器组成服务器集群后,整个系统就具备了强大的运算能力,可以支持大数据分析的运算负荷。Google,Amazon,阿里巴巴的计算中心里的服务器集群都达到了5000台服务器的规模。大数据的技术基础:MapReduce、Google File System和BigTable2003年到2004年间,Google发表了MapReduce、GFS(Google File System)和BigTable三篇技术论文,提出了一套全新的分布式计算理论。MapReduce是分布式计算框架,GFS(Google File System)是分布式文件系统,BigTable是基于Google File System的数据存储系统,这三大组件组成了Google的分布式计算模型。Google的分布式计算模型相比于传统的分布式计算模型有三大优势:首先,它简化了传统的分布式计算理论,降低了技术实现的难度,可以进行实际的应用。其次,它可以应用在廉价的计算设备上,只需增加计算设备的数量就可以提升整体的计算能力,应用成本十分低廉。最后,它被Google应用在Google的计算中心,取得了很好的效果,有了实际应用的证明。后来,各家互联网公司开始利用Google的分布式计算模型搭建自己的分布式计算系统,Google的这三篇论文也就成为了大数据时代的技术核心。主流的三大分布式计算系统:Hadoop,Spark和Storm由于Google没有开源Google分布式计算模型的技术实现,所以其他互联网公司只能根据Google三篇技术论文中的相关原理,搭建自己的分布式计算系统。Yahoo的工程师Doug Cutting和Mike Cafarella在2005年合作开发了分布式计算系统Hadoop。后来,Hadoop被贡献给了Apache基金会,成为了Apache基金会的开源项目。Doug Cutting也成为Apache基金会的主席,主持Hadoop的开发工作。Hadoop采用MapReduce分布式计算框架,并根据GFS开发了HDFS分布式文件系统,根据BigTable开发了HBase数据存储系统。尽管和Google内部使用的分布式计算系统原理相同,但是Hadoop在运算速度上依然达不到Google论文中的标准。不过,Hadoop的开源特性使其成为分布式计算系统的事实上的国际标准。Yahoo,Facebook,Amazon以及国内的百度,阿里巴巴等众多互联网公司都以Hadoop为基础搭建自己的分布式计算系统。Spark也是Apache基金会的开源项目,它由加州大学伯克利分校的实验室开发,是另外一种重要的分布式计算系统。它在Hadoop的基础上进行了一些架构上的改良。Spark与Hadoop最大的不同点在于,Hadoop使用硬盘来存储数据,而Spark使用内存来存储数据,因此Spark可以提供超过Hadoop100倍的运算速度。但是,由于内存断电后会丢失数据,Spark不能用于处理需要长期保存的数据。Storm是Twitter主推的分布式计算系统,它由BackType团队开发,是Apache基金会的孵化项目。它在Hadoop的基础上提供了实时运算的特性,可以实时的处理大数据流。不同于Hadoop和Spark,Storm不进行数据的收集和存储工作,它直接通过网络实时的接受数据并且实时的处理数据,然后直接通过网络实时的传回结果。Hadoop,Spark和Storm是目前最重要的三大分布式计算系统,Hadoop常用于离线的复杂的大数据处理,Spark常用于离线的快速的大数据处理,而Storm常用于在线的实时的大数据处理。
hadoop侧重离线的批处理 而在应付流计算和迭代计算上略显不足,因为hadoop的每次运算结果都要写入文件系统,下次计算重新从文件系统读进来,这就造成很大的IO开销,spark采用RDD的分布式内存抽象,是一栈的大数据解决方案,包括spark core、spark streaming、spark sql、mllib,目的是不是补充hadoop 而是取而代之还有一个比较关注的是spark的数据库,一个基于采样的数据库,可以在精度和效率上面权衡
转一下马铁教授本人的回答:我自己的答案:
回答这类问题我们首先应该区分MapReduce,Apache Hadoop系统,和Hadoop生态圈
MapReduce是和Spark并行的概念,两者都是计算引擎。两者的比较可以参见
。我倾向于这样总结:Spark通过lineage这个核心思想实现了基于内存的轻量的容错机制,取代了MR保守的硬盘数据冗余。
Apache Hadoop系统其实就像一个操作系统。主要包含HDFS -相当于Linux下面的ext3,ext4,和Yarn - 相当于Linux下面的进程调度和内存分配模块。
Hadoop生态圈包括Apache Hadoop以及更上层的应用。在Spark/MapReduce这一层计算引擎上面,还可以加Hive来做SQL,各种流处理应用,等等。比如Hive就有on MapReduce和on Spark两个版本。
Spark不完全属于Hadoop生态圈,它也可以脱离Apache Hadoop。比如用红帽的Gluster FS做文件系统,Mesos做调度。但是从现在的情况来看它主要还是一个Hadoop应用。比如最近打破TeraSort纪录()就是基于HDFS做的。
大数据这个概念就模糊多了。但我觉得最起码可以很安全的说 大部分的大数据应用运行在Hadoop生态圈里。
有什么关于 Spark 的书推荐?Hadoop Spark学习小结[2014版]Hadoop
Hadoop社区依然发展迅速,2014年推出了2.3,2.4,
的社区版本,比如增强 Resource Manager HA, YARN Rest API, ACL on HDFS, 改进 HDFS 的 Web UI&
根据我的观察,主要更新在Yarn,HDFS,而Mapreduce几乎停滞了,还有一些feature 属于安全,稳定可靠性一方面是比较稳定了,但也可以说是瓶颈了。
这个是Hadoop project member and committee, 里面好多来自Hortonworks,也有不少国人上榜。
SparkSpark 介绍
Spark今年大放溢彩,Spark简单说就是内存计算(包含迭代式计算,DAG计算,流式计算 )框架,之前MapReduce因效率低下大家经常嘲笑,而Spark的出现让大家很清新。
其实起名字也很重要,Spark就占了先机,CTO说
Spark 起源
2010年Berkeley AMPLab,发表在 是一个从学术界到工业界的成功典范,也吸引了顶级VC:Andreessen Horowitz的 注资
AMPLab这个实验室非常厉害,做大数据,云计算,跟工业界结合很紧密,之前就是他们做mesos,hadoop online, crowddb, Twitter,Linkedin等很多知名公司都喜欢从Berkeley找人,比如Twitter也专门开了门课程
还有个 (Bad Ass)引以为傲:
在2013年,这些大牛从Berkeley AMPLab出去成立了Databricks,半年就做了2次summit参会1000人,引无数Hadoop大佬尽折腰,大家看一下Summit的sponsor ,所有hadoop厂商全来了,并且各个技术公司也在巴结,cloudrea, hortonworks, mapr, datastax, yahoo, ooyala, 根据CTO说 Spark新增代码量活跃度今年远远超过了Hadoop本身,要推出商业化产品Cloud。
: Berkeley教授,AMPLab 领军
: 天才,MIT助理教授
Apache Spark开源社区的主导人物之一。他在UC Berkeley AMPLab进行博士学业期间参与了Spark的开发,并在Spark之上编写了Shark和GraphX两个开源框架。他和AMPLab同僚共同创建了Databricks公司
Spark基本概念
RDD&&Resillient Distributed Dataset A Fault-Tolerant Abstraction for In-Memory Cluster Computing弹性分布式数据集。
Operation&&作用于RDD的各种操作分为transformation和action。
Job&&作业,一个JOB包含多个RDD及作用于相应RDD上的各种operation。
Stage&&一个作业分为多个阶段。
Partition&&数据分区, 一个RDD中的数据可以分成多个不同的区。
DAG&&Directed Acycle graph,有向无环图,反应RDD之间的依赖关系。
Narrow dependency&&窄依赖,子RDD依赖于父RDD中固定的data partition。
Wide Dependency&&宽依赖,子RDD对父RDD中的所有data partition都有依赖。
Caching Managenment&&缓存管理,对RDD的中间计算结果进行缓存管理以加快整 体的处理速度。
目前还有一些子项目,比如 Spark SQL, , MLLib, Graphx 工业界也引起广泛兴趣,国内Taobao, baidu也开始使用:
Apache Spark支持4种分布式部署方式,分别是Amazon EC2, standalone、spark on mesos和 spark on YARN 比如
Spark Summit
今年最叫好的demo是Dtabricks Cloud, 把Twitter上面实时收集的数据做作为machine learning素材,用类似IPython notebook,可视化呈现惊艳,而搭建整个sampling系统就花了20分钟!
培训资料和视频
10月份还有个培训在湾区的培训,只不过3天就要1500刀,看来做个讲师也不错:)
第三方项目
Shark - Hive and SQL on top of Spark
MLbase - Machine Learning research project on top of Spark
BlinkDB - a massively parallel, approximate query engine built on top of Shark and Spark
GraphX - a graph processing & analytics framework on top of Spark (GraphX has been merged into Spark 0.9)
Apache Mesos - Cluster management system that supports running Spark
Tachyon - In memory storage system that supports running Spark
Apache MRQL - A query processing and optimization system for large-scale, distributed data analysis, built on top of Apache Hadoop, Hama, and Spark
OpenDL - A deep learning algorithm library based on Spark framework. Just kick off.
SparkR - R frontend for Spark
Spark Job Server - REST interface for managing and submitting Spark jobs on the same cluster.
相关参考资料
加州大学伯克利分校提出的mesos有哪些优缺点?
作者:Weitao Zhou链接:/question//answer/来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。summary:Docker Swarm 是目前 Docker 社区原生支持的集群工具,它通过扩展 Docker API 力图让用户像使用单机 Docker API 一样来驱动整个集群;而 Mesos 是 Apache 基金会下的集群资源管理工具,它通过抽象主机的 CPU、内存、存储等计算资源来搭建一套高效、容错、弹性的分布式系统。显然,这两者功能上有交集,网络上也有很多关于 Docker Swarm, Mesos 和 Kubernetes 之间区别的讨论,作为一个 Mesos 重度用户,最近也抽时间把玩了下 Docker Swarm。一路下来,Docker Swarm 给我的感觉首先是它特别简单、灵活,相较于 Mesos 而言, Docker Swarm 对集群的侵入性更小,从而资源损耗也更低;其次,我特别想强调的是目前看来,虽然它与 Mesos 之间功能有重叠,但是两者关注在不同的东西上了,所以拿这两者作比较没有多大意义。当然,未来这种情况可能会发生变化,这取决于社区的 roadmap 。下面我会从多个角度把 Docker Swarm 和 Mesos 进行比较。============================我是分割线======================Docker大火,我们公司也在使用Docker+Mesos,给出些自己的看法。历史先八卦一下Mesos的历史,其实Mesos并不是为Docker而生的,它产生的初衷是为spark做集群管理。而且,Mesos有自己的容器隔离,后来,随着Docker的崛起,Mesos就开始支持Docker容器了。再后来,google一哥们儿发了篇paper,对比google内部的borg(Omega?),Mesos和Yarn(是不是Yarn)三个集群管理工具的性能,大致结论就是Mesos跟google内部的集群管理工具有异曲同工之妙。有了Docker助力,再加上google的paper,大家就开始去尝试Mesos了。据我在网上搜罗的消息,国外的twitter,apple(用Mesos管理siri的集群),uber(uber的开发在Mesos的mail-list说他们已经使用Mesos有一段时间了,同时准备把更多的东西迁到Mesos集群上),国内的爱奇艺(视频转码),数人科技(敝公司)都已经或正在使用Mesos集群。优点
资源管理策略Dominant Resource Fairness(DRF), 这是Mesos的核心,也是我们把Mesos比作分布式系统Kernel的根本原因。通俗讲,Mesos能够保证集群内的所有用户有平等的机会使用集群内的资源,这里的资源包括CPU,内存,磁盘等等。很多人拿Mesos跟k8s相比,我对k8s了解不深,但是,我认为这两者侧重点不同不能做比较,k8s只是负责容器编排而不是集群资源管理。不能因为都可以管理docker,我们就把它们混为一谈。
轻量级。相对于 Yarn,Mesos 只负责offer资源给framework,不负责调度资源。这样,理论上,我们可以让各种东西使用Mesos集群资源,而不像yarn只拘泥于hadoop,我们需要做的是开发调度器(mesos framework)。
提高分布式集群的资源利用率:这是一个 generic 的优点。从某些方面来说,所有的集群管理工具都是为了提高资源利用率。VM的出现,催生了IaaS;容器的出现,催生了k8s, Mesos等等。简单讲,同样多的资源,我们利用IaaS把它们拆成VM 与 利用k8s/Mesos把它们拆成容器,显然后者的资源利用率更高。(这里我没有讨论安全的问题,我们假设内部子网环境不需要考虑这个。)
门槛太高。只部署一套Mesos,你啥都干不了,为了使用它,你需要不同的mesos framework,像Marathon,chronos,spark等等。或者自己写framework来调度Mesos给的资源,这让大家望而却步。
目前对stateful service的支持不够。Mesos集群目前无法进行数据持久化。即将发布的0.23版本增加了persistent resource和dynamic reserver,数据持久化问题将得到改善。
脏活累活不会少。Team在使用Mesos前期很乐观,认为搞定了Mesos,我们的运维同学能轻松很多。然而,根本不是那么回事儿,集群节点的优化,磁盘,网络的设置,等等这些,Mesos是不会帮你干的。使用初期,运维的工作量不仅没有减轻,反而更重了。
Mesos项目还在紧锣密鼓的开发中,很多功能还不完善。譬如,集群资源抢占还不支持。
R 如何解决R在大样本回归中,内存不足问题?
原因(据我的了解,可能有误,但八九不离十):任何数据类型在R中都和双精度等价的。比如说你想保存一个boolean,但其实占用的内存和double是一样的。其次R是copy by memory。如果matrix A用了1G内存,那么B=A就会占用2G内存。(这个问题我在使用parralel 作fork并行的时候尤为明显。不知为何如果一个函数引用一个变量,会把那个变量在内存中复制一边。最后我的解决方法是用了很多全局变量,然后函数不申明引用那个变量,在运算的时候直接调用。这样做很危险,很难debug~)解决方案:用C,python,(julia?)他们都是copy by reference。 B=A后内存只会多一个指针。而且他们对内存有更精确的控制,作并行运算的时候可以共享主要的数据。甚至你可以用或者自己实现运算不一定那么快但是需要内存少的算法。偷懒的办法:既然是大样本,假设你的sample size 很大。那么可以取一个subsample(随机取一个子集,能放进内存就好)。 子集的结果和全部大样本的结果应该差别不大。因为回归的收敛速度还是挺快的么:)。
可不可以顺便问下,有没有什么可以auto variables selection的同时做time series的r package?
如果你,必须用R不能用别的语言,也不能用什么高大上的H2O或者spark,还不能升级硬件,那么你可以借助一下bootstrap这种奇技淫巧:1. 随机采样200次,每一次采样20%的数据(当然200次和20%是我随便说的,你自己看情况定)2. 给每个小样本作回归,这样你有200组参数3. 取这200组参数的中位数作为解
如果你,必须用R不能用别的语言,也不能用什么高大上的H2O或者spark,还不能升级硬件,那么你可以借助一下bootstrap这种奇技淫巧:1. 随机采样200次,每一次采样20%的数据(当然200次和20%是我随便说的,你自己看情况定)2. 给每个小样本作回归,这样你有200组参数3. 取这200组参数的中位数作为解
这个作者的一系列包,可以用shared memory来解决大数据集在R中的存储分析问题。当然SparkR在服务器上也是解决方法,但是应该对于单机个人用户big系列包应该是一个很好的解决方案。同时请参考CRAN上的task view中的Large memory and out-of-memory data一节,其中介绍了很多关于大数据集分析方法工具的软件包。
插一張超大的閃存, 調成虛擬內存來用超超超大的樣本, 就在aws雲端開個Spark集群, 用SparkR, 賦予每個橫列(row)一個隨機數後grouping可以實現抽樣出數個子集, 把要用的模型套到MapReduce, 看不同子集所擬合的參數分佈
换其他编程语言的方案已经有人提了我给你个实际可行的方法就是,租用Google或者Amazon的计算平台,对于新用户都有免费。比如我用Google,可以建一个虚拟机,用200G内存,总该满足你需求了。当然,这是短期的,如果经常要处理大规模数据,确实R并不是很合适。
基于spark的深度学习怎么实现,具体应用实例?
Spark 貌似不支持直接支持 深度学习吧,你可以通过 deeplearning4j与Spark整合来支持。你也可以参考这个:Apache Spark项目于2009年诞生于伯克利大学的AMPLab实验室,当初的目的在于将内存内分析机制引入大规模数据集当中。在那个时候,Hadoop MapReduce的关注重点仍然放在那些本质上无法迭代的大规模数据管道身上。想在2009年以MapReduce为基础构建起分析模型实在是件费心费力而又进展缓慢的工作,因此AMPLab设计出Spark来帮助开发人员对大规模数据集执行交互分析、从而运行各类迭代工作负载&&也就是对内存中的同一套或者多套数据集进行反复处理,其中最典型的就是机器学习算法。
Spark的意义并不在于取代Hadoop。正相反,它为那些高度迭代的工作负载提供了一套备用处理引擎。通过显著降低面向磁盘的写入强度,Spark任务通常能够在运行速度方面高出Hadoop MapReduce几个数量级。作为&寄生&在Hadoop集群当中的得力助手,Spark利用Hadoop数据层(HDFS、HBase等等)作为数据管道终端,从而实现原始数据读取以及最终结果存储。
编写Spark应用程序
作为由Scala语言编写的项目,Spark能够为数据处理流程提供一套统一化抽象层,这使其成为开发数据应用程序的绝佳环境。Spark在大多数情况下允许开发人员选择Scala、Java以及Python语言用于应用程序构建,当然对于那些最为前沿的层面、只有Scala能够实现大家的一切构想。
Spark当中的突出特性之一在于利用Scala或者Python控制台进行交互式工作。这意味着大家可以在尝试代码运行时,立即查看到其实际执行结果。这一特性非常适合调试工作&&大家能够在无需进行编译的前提下变更其中的数值并再次处理&&以及数据探索&&这是一套典型的处理流程,由大量检查-显示-更新要素所构成。
Spark的核心数据结构是一套弹性分布式数据(简称RDD)集。在Spark当中,驱动程序被编写为一系列RDD转换机制,并附带与之相关的操作环节。顾名思义,所谓转换是指通过变更现有数据&&例如根据某些特定指标对数据进行过滤&&根据其创建出新的RDD。操作则随RDD自身同步执行。具体而言,操作内容可以是计算某种数据类型的实例数量或者将RDD保存在单一文件当中。
Spark的另一大优势在于允许使用者轻松将一套RDD共享给其它Spark项目。由于RDD的使用贯穿于整套Spark堆栈当中,因此大家能够随意将SQL、机器学习、流以及图形等元素掺杂在同一个程序之内。
熟悉各类其它函数型编程语言&&例如LISP、Haskell或者F#&&的开发人员会发现,除了API之外、自己能够非常轻松地掌握Spark编程方式。归功于Scala语言的出色收集系统,利用Spark Scala API编写的应用程序能够以干净而且简洁的面貌呈现在开发者面前。在对Spark编程工作进行调整时,我们主要需要考虑这套系统的分布式特性并了解何时需要对对象以及函数进行排序。
拥有其它程序语言,例如Java,知识背景的程序员则往往没办法快速适应Spark项目的函数编程范式。有鉴于此,企业可能会发现找到一位能够切实上手Spark(从这个角度讲,Hadoop也包含其中)的Scala与函数编程人员实在不是件容易的事。
&img src="/4b02ef9e99f644ee035f8f9b0ef30375_b.jpg" data-rawwidth="552" data-rawheight="295" class="origin_image zh-lightbox-thumb" width="552" data-original="/4b02ef9e99f644ee035f8f9b0ef30375_r.jpg"&
由于Spark的RDD能够实现跨系统共享,因此大家能够随意将SQL、机器学习、流以及图形等元素掺杂在同一个程序之内。
弹性分布式数据集
对于RDD的使用贯穿于整套堆栈当中,而这也成为Spark如此强大的根基之一。无论是从概念层面还是实施层面,RDD都显得非常简单; RDD类当中的大部分方法都在20行以内。而从核心角度看,RDD属于一套分布式记录集合,由某种形式的持久性存储作为依托并配备一系列转换机制。
RDD是不可变更的。我们无法对RDD进行修改,但却能够轻松利用不同数值创建新的RDD。这种不可变性算得上是分布式数据集的一大重要特性; 这意味着我们用不着担心其它线程或者进程在我们不知不觉中对RDD数值作出了变更&&而这正是多线程编程领域的一个老大难问题。这同时意味着我们能够将RDD分发到整个集群当中加以执行,而不必担心该如何在各节点之间对RDD内容变更进行同步。
RDD不可变性在Spark应用程序的容错机制当中同样扮演着重要角色。由于每个RDD都保留有计算至当前数值的全部历史记录、而且其它进程无法对其作出变更,因此在某个节点丢失时对RDD进行重新计算就变得非常轻松&&只需要返回原本的持久性数据分区,再根据不同节点重新推导计算即可。(Hadoop当中的大多数分区都具备跨节点持久性。)
RDD能够通过多种数据分区类型加以构成。在大多数情况下,RDD数据来自HDFS,也就是所谓&分区&的书面含义。不过RDD也可以由来自其它持久性存储机制的数据所构成,其中包括HBase、Cassandra、SQL数据库(通过JDBC)、Hive ORC(即经过优化的行列)文件乃至其它能够与Hadoop InputFormat API相对接的存储系统。无论RDD的实际来源如何,其运作机制都是完全相同的。
Spark转换机制的最后一项备注是:此类流程非常懒惰,也就是说直到某项操作要求将一条结果返回至驱动程序,否则此前整个过程不涉及任何计算环节。这样的特性在与Scala shell进行交互时显得意义重大。这是因为RDD在逐步转换的过程当中不会带来任何资源成本&&直到需要执行实际操作。到这个时候,所有数值才需要进行计算,并将结果返回给用户。除此之外,由于RDD能够利用内存充当缓存机制,因此频繁使用计算结果也不会造成反复计算或者由此引发的资源消耗。
&img src="/8f99ada00e68e_b.jpg" data-rawwidth="594" data-rawheight="119" class="origin_image zh-lightbox-thumb" width="594" data-original="/8f99ada00e68e_r.jpg"&
Spark转换机制非常懒惰,也就是说直到某项操作要求将一条结果返回至用户处,否则此前整个过程不涉及任何计算环节。
执行Spark应用程序
为了将一项Spark任务提交至集群,开发人员需要执行驱动程序并将其与集群管理器(也被称为cluster master)相对接。集群管理器会为该驱动程序提供一套持久性接口,这样同一款应用程序即可在任何受支持集群类型之上实现正常运行。
Spark项目目前支持专用Spark(独立)、Mesos以及YARN集群。运行在集群当中的每个驱动程序以各自独立的方式负责资源分配与任务调度工作。尽管以隔离方式进行应用程序交付,但这种架构往往令集群很难高效实现内存管理&&也就是对于Spark而言最为宝贵的资源类型。多个高内存消耗任务在同时提交时,往往会瞬间将内存吞噬殆尽。尽管独立集群管理器能够实现简单的资源调度,但却只能做到跨应用程序FIFO(即先入先出)这种简单的程度,而且无法实现资源识别。
总体而言,Spark开发人员必须更倾向于裸机层面思维,而非利用像Hive或者Pig这样的高级应用程序将数据分析作为思考出发点。举例来说,由于驱动程序充当着调度任务的执行者,它需要最大程度与这些工作节点保持紧密距离、从而避免网络延迟对执行效果造成的负面影响。
驱动程序与集群管理器高可用性这两者都很重要。如果驱动程序停止工作,任务也将立即中止。而如果集群管理器出现故障,新的任务则无法被提交至其中,不过现有任务仍将继续保持执行。在Spark 1.1版本当中,主高可用性机制由独立Spark集群通过ZooKeeper实现,但驱动程序却缺乏与高可用性相关的保障措施。
将一套Spark集群当中的性能最大程度压榨出来更像是一种魔法甚至妖术,因为其中需要涉及对驱动程序、执行器、内存以及内核的自由组合及反复实验,同时根据特定集群管理器对CPU及内存使用率加以优化。目前关于此类运维任务的指导性文档还非常稀缺,而且大家可能需要与同事进行频繁沟通并深入阅读源代码来实现这一目标。
&img src="/6ede2e5dac8b1f77156f2_b.jpg" data-rawwidth="565" data-rawheight="262" class="origin_image zh-lightbox-thumb" width="565" data-original="/6ede2e5dac8b1f77156f2_r.jpg"&
Spark应用程序架构。Spark目前可以被部署在Spark独立、YARN或者Mesos集群当中。请注意,运行在集群当中的每一个驱动程序都会以彼此独立的方式进行资源分配与任务调度。
监控与运维
每一款驱动程序都拥有自己的一套Web UI,通常为端口4040,其中显示所有实用性信息&&包括当前运行任务、调度程度、执行器、阶段、内存与存储使用率、RDD等等。这套UI主要充当信息交付工具,而非针对Spark应用程序或者集群的管理方案。当然,这也是调试以及性能调整之前的基础性工具&&我们需要了解的、与应用程序运行密切相关的几乎所有信息都能在这里找到。
虽然算是个不错的开始,但这套Web UI在细节方面仍然显得比较粗糙。举例来说,要想查看任务历史记录、我们需要导航到一台独立的历史服务器,除非大家所使用的是处于独立模式下的集群管理器。不过最大的缺点在于,这套Web UI缺少对于运维信息的管理与控制能力。启动与中止节点运行、查看节点运行状况以及其它一些集群层面的统计信息在这里一概无法实现。总体而言,Spark集群的运行仍然停留在命令行操作时代。
&img src="/83f3a05dcda66bc606bd256d1bbfcbb0_b.jpg" data-rawwidth="560" data-rawheight="411" class="origin_image zh-lightbox-thumb" width="560" data-original="/83f3a05dcda66bc606bd256d1bbfcbb0_r.jpg"&
Spark的Web UI提供了与当前运行任务相关的丰富信息,但所有指向集群的管理操作则需要完全通过命令行来实现。
Spark对决Tez
事实上,Spark与Tez都采用有向无环图(简称DAG)执行方式,这两套框架之间的关系就如苹果与桔子般不分轩轾,而最大的差别在于其受众以及设计思路。即使如此,我发现很多IT部门仍然没能分清这两款框架间的差异所在。
Tez是一款应用程序框架,设计目的在于帮助开发人员编写出更为高效的多级MapReduce任务。举例来说,在Hive 0.13版本当中,HQL(即Hive查询语言)由语言编译器负责解析并作为Tez DAG进行渲染,即将数据流映射至处理节点处以实现高效执行。Tez DAG由应用程序以边缘到边缘、顶点到顶点的方式进行构建。用户则完全不需要了解Tez DAG的构建方式,甚至感受不到它的存在。
Spark与Tez之间的真正差异在于二者实现方式的不同。在Spark应用程序当中,同样的工作节点通过跨迭代实现重新使用,这就消除了JVM启动所带来的资源成本。Spark工作节点还能够对变量进行缓存处理,从而消除对数值进行跨迭代重新读取与重新计算的需要。正是借鉴着以上几大特征,Spark才能够在迭代编程当中如鱼得水、充分发力。而由此带来的缺点是,Spark应用程序会消耗大量集群资源、特别是在缓存过期的情况下。我们很难在集群运行着Spark的时候对资源进行优化。
尽管支持多级任务执行机制,Tez仍然不具备任何形式的缓存处理能力。虽然变量能够在一定程度上得到缓存处理,从而保证规划器在可能的情况下保证调度任务从同节点中的上一级处获取必要数值,但Tez当中仍然未能提供任何一种经过妥善规划的跨迭代或者变量广播机制。除此之外,Tez任务还需要反复启动JVM,而这会带来额外的资源开销。因此,Tez更适合处理那些规模极为庞大的数据集,在这种情况下启动时间只占整体任务处理周期的一小部分、几乎可以忽略不计。
在大多数情况下,Hadoop社区对此都拥有很好的移花接木式解决方案,而且其中最出色的部分机制已经能够作用于其它项目。举例来说,YARN-1197将允许Spark执行器以动态方式进行规模调整,这样它们就能够在合适的条件下将资源返还给集群。与之相似,Stinger.next将为Hive等传统Hadoop应用程序带来由跨查询缓存提供的巨大优势。
一整套集成化分析生态系统
Spark所采用的底层RDD抽象机制构建起整个Spark生态系统的核心数据结构。在机器学习(MLlib)、数据查询(Spark SQL)、图形分析(GraphX)以及流运行(Spark Streaming)等模块的共同支持下,开发人员能够以无缝化方式使用来自任意单一应用程序的库。
举例来说,开发人员可以根据HDFS当中的某个文件创建一个RDD,将该RDD转换为SchemaRDD、利用Spark SQL对其进行查询,而后将结果交付给MLlib库。最后,结果RDD可以被插入到Spark Streaming当中,从而充当消息交付机制的预测性模型。如果要在不使用Spark项目的情况下实现以上目标,大家需要使用多套库、对数据结构进行封包与转换,并投入大量时间与精力对其加以部署。总体而言,将三到上个在最初设计当中并未考虑过协作场景的应用程序整合在一起绝对不是正常人的脆弱心灵所能承受的沉重负担。
堆栈集成机制让Spark在交互式数据探索与同一数据集内的重复性函数应用领域拥有着不可替代的重要价值。机器学习正是Spark项目大展拳脚的理想场景,而在不同生态系统之间以透明方式实现RDD共享的特性更是大大简化了现代数据分析应用程序的编写与部署流程。
然而,这些优势的实现并非全无代价。在1.x系列版本当中,Spark系统在诸多细节上还显得相当粗糙。具体而言,缺乏安全性(Spark无法运行在Kerberised集群当中,也不具备任务控制功能)、缺乏企业级运维功能、说明文档质量糟糕,而且严苛的稀缺性技能要求意味着目前Spark仍然只适合早期实验性部署或者那些有能力满足大规模机器学习模型必需条件且愿意为其构建支付任何投入的大型企业。
到底应不应该部署Spark算是一个&仁者见仁,智者见智&的开放性议题。对于一部分组织而言,Spark这套速度极快的内存内分析引擎能够带来诸多优势,从而轻松为其带来理想的投资回报表现。但对于另一些组织来说,那些虽然速度相对较慢但却更为成熟的工具仍然是其不二之选,毕竟它们拥有适合企业需求的完善功能而且更容易找到有能力对其进行管理与控制的技术人员。
无论如何,我们都要承认Spark的积极意义。Spark项目将一系列创新型思维带入了大数据处理市场,并且表现出极为强劲的发展势头。随着其逐步成熟,可以肯定Spark将最终成为一支不容忽视的巨大力量。
&img src="/200ea9a38a8acce589b18f3ee9d00cd9_b.jpg" data-rawwidth="586" data-rawheight="128" class="origin_image zh-lightbox-thumb" width="586" data-original="/200ea9a38a8acce589b18f3ee9d00cd9_r.jpg"&
Apache Spark 1.1.0 / Apache软件基金会
总结性描述
作为一套配备精妙API以实现数据处理应用程序创建目标的高速内存内分析引擎,Spark在迭代工作负载这类需要重复访问同一套或者多套数据集的领域&&例如机器学习&&表现出无可匹敌的竞争优势。
基于Apache 2.0许可的开源项目
& 精妙且具备一致性保障的API帮助开发人员顺利构建起数据处理应用程序
& 支持Hadoop集群上的交互式查询与大规模数据集分析任务
& 在运行迭代工作负载时拥有高出Hadoop几个数量级的速度表现
& 能够以独立配置、YARN、Hadoop MapReduce或者Mesos等方式部署在Hadoop集群当中
& RDD(即弹性分布式数据集)能够在不同Spark项目之间顺利共享,从而允许用户将SQL、机器学习、流运行以及图形等元素掺杂在同一程序当中
& Web UI提供与Spark集群及当前运行任务相关的各类实用性信息
& 安全性不理想
& 说明文档质量糟糕
& 不具备集群资源管理能力
& 学习曲线不够友好
热爱大数据的话欢迎加我们信微:idacker
我被这东西快弄疯了&& 半年内版本升级到1.3了,依赖的hive还要0.13.1版本,人家hive都升级到1.1了。回头又要依赖hadoop的mapredue和yarn,还要2.4版本的,可是人家都升级到2.6了。
Spark SQL 到底怎么搭建起来?
别告诉我那你就用0.13.1的hive和2.4的hadoop啊,2.4的hadoop已经被官方抛弃了,连官方下载链接都没有,2.x的版本,最古老的链接也是2.5.2的。0.13.1的hive的确有,可是人家都1.1了啊,好多东西都变了啊,网上连教程都变了啊。
回头再说SparkSQL,他只是Spark的一个Module,可是却要依赖这么多,还要依赖Scala,还要特定2.10.4版本,还要依赖hive,hive要依赖yarn,mapreduce又是必须的&&
在网上各种爬文,我都买了个DigitalOcean服务器来搜外文,结果搜到的也还是古老的,挥着零散的部署教程,就是要么只告诉你spark怎么部署,要么告诉你sparksql怎么用,要么告诉你hive怎么搭,然后各个版本还不能依赖到一起去&
做毕设都半年了,前期就是写sql代码来着,最后就靠这玩意来加速跑代码,结果死活搭不起来,去年弄了半个月,不行,今年这有弄了半个月,还不行&&真是醉了&&
求哪位大神快出现啊!!! T_T 我真是跪了&& 给我个从头到尾搭起 SparkSQL 的教程就行&& 么么哒&&
作者:纪路链接:/question//answer/来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
把Spark二进制包下载并解压到某一台*nux的机器上,这段代码中&/Users/jilu/Downloads/&这段换成你自己的路径,这就是单机执行SparkSQL的代码,在这个程序中,我已经创建好sqlContext了,以后的部分就是SparkSQL教程了。这是我更新完1.3版之后新改的程序,不出意外1.X的版本都是这样用的。PS:补充一下这个是Python API,不是Scala的。
import sys
import traceback
# Path for spark source folder
os.environ['SPARK_HOME']="/Users/jilu/Downloads/spark-1.3.0-bin-hadoop2.4"
# Append pyspark
to Python Path
sys.path.append("/Users/jilu/Downloads/spark-1.3.0-bin-hadoop2.4/python/")
sys.path.append("/Users/jilu/Downloads/spark-1.3.0-bin-hadoop2.4/python/lib/py4j-0.8.2.1-src.zip")
# try to import needed models
from pyspark import SparkContext
from pyspark import SparkConf
from pyspark.sql import SQLContext, Row
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules {}".format(traceback.format_exc()))
sys.exit(1)
# config spark env
conf = SparkConf().setAppName("myApp").setMaster("local")
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)
您好,请问Spark用python通过jdbc读数据库数据您用过吗?我没有成功,但是Scala和Java可以通过jdbc读到数据。求助,谢谢!我也是用Scala,我记得Spark的数据输入输出那一块Python支持的不太好,除了RESTful和文件之外Python API不是没有就是有问题。你也可以使用Spark Standalone模式(文档),官方又启动脚本,直接帮你完成所有的部署,不需要Hadoop,不需要Hive,不需要MySQL
vm问题是太损性能如果集群要nb的机器***测试环境用docker好些 机器损耗小 普通macmini都可以搭出hadoop/spark最小三节点集群参考***生产环境未来生产环境部署hadoop/spark到物理机 应该情景不多多是云端的大数据处理paas例如azure的hdinsight(当然云端也可以用docker)节省成本 少维护 少硬件损耗(aws azure的数据流入流量都是不计费的)尽快上算法/应用才是王道spark在aws上已经能做到1tb数据-》1rmb成本了 基本大数据的运算量12tb 的spark运算成本是12rmb(节点无限伸缩)按照这个成本 自建hadoop/spark集群的硬件意义不大(这个百节点要上百万还有维护损耗 顶级国安或者军事金融部门的需求另说 当然如果有采购贪污需求的也另说其它行业正经做事不用云处理大数据是傻蛋)问题是大数据的场景何在 weblog 达到12tb/天的网站中国过不去10家
SparkSQL就是Spark的一个模块,只要成功安装了Hadoop和Spark,最后开发的时候在pom文件里加上SparkSQL的依赖,并且在代码里引SparkSQL的包就行了,所以关键还是搭Hadoop和Spark的集群,Hadoop2.6.0(现在已经出到2.7了)和Spark1.3.1的搭建教程网上都可以找到,照着教程一步步做就行了
想快速建立一个hadoop+spark的环境, 你可以直接装cloudera 的 CDH。 他们把上面一切都很好的整合在一起了。如果还想更简单一点,装一个cloudera 的quickstart 虚拟机, 。 一个虚拟机,什么都有了。
不好意思,我没有在quickstart VM上用过Spark SQL, 但是我在CDH5.1 的release note上看到这样的话Spark SQL
Spark SQL, which deserves a&, is a new Spark component that allows you to run SQL statements inside of a Spark application that manipulate and produce RDDs. Due to its immaturity and alpha component status, Cloudera does not currently offer commercial support for Spark SQL. **However, we bundle it with our distribution so that users can try it out.**
如果没有理解错的话,应该是CDH已经包含了,只是不提供官方支持。另外Spark 1.3 对Spark SQL有重大更新,引入了Data Frame RDD,以更好地支持结构化数据。
再补充一点,Spark 并不是一定要绑定Hadoop,如果你仅仅是学习用,不打算把数据放到HDFS上, 你从github上下一个最新版的spark,编译一下就可以了。
还是装 hortonworks 发行的 hadoop吧,社区版本更新更快,组件更全,安装配置更简易。试用的话,直接下 sandbox虚拟机文件
hadoop,spark在虚拟机集群里跑还有性能上的优势吗?修改
如题,系统搭建在公司的虚拟机集群上,这样还有木有性能上的优势?或者说这样搭建分布式计算系统还有意义么?反正最终都是服务器的内存和硬盘,我感觉用多线程,多进程的老方法,直接在服务器上跑,省去那些集群间的调度和网络io,是不是会更快一些?小白不懂,求大侠相助
作为分布式计算平台,性能是非常重要的一个指标,但绝对不是唯一一个指标。单纯从性能角度上来讲,硬件资源固定,虚拟化增大了开销,必然有所降低。但是虚拟化会带来一些其他方面的功能。
资源隔离。有些集群是专用的,比如给你三台设备只跑一个spark,那还算Ok。但在很多规模很小的团体中,在有限的硬件设备的情况下,又要跑spark,比如又要跑zookeeper、kafka等等,这个时候,我们希望它们之间是不会互相干扰的。假设你spark的配置没做好,内存占用太大了,你总不希望把你好端端zookeeper给影响得挂掉(躺枪_(:з」&)_)。那么此时虚拟机或者容器技术可以对物理资源进行隔离,防止这种情况出现。
快速部署,简化配置。无论对于新手还是老手来说,干这行非常痛苦的一点是各种框架的配置和部署,大量重复工作,又不怎么需要动脑子。所以你当然希望有一种方式,直接把你已经配置好的环境保存下来,作为一个镜像,然后当集群要扩展了,比如又增加了一个物理设备,你希望在上面虚拟化成三台虚拟机,两台运行spark,一台运行zookeeper,那简单了,把spark的镜像copy两份,zookeeper的镜像copy一份,网络配置好,开起来,一切都是那么潇洒...
调度单元。更高级的应用中,数据平台向整个团体或者公众提供服务。用户A希望有资源运行自己的应用,用户B也希望运行自己的应用,无论从安全角度还是管理角度上来说你都不希望他们之间是混杂的,这时候虚拟机也是一种解决方案。如果做一个高级点的调度器,当感知到spark工作压力非常大的时候启动一个zk镜像,反之减少一个镜像&&这些功能在有虚拟机进行隔离时都会简单很多很多。
随便想了几个理由,应该还有很多,虚拟化这方面的专家应该更有发言权,毕竟干分布式计算的也只是虚拟化技术的受益者之一。问题中谈到了性能,当然虚拟化的引入比裸奔性能上一定会有影响,如果影响很大的话,在做架构设计的时候就要根据实际需求进行取舍;然而比如像container,docker等轻量级虚拟化技术的出现,使它对性能的影响被压缩到了一个很小的地步,对于大多数分布式系统来说,这点性能损耗并不会有太大的影响&&然后你懂的&&
性能问题在hadoop虚拟化里其实是个次要问题,虽然也确实性能差。更重要不要做虚拟化的原因是你的很多hadoop虚拟机很有可能其实是跑在一台物理服务器上的,那这台物理服务器宕机就会导致整个集群不可用。另外,虚拟化也可能使用的是共享存储,那么这样会让hadoop内建的冗余机制变得毫无意义。第三,虚拟化里,你无法划分正确的机架来让hadoop合理的分布数据块存放位置。最后,虚拟化的网络是软件定义的,底层发生问题你很难对hadoop定位和排错。这些才是不要用虚拟化最重要的原因,排除这些才谈到性能问题。当然曾经也有人跟我抬杠,说一台服务器只做一个虚拟机不就好了吗?可问题是,你要这样做的话为什么不直接装hadoop,非要为了部署方便而白白浪费掉30%的性能呢。每三台服务器就会浪费掉一台物理机的计算能力,代价太大了,除非土豪的国企或政府,否则没人会这么干。
确实没有必要虚拟,Hadoop和spark都是可以单机跑的。如果你的服务器只有一个node,那么单机跑要快很多。
我同意楼上&的说法。虚拟机或者容器来跑Hadoop和Spark,最大的优势就是在于方便部署和管理,并且共有云服务提供商可以提供弹性的服务,现在Databricks和Amazon,甚至国内的青云都提供了Spark虚拟机集群服务。我觉得虚拟化主要是针对大型云服务提供商而言的,集群的快速部署和便捷管理服务是很有市场的,不管是科研还是生产环境。在此基础上我想补充一下:1. 性能的隔离是有必要的,不然就会相互干扰,单个物理节点下用多线(进)程的方式的确从直观上性能是比虚拟化后要好,但是虚拟机带来的好处就是,一个服务器上可以跑多个集群,这些虚拟机可以分属于不同的集群。你怎么在一台服务器上裸奔多个Spark集群呢?2. 虚拟化技术作为云计算的基础,有其优势,它可以提供弹性资源服务,总体上是可以提高硬件使用率的,性能和资源使用率之间是存在一个tradeoff的。3. 在按时间的计费模式下,像Spark这种对内存和CPU使用率较高的集群,部署到公有云中性价比较高。另外一点,Hadoop部署到虚拟机集群中也已经有很多很多成熟的研究成功和工业产品,至于性能,据前Spark团队leader明风透露,阿里巴巴内部曾经试验过,大概性能损耗10%,这在大规模分布式系统中,和数据中心资源利用率比起来,应该不足为道。其实要看你们公司想怎么搞了,要是这些机器就用来跑你的这个集群,那就裸奔试试看呗,不然的话,虚拟化还是有存在的必要的。另外,传送门[1][2]
hadoop的关键在iospark的关键在内存虚拟机,没错,跑当然能跑,尤其作为测试环境,但是扯得蛋真的很疼,是真的很疼的那种如果生产环境资源有限,spark可以放在vm中跑,只要载入数据时注意点; Hadoop就尽量在物理机上面跑吧,节点少点比n个vm都强太多经验之谈,你在太平洋攒10台pc远比你买一台hp的2U跑虚拟机让Hadoop来得畅快我们用的是hp的2U机器25块900gb硬盘物理机作为节点来跑的,酸爽
推荐用docker搭建你的集群,真是太方便了。大数据是一个知识体系,不仅仅是spark,你其实应该学的还包括,文件系统hdfs,Nosql,我推荐的是Cassandra,分布式消息队列,比如kafka,由于kafka绑定了zookeeper,所以zk也少不了。流式处理越来越重要,storm虽然很不错,但spark streaming由于能够和spark sql,mllib无缝整合,所以更加推荐。最后你会发现搭建可以拿来学习的开发环境是相当头疼的。那么,学习docker吧,github上有大量配置好的镜像可以供你使用。可以任意组织你期望的集群。所有一切都可以跑在一台单机上。总之,docker是学习大数据的终极利器。docker是最近很热的microservices的基础,很多产品级的服务都已经迁移的docker上了,所以docker可以说基本成熟了。另外docker容器对宿主机来说就是一个进程而已,内核级的开销很小,所以和创建一个虚拟机比,怎么会消耗更多内存呢?另外,对于学习目的的集群,稳定性真的这么重要吗?
我们用4核8G x86跑HDP镜像,在dock中启动6个container,两个namenode,四个datanode。基本上每次跑mapreduce都会失败,提示network refused,虚拟内存达到4个G。最后不得不destroy container再rebuild,导致hdfs上结果文件丢失,需要重新跑。每次执行都提心吊胆。最后,还是换成单机镜像了。。用 standalone 的方式跑不挺好,大部分人的机子跑不起 spark 的用standlone模式当然也可以,但是如果能模拟集群的运行状态,岂不是更好。毕竟真正的应用都是跑在集群上的。spark版本演进很快,用docker验证一个新版本,是非常方便的。它不会干扰你主机上跑的任何东西。1)学搭建用docker镜像意义不大 2)作为开发环境,你哪怕执行个 wordcount 无论数据多少,那速度,调试到你奔溃;不论 lxc 还是虚拟机,性能都强不过宿主机(更何况大部分人的开发机是 windows,先搭个 vbox ,再在上面搭个docker),spark 在哪跑更快,可想而知docker的好处一是你可以试错,spark新版本出来了,你可以跑跑看,不会影响你现有的环境。第二是你可以搭配其它docker,比如kafka,比如Nosql用。组成一个更接近生产系统的真实大数据环境。我当然是装过才这么说的。单机处理能力摆在那里,根本不应该拿来跑完整的数据集,你可以采样以后跑。但是在单机上,我们要验证算法的正确性。所以模拟一个近生产系统的环境还是有必要的。感觉目前在大集群管理系统中,应用docker做资源隔离容器(替代系统级进程或JVM进程)的要比用docker搭建集群更多些,因为docker本身的特性,使得支持docker容器的资源管理框架能够支持更多类型的应用(例如Web)。之前也看多不少hadoop on docker的文章、dockerfile,但实际上由于docker在文件系统上还是存在不足的,所以也鲜见实际应用的。在各种傻瓜式部署软件例如cdh、cloudera manager的帮助下,环境的搭建反而不那么困难。在生产环境docker on hadoop的意义应当远胜于hadoop on docker,不过对于初学者学习而言,或许算是一个不错的选择,足够直观简洁。个人浅见~承蒙各位捧场,给赞,我想把我的回答再澄清一下。首先,我想回答的问题是大数据学习者如何搭建一个学习环境。并不是如何搭建一个生产环境。实验和生产环境是有很大区别的。docker目前可能还不太适合用于生产环境,但是用于实验是绝对没有问题的,而且非常方便,搭建快速。github什么有很多例子,大家可以参考借鉴一下。
关于学好大数据处理框架,我这里这样假设:
学会大数据框架应用开发;
学会大数据框架;
第一点相对简单,前面很多位都有回答,没有错,spark可以单机部署的,基本上主流框架都能单机部署,所以老老实实低头下载、编译、部署、coding、测试吧,多看文档和源码,多写代码,少看《xx天精通xx》之类的东西(不过可以参考玩玩,别当真就行)。关于机器配置,其实也不用太夸张,这无非又是给自己的惰性找个借口罢了,主流能跑得动LOL的机器都能满足你基本的测试学习需要了,实在不行就壮士断腕放弃游戏直接把系统装成linux&&所以关键还是你学习欲望是否强烈的问题。当然其实也没有那么简单,大数据量和小数据量毕竟有本质上的区别,根本就是两个世界的东西,处理100M和100T数据的区别不只是时间长短、节点多少的问题,有些问题只有在大规模数据处理时才会遇到,能够解决好这类问题的人就很厉害了,也是这行门槛所在。那么重点我想谈谈的是第二个情况:假设你想学好框架。Hadoop 和Spark发展到了今天,都已经不仅仅是一个计算框架了,而使已经演化成了生态完整的系统,很多这个行业最优秀的程序员为它们做了贡献。赞美开源世界,这些代码对你都是Open的,那么就去阅读好了,带着目的的那种。比如你看到了spark standalone的任务提交流程代码,那么为什么它这么搞?能从中借鉴什么?假设哪天自己要设计一个别的分布式系统时是否能够参考?有什么优缺点?这些东西我认为在没有集群的情况下都是能够做的。假设有这样的积累,当开始工作时,你放心:任何系统都会出现问题,当问题发生时对你来说应该一切都是脉络清晰的;任何系统都不可能满足所有需求,当新需求spark/hadoop或者其他什么的满足不了需求时需要重新开发或者改造时,你应该使思路活跃的,应该是能够直击问题关键点的。当然这些锻炼在没有集群和实际操作的情况下是很难做到的,但可以先做好准备。我定义学好,在于系统的每个动作对你来说都是很清晰的,你知道它做这个动作的理由,它的实现方法,这个动作产生的影响,可能会出现问题的点&&我比较笨,大概只能想到好好积累这一种手段&&
如果你只是学习怎么用hadoop和spark单机跑就是了。如果你非要用cluster,去组一个就是了。这么多提供cloud服务的公司呢,也不贵。国内用阿里,国外Amazon的EC2和Google的GCP都行。可能对vagrant docker完全不了解?如果你只是学习怎么用hadoop和spark单机跑就是了。如果你非要用cluster,去组一个就是了。这么多提供cloud服务的公司呢,也不贵。国内用阿里,国外Amazon的EC2和Google的GCP都行。
作者:Wayne Shi链接:/question//answer/来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Spark虽然是大规模的计算框架,但也支持在单机上运行,对于入门学习者而言,单机环境已经足够。实验楼Spark训练营第一节提供了免费的在线Spark学习环境。&img data-rawheight="632" data-rawwidth="1358" src="/fbdbae02c1b58ad2def6f8b3e5c339b6_b.png" class="origin_image zh-lightbox-thumb" width="1358" data-original="/fbdbae02c1b58ad2def6f8b3e5c339b6_r.png"&Spark安装非常简单,如需本地安装可以参考以下步骤。1. 安装1.1 安装前准备
安装Spark之前需要先安装Java,Scala及Python。
实验楼环境中已经安装了JDK,这里打开桌面上的Xfce终端,执行查看Java版本:
&img data-rawheight="169" data-rawwidth="682" src="/f250ba5f3c6bd2dad21fbb_b.jpg" class="origin_image zh-lightbox-thumb" width="682" data-original="/f250ba5f3c6bd2dad21fbb_r.jpg"&
可以看到实验楼的Java版本是1.8.0_60,满足Spark 1.5.1对Java版本的要求。
如果需要自己安装可以在Oracle的官网下载Java SE JDK,下载链接:。
老版本的Spark安装前需要先装Scala,1.5.1版本可以无需这一步骤。但为了自己开发Scala程序调试的方便我们仍然安装一个最新版本2.11.7的Scala。
Scala官网下载地址:
&img data-rawheight="646" data-rawwidth="896" src="/aa486bad337fad277e404880_b.jpg" class="origin_image zh-lightbox-thumb" width="896" data-original="/aa486bad337fad277e404880_r.jpg"&
由于官网速度很慢,我们预先上传到了实验楼内网,下载并解压到/opt/目录:
wget http://labfile./courses/456/scala-2.11.7.tgz
tar zxvf scala-2.11.7.tgz
sudo mv scala-2.11.7 /opt/
测试scala命令,并查看版本:
&img data-rawheight="125" data-rawwidth="695" src="/d96ce1c91f_b.jpg" class="origin_image zh-lightbox-thumb" width="695" data-original="/d96ce1c91f_r.jpg"&
安装Python及IPython
安装执行命令:
sudo apt-get update
sudo apt-get install python ipython
实验楼中已经安装了Python及IPython,分别查看版本:
&img data-rawheight="165" data-rawwidth="402" src="/eaddcfc021a2ead48b2fb8_b.jpg" class="content_image" width="402"&1.2 Spark下载
课程中使用目前最新稳定版:Spark 1.5.1,官网上下载已经预编译好的Spark binary,直接解压即可。
Spark官方下载链接:
下载页面中我们如下图选择Pre-build for Hadoop 2.6 and later并点击下载:
&img data-rawheight="752" data-rawwidth="968" src="/95d44ee5d_b.jpg" class="origin_image zh-lightbox-thumb" width="968" data-original="/95d44ee5d_r.jpg"&
为了节约时间,我们选择从阿里云的镜像下载:
wget /apache/spark/spark-1.5.1/spark-1.5.1-bin-hadoop2.6.tgz
大约268M大小,下载完成后解压并拷贝到/opt/目录:
tar zxvf spark-1.5.1-bin-hadoop2.6.tgz
sudo mv spark-1.5.1-bin-hadoop2.6 /opt/
进入到spark目录查看目录结构,本节实验中会用到bin/目录下的操作命令以及conf/目录下的配置文件。
1.3 配置路径与日志级别
为了避免每次都输入/opt/spark-1.5.1-bin-hadoop2.6这一串前缀,我们将必要的路径放到PATH环境变量中(实验楼用的是zsh,所以配置文件为~/.zshrc):
# 添加配置到zshrc
echo "export PATH=$PATH:/opt/spark-1.5.1-bin-hadoop2.6/bin" && ~/.zshrc
# 使zshrc起作用
source ~/.zshrc
# 测试下spark-shell的位置是否可以找到
which spark-shell
我们进入到spark的配置目录/opt/spark-1.5.1-bin-hadoop2.6/conf进行配置:
# 进入配置目录
cd /opt/spark-1.5.1-bin-hadoop2.6/conf
# 基于模板创建日志配置文件
cp log4j.properties.template log4j.properties
# 使用vim或gedit编辑文件log4j.properties
# 修改log4j.rootCategory为WARN, console,可避免测试中输出太多信息
log4j.rootCategory=WARN, console
# 基于模板创建配置文件
sudo cp spark-env.sh.template spark-env.sh
# 使用vim或gedit编辑文件spark-env.sh
# 添加以下内容设置spark的环境变量
export SPARK_HOME=/opt/spark-1.5.1-bin-hadoop2.6
export SCALA_HOME=/opt/scala-2.11.7
spark-env.sh配置如图:
&img data-rawheight="542" data-rawwidth="842" src="/21e4cbc6a1affd1ee26c64_b.jpg" class="origin_image zh-lightbox-thumb" width="842" data-original="/21e4cbc6a1affd1ee26c64_r.jpg"&
spark-env.sh脚本会在启动spark时加载,内容包含很多配置选项及说明,在以后的实验中会用到少部分,感兴趣可以仔细阅读这个文件的注释内容。
至此,Spark就已经安装好了,Spark安装很简单,依赖也很少。
后续几节介绍简单的Spark操作,为以后的实验做基础。
1.4 Spark-Shell
Spark-Shell是Spark自带的一个Scala交互Shell,可以以脚本方式进行交互式执行,类似直接用Python及其他脚本语言的Shell。
进入Spark-Shell只需要执行spark-shell即可:
spark-shell
进入到Spark-Shell后可以使用Ctrl D组合键退出Shell。
在Spark-Shell中我们可以使用scala的语法进行简单的测试,比如下图所示我们运行下面几个语句获得文件/etc/protocols的行数以及第一行的内容:
&img data-rawheight="227" data-rawwidth="828" src="/77a89194b89ada0f62ceba76bc79ba27_b.jpg" class="origin_image zh-lightbox-thumb" width="828" data-original="/77a89194b89ada0f62ceba76bc79ba27_r.jpg"&
上面的操作中创建了一个RDD file,执行了两个简单的操作:
count()获取RDD的行数
first()获取第一行的内容
我们继续执行其他操作,比如查找有多少行含有tcp和udp字符串:
&img data-rawheight="85" data-rawwidth="443" src="/d1f3b65754c6_b.jpg" class="origin_image zh-lightbox-thumb" width="443" data-original="/d1f3b65754c6_r.jpg"&
查看一共有多少个不同单词的方法,这里用到Mapreduce的思路:
&img data-rawheight="117" data-rawwidth="537" src="/099feaab8b06ed7bacb38_b.jpg" class="origin_image zh-lightbox-thumb" width="537" data-original="/099feaab8b06ed7bacb38_r.jpg"&上面两步骤我们发现,/etc/protocols中各有一行含有tcp与udp字符串,并且一共有243个不同的单词。上面两步骤我们发现,/etc/protocols中各有一行含有tcp与udp字符串,并且一共有243个不同的单词。
上面每个语句的具体含义这里不展开,可以结合你阅读的文章进行理解,后续实验中会不断介绍。Scala的语法我们在后续实验中会单独学习,这里仅仅是提供一个简单的例子让大家对Spark运算有基本认识。
操作完成后,Ctrl D组合键退出Shell。
pyspark类似spark-shell,是一个Python的交互Shell。
执行pyspark启动进入pyspark:
&img data-rawheight="381" data-rawwidth="825" src="/49daa08aa97e18e835a1b_b.jpg" class="origin_image zh-lightbox-thumb" width="825" data-original="/49daa08aa97e18e835a1b_r.jpg"&
退出方法仍然是Ctrl D组合键。
也可以直接使用IPython,执行命令:IPYTHON=1 pyspark
&img data-rawheight="542" data-rawwidth="814" src="/c1e1abdf1bfa1f_b.jpg" class="origin_image zh-lightbox-thumb" width="814" data-original="/c1e1abdf1bfa1f_r.jpg"&
在pyspark中,我们可以用python语法执行spark-shell中的操作,比如下面几个语句获得文件/etc/protocols的行数以及第一行的内容:
&img data-rawheight="205" data-rawwidth="719" src="/52d8bf3f7d5bafe76f5b45_b.jpg" class="origin_image zh-lightbox-thumb" width="719" data-original="/52d8bf3f7d5bafe76f5b45_r.jpg"&操作完成后,Ctrl D组合键退出Shell。操作完成后,Ctrl D组合键退出Shell。
在后续的实验中我们将大量使用python和scala的交互式shell,可以及时的获得实验结果,实验重在理解原理,内容将很少涉及Java的内容,如果你对Java很熟悉可以参考后续的实验代码练习。
2. 启动spark服务
这一节我们将启动spark的master主节点和slave从节点,这里也会介绍spark单机模式和集群模式的部署区别。
2.1 启动主节点
执行下面几条命令启动主节点:
# 进入到spark目录
cd /opt/spark-1.5.1-bin-hadoop2.6
# 启动主节点
./sbin/start-master.sh
没有报错的话表示master已经启动成功,master默认可以通过web访问http://localhost:8080,打开桌面上的firefox浏览器,访问该链接:
&img data-rawheight="478" data-rawwidth="892" src="/dfdae884d1f3eb085a2f375ddac9dc7c_b.jpg" class="origin_image zh-lightbox-thumb" width="892" data-original="/dfdae884d1f3eb085a2f375ddac9dc7c_r.jpg"&
图中所示,master中暂时还没有一个worker,我们启动worker时需要master的参数,该参数已经在上图中标志出来:spark://7a1e9a46bf54:7077,请在执行后续命令时替换成你自己的参数。
2.2 启动从节点
执行下面的命令启动slave
./sbin/start-slave.sh spark://7a1e9a46bf54:7077
没有报错表示启动成功,再次刷新firefox浏览器页面可以看到下图所示新的worker已经添加:
&img data-rawheight="518" data-rawwidth="902" src="/ffb967cb2f52_b.jpg" class="origin_image zh-lightbox-thumb" width="902" data-original="/ffb967cb2f52_r.jpg"&
也可以用jps命令查看启动的服务,应该会列出Master和Slave。
2.3 测试实例
使用pyspark连接master再次进行上述的文件行数测试,如下图所示,注意把MASTER参数替换成你实验环境中的实际参数:
&img data-rawheight="541" data-rawwidth="836" src="/717c2faaa349e231aaf38f_b.jpg" class="origin_image zh-lightbox-thumb" width="836" data-original="/717c2faaa349e231aaf38f_r.jpg"&
刷新master的web页面,可以看到新的Running Applications,如下图所示:
&img data-rawheight="527" data-rawwidth="899" src="/e53f109d1c768a6bc37dc5_b.jpg" class="origin_image zh-lightbox-thumb" width="899" data-original="/e53f109d1c768a6bc37dc5_r.jpg"&
当退出pyspark时,这个application会移动到Completed Applications一栏。
可以自己点击页面中的Application和Workers的链接查看并了解相关信息。
2.4 停止服务
停止服务的脚本为sbin/stop-all.sh,运行时需要输入shiyanlou用户的密码,因为脚本中使用ssh远程对slave节点进行管理:
cd /opt/spark-1.5.1-bin-hadoop2.6
./sbin/stop-all.sh
2.5 集群部署
上面的步骤介绍了我们在单机状态Standalone Mode下部署的spark环境,如果要部署spark集群稍有区别:
主节点上配置spark,例如conf/spark-env.sh中的环境变量
主节点上配置conf/slaves,添加从节点的主机名,注意需要先把所有主机名输入到/etc/hosts避免无法解析
把配置好的spark目录拷贝到所有从节点,从节点上的目录路径与主节点一致,例如都设置为/opt/spark-1.5.1-bin-hadoop2.6
配置主节点到所有从节点的SSH无密码登录,使用ssh-keygen -t rsa和ssh-copy-id两个命令
启动spark集群,在主节点上执行sbin/start-all.sh
进入主节点的web界面查看所有worker是否成功启动
那些说单机的,谁都知道可以单机跑,但是,在单机和集群搭建一个可以使用的环境是完全不一样的,而且,有很多bug在单机环境下是无法触发的。所以很多时候你在单机上能跑的代码在集群上是会不断报错的。学习不是只是知道的就行。
没有集群环境,可以单机跑应用,但是还是没有解决学习大数据平台处理框架的问题。我觉得有几个方面,可以给你参考:1、你需要一个比较强劲的机器,内存/CPU要稍大一些,这些大数据的家伙都是吃资源的;2、你可以选择采用虚拟化技术,比如VMware,VirtualBox,多跑几个linux,应该问题不大;3、你还可以选择最近比较流行的Docker技术,很大程度上比虚拟化要便捷的多;4、你还可以很土豪,买很多实体机,选择用Ambari搭建一个真实的hadoop环境,我觉得那样你会学得更快。
Sequence IQ, DataStax, Cloudera有很多已经build 好的Docker images. Dockerhub上可以搜一下
用AWS的EMR吧,好处是你可以快速的跨过技术搭建环节开始关注商业价值。
集群环境更多的是为了生产环境。如果要学习相关知识的话,单机伪分布式完全是可以的。hadoop的话,建议读hadoop权威指南,了解hadoop处理数据的各个流程,做一些基本的练习。
下载CDH镜像文件,在虚拟机里面伪分布式执行hadoop。需要注意,增加本机内存至少到8G,hadoop尤其spark是吃内存大户。
&推荐《深入理解Spark》
OReilly .Learning Spark.
推荐我去看官方文档。因为spark更新太快了,推荐直接去Apache spark 社区去看官方文档
推荐 &Advanced.Analytics.with.Spark&, OReilly出版的,这不是一本入门书,主要是讲ML这一块。但这本书并不难读,里面每一章都是实例,还提供数据源,很方便动手实践,通过这些&非玩具&的例子可以更好的学习使用spark。
推荐几个资料,是我最近在看的。第一个是,这本书虽然照抄源码,但是我觉得盯着电脑看源码比较累(摔~~~)第二本是 ,貌似评价不好,但是适合入门使用但是,如果想彻底搞明白的话还是建议阅读官方doc,几篇论文啃下来比较好。 翻译比较好的开发手册也可以参照一下
推荐&,此书适合Spark已经入门的读者阅读,对于热爱源码的人也是不错的选择,目前,此书是国内介绍Spark最全面的一本书,对于原理有深层次的解析。
《大数据Spark企业级实战》本书共包括14章,每章的主要内容如下。   第1章回答了Spark为何是大数据处理平台的必然选择?Spark速度如此之快的原因是什么?Spark的理论基石是什么?Spark具体是如何仅仅使用一个技术堆栈解决多元化的大数据处理的需求的?   第2章回答了如何从零起步构建Hadoop集群?如何在Hadoop集群的基础上构建Spark集群?如何测试Spark集群?   第3章回答了如何在IDEA集成开发环境中开发并运行Spark程序?如何在IDA中开发Spark代码并进行测试?   第4章在细致解析RDD的基础上会动手实战RDD中的Transformation类型的RDD、Action类型的RDD,并伴有Spark API的综合实战案例。   第5章详细分析了Spark Standalone模式、Spark Yarn-Cluster模式、Spark-Client模式的设计和实现。   第6章首先介绍Spark内核,接着分享通过源码分析Spark内核及源码,细致解析Spark作业的全生命周期,最后分享Spark性能优化的内容。 .  第7章通过大约30个动手实践的案例循序渐进地展示Spark GraphX框架方方面面的功能和使用方法,并对Spark GraphX的源码进行解析。   第8章基于Spark SQL动手编程实践章节,从零起步,细致而深入地介绍了Spark SQL方方面面的内容。   第9章从快速入门机器学习开始,详细解析MLlib框架,通过对线性回归、聚类、协同过滤的算法解析、源码解析和案例实战,循序渐进地揭秘MLLib,最后通过对MLlib中Basic Statics、朴素}

我要回帖

更多关于 阿里云 弹性公网ip 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信