scala变量定义表达式 如何高效的学习Apache Spark?

[更新]
·
·
分类:互联网
4012 阅读

如何高效的学习Apache

如何高效的学习Apache Spark?

Spark?

Spark定义a.是一个通用的大规模数据快速处理引擎。
b.Spark就是一个大数据分布式处理框架。
3.Spark在性能和方案的统一性都具有显著的优势。
Spark使用SparkSQL、Spark Streaming、MLlib、Graph几乎完美地解决了大数据中的Batch Processing、Stream Processing、Ad-hocQuery(即席查询)等三大核心问题。
如何学习Spark配置spark环境:先安装linux,java,Scala,spark等软件,配置环境变量,搭建集群。建议你先熟悉一下linux系统。学习scala语言 ,函数式编程,这些有点难度。我是学java过来的,感觉很不适应,语法感觉很怪,需要冷静下来好好学习,trait ,object 伴生对象,柯里化等概念还是需要好好理解的,他也有很多好处,比如apply()方法,很方便的新建一个对象那个,用得多了,就觉得很好用,我现在就觉得很好用,学过java好理解一些,本质一样,表达方式不同而已。建议您学习一下java。spark学习,最好学习spark的方式就是看官方文档,跟着官方文档过一遍手,基本就理解的差不多啦,接下来用idea集成编程完成的程序,调试测试等,基本就可以上手啦!接下深入理解就看源码,深入Spark内核,通过源码掌握Spark的任务提交过程,掌握Spark集群的任务调度,尤其要精通DAGScheduler、TaskScheduler和Worker节点内部的工作的每一步的细节。基于Spark上的核心框架的使用,学习SparkSQL(关系型操作)、Spark Streaming(实时处理)、MLlib(机器学习)、GraphX(图处理)这些。
我们使用spark一般都使用Yarn框架,所以我觉得还需要学些Hadoop学习。有hdfs和mr(现在是YARN)组成,有兴趣可以看这篇文章
场景
Spark是一个分布式内存型计算框架,吸收MR的优点,以RDD数据来表示模型,提供多种算子,例如map|filter|flatMap|sample|groupByKey|reduceByKey|union|join等,并将中间数据放到内存中,使得迭代运算效率更高,更适合于实时计算|交互式计算或者要求计算量大、效率要求高等场景。与Yarn的结合,使得Spark可以与MR运行与同一个集群中,共享存储资源与计算资源,不断完善的SparkSQL,可以与Hive兼容,大大增强了Spark的应用范围及优越性。
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。
总的来说Spark的适用面比较广泛且比较通用。
Spark的特点a.快速基于内存计算速度是MR的100倍,基于磁盘计算的速度是MR的10倍
快的原因是:Spark有一个DAG(有向无环图)执行引擎,支持循环数据流和内存计算。
b.易用
提供多语言的API,能快速实现应用,相比MR有简洁的代码,安装部署简单
c.通用
提供一个强大的技术栈,包括查询语言SparkSQL、实时流处理工具Spark Streaming、机器学习工具MLlib、图计算工具GraphX, Spark的目的在于构建一个结构上一体化功能上多元化的高效数据流水线技术栈。
d.集成Hadoop
Spark可以运行在YARN上,可以读取Hadoop的任何数据
下面是Spark生态系统Spark Core:它包含Spark的基本功能(任务调度、内存管理、故障恢复以及存储系统的交互),包含RDD|Stage|DAG|它的核心思想就是将数据缓存在内存中,并用Lineage机制容错。
a.RDD:
Resilient Distributed DataSets,是分布式只读的且已分区的集合对象。
这些集合是弹性的,如果数据集的一部分丢失,则可以对它们进行重建。
具有自动容错|位置感知调度|可伸缩性的特点。
对于记录数据的更新,RDD也只支持粗粒度的转换(记录如何从其他RDD转换而来即Lineage,以便恢复丢失的分区)
数据集容错的两种方式:数据检查点(成本高,服务器之间的传输的问题)和记录数据的更新。
Spark大数据处理框架1.Spark速度快的原因
a.统一的RDD抽象和操作:Spark基于RDD抽象,使得Spark的框架轻而易举地使用Spark Core中的所有内容, 并且各个框架可以在内存中无缝地集成和完成系统任务。
b.Spark是基于统一的技术堆栈。
2.基于内存的迭代式计算
MR在每次执行时都要从磁盘读数据,计算完毕之后都要把数据存放在磁盘上。
Spark是基于内存的,每次运算都是在内存中计算的。
3.DAG
a.是另外一个快的重要原因
b.基于RDD,Spark具备了非常精致的作业调度系统
c.DAG中的依赖有宽依赖和窄依赖之分,DAG可以根据依赖对pipeline等进行优化操作
d.基于RDD和DAG并行计算整个Job.
4.出色的容错机制
a.基于DAG图,lineage是轻量级且高效的
b.操作之间相互具备lineage的关系,每个操作只关系其父操作,各个分片的数据之间互不影响,
出现错误时只要恢复单个split的特定部分
觉得spark挺好用的,但是有一些场景还是不适用
欢迎各位大神来指点

PHP的开发效率比java要高,为什么现在java这么流行?

php5年,java3年,go3年工作项目应用经验的来给你们说说。我看大部分人都是道听途说,根本就没有说到点子上。java比php更流行那只是相对概念,你首先得限定一个范围,比如国内的招聘岗位。java岗位比php更多。但你知不知道全世界的web网站,百分之八十都是php写的。你又知不知道,网上的开源项目和源码php比java多的不是一个数量级。在不同国家php和java的岗位数量也不同。比如法国php岗位就比java多很多。在美国php和java岗位相差也没有那么悬殊。
说回国内,国内的java相对流行其实和语言差异的关系并不大。一来是因为高校毕业生有很多是学过java的。二来头部的几个大企业因为微软的策略失误导致一开始选择java来节省成本。典型的就是阿里系。去看看阿里的技术发展路线相关的文章,就知道为什么选择java了。京东一开始还用的c#呢。后来被费用和专利逼的转java了。这些头部企业出来的人把java带向了更多的独角兽企业。国内企业维经验论。技术总监们没个大厂的工作经验那是很难混上好公司的。这些个熟悉java的总监们招一些学校里学过java的学生也好招。慢慢的就在国内互联网圈流行开java.至于老板们,有几个老板懂技术的,还不是技术总监副总说什么是什么。
php的情况就不太一样,php一开始在国外的大厂在应用,比如facebook。国内的流行一方面有大厂的光环加持。一方面php开源项目多。很多的小公司倾向于拿着别人的源码先改一改,尽快上线看效果。他们可没有大厂那么多钱和时间来投入。前几年的web开发的市场环境相对蓝海,给了很多小厂生存空间。搏一搏也许能生存几年。所以php岗位也不少。
现在,互联网项目都被大厂占领完了,你现在还能听到几个老板拿个淘宝的站问你能不能做?现在就算你敢做,也没这种老板了。大家都知道和大厂争不过了。从数量上来说,小公司招聘的技术岗位越来越少。php开发的需求也就越来低。反过来,,php程序员也越来越少。剩下的小公司招聘上几轮,来的大半都是java,也只好选择java了。这情况和现在的c#一样了。市场和人员互相影响罢了。
说到语言的性能,你真以为是php和java的性能区别影响了公司选择?你快别逗了。有几个老板了解技术?还不是招进来的技术总监说什么就是什么。进小公司的技术总监又有几个是java和php都精通的?反正挑自己用的顺手的语言用就对了。
所以,php的没落只是因为一件事,互联网行业或者说web开发相关行业越来越趋向垄断了。没到千万pv的,别提什么语言的性能。那点流量根本就达不到上限好吧。卡性能的都是io和网络。那都是架构上的事,你java能堆机器,php就不能?一台机子按5个g可用内存算,一个进程20m内存占用,我开100个进程没问题吧?cpu不够我往上加。10台机子1000并发。你算我可以支撑多少pv 来java们你给我算算你们内存消耗多少,并发多少。不算io和网络的空谈性能都是耍流氓。再说了有几个项目千万pv级别以上的。那些张口闭口性能的来把你们公司的项目报出来让大家看看都是些啥大项目。
至于说到语言区别,不是你们张口闭口的什么脚本语言什么编译语言。php也可以编译成机器码常驻内存你知道吗?php不光有多进程也有多线程调度你知道吗?除了特性丰富又笨重的laravel。还有等性能吊打spring的框架你们知道吗?java的生态丰富,php也一点不差。唯一比不上java的是php没有从语言层面支持那么多的业务场景,web开发场景之外。java从语言层面的支持比php要方便很多。php本来也就是为了web开发而设计的。要说到多场景的支持。那c可比java强太多了。语言层面的并发支持go也比java强的多。浏览器里是js的天下。机器AI是python的天下。区块链开发也轮不到java挑头。所以,别提性能,提就是蠢,一叶障目。