Spark精华问答 | 学Spark究竟有什么用?

戳蓝字“CSDN云计算”关注我们哦!


640?wx_fmt=png

为什么要学习Spark?作为一个用来实现快速而通用的集群计算的平台。扩展广泛使用的MapReduce计算模型,而且高效地支持更多的计算模式,包括交互式查询和流处理。Spark的一个重要特点就是能够在内存中计算,因而更快。即使在磁盘上进行的复杂计算,Spark依然比MapReduce更加高效。优势如此明显的Spark,是不是要好好学习一下呢?


640?wx_fmt=gif1



















Q:学了Spark有什么用呢?


A:首先说一下Spark的优势:

1、 更高的性能。因为数据被加载到集群主机的分布式内存中。数据可以被快速的转换迭代,并缓存用以后续的频繁访问需求。在数据全部加载到内存的情况下,Spark可以比Hadoop快100倍,在内存不够存放所有数据的情况下快hadoop10倍。

2、通过建立在Java、Scala、Python、SQL(应对交互式查询)的标准API以方便各行各业使用,同时还含有大量开箱即用的机器学习库。 

3、与现有Hadoop 1和2.x(YARN)生态兼容,因此机构可以无缝迁移。 

4、方便下载和安装。方便的Shell(REPL: Read-Eval-Print-Loop)可以对API进行交互式的学习。 

5、借助高等级的架构提高生产力,从而可以讲精力放到计算上。

所以总结一下就是简单,快速,兼容性好,功能强大。不用再将注意力放在框架上,而是集中于业务逻辑,所以在大数据中Spark很受欢迎,学习Spark,符合市场需求。


640?wx_fmt=gif2

Q:Spark的工作流程是什么样的呢?


A:通俗的解释就是:Spark是为了处理数据而生的平台,用一个比喻来形容它是餐馆。餐馆搭建好了后,就会有顾客,顾客的各种需求都得有人去处理,那么这时的Master就像是服务员,负责了解顾客的要求并把需求按照一定规律分配给厨师(Worker),这个顾客的需求就是一个APP,但这个APP不止包括了一个菜(job),整个订单里有很多个job,每个job都得由这些厨师处理,厨师的手就像是具体处理的Executor,负责所有的包括shuffle啊,filter啊,map啊,reduce等等具体的对原材料(RDD)的处理。driver就像是懒惰的厨师长,worker向它申请资源,同时它负责接收下面的人处理好的半成品材料或者完成品的菜品,但它自己并不干具体的活,如果是别人处理好的半成品,driver就将它分配给它认为有空的人接着处理(可能是map后要reduce的东西),直到目前的stage结束得到具体想要的结果,如果是直接就是想要的数据形式(一个job的完成),那么driver就通知master收货并反馈给顾客(可能是python程序,scala程序等等)。


640?wx_fmt=gif3

Q:Apache Spark和Apache Storm之间有什么差异,用户应该根据什么来加以选择?


A:Apache Spark是一个内存中的分布式数据分析平台- 主要针对加快批量分析工作,反复机器学习的工作,交互式查询和图形处理。一个最主要区别是Spark使用弹性分布式数据集(RDD)。RDD是通过并行运算符来进行计算,并根据定义它是一成不变的。RDD允许Spark基于谱系信息容错的独特的形式。如果你对执行Hadoop MapReduce作业更快,那么Spark是一个很好的选择(即使在这里需要考虑内存的因素)。

Apache Storm是专注于流处理或者一些所谓复杂事件的处理。Storm实现容错的方法进行计算或者以流水线的方式多次计算一个事件,由于Storm进入一个需要特定格式的系统,那么可能导致它转换为一个非结构化的数据。

Storm和Spark存在相当不同的使用情况。Storm和Spark流更多是类似“苹果和苹果”比较。由于Spark的SSD本身是不可变的,Spark流实现在用户定义的时间间隔“定量”来实现更新,得到改造成自己的RDD的方法,从而Spark的并行操作人员可以对这些RDD进行计算。这是与Storm处理每个事的不同之处。

这两种技术之间的一个主要区别是,Spark进行数据的并行计算,而Storm则是任务的并行计算。无论是那种方法,都有它表现价值的一方面。


640?wx_fmt=gif4

Q:打算Shell中写脚本然后,用Crontab,或者说用scala的akka的actor实现多线程。但想要多个这种scala的sparksql并发,没有什么太好的办法,正在考虑用oozie,有没有其他办法?


A:首先,初始化SparkContext是个很重型的工作,特别是有些数据需要预热(加载到内存)的情况;其次,SparkContext是线程安全的,可以多线程调用;第三,配置好DynamicAllocation和调度资源池可以多个Job并发执行。


640?wx_fmt=gif5

Q:用DataFrame对数据进行处理,然后转成RDD,调用saveAsTextFile方法保存在HDFS上,然后出现了400个文件,但只有6条数据,大部分文件都是空的,调用RDD的partitions方法,有400个partition,也就是一个partition写了一个文件,而空的partition写成了空的文件,能不能不写空的文件?


A:修改分区就行了

val rdd1 = sc.parallelize(Array(1,2,3,4,5,6,7,8))

#  查看分区数

rdd1.partitions.length

# 改成1个分区

val rdd2 = rdd1.repartition(1)

rdd2.partitions.length


----------------    --------------

小伙伴们冲鸭,后台留言区等着你!

关于Spark方面的知识还有哪些问题?快来后台留言,我们可以请来专家详细为您解答;

后台留言告诉我,您对哪方面问题感兴趣,好让我们可以根据您提供的话题,有针对性的进行问答;

当然,我们也为大家提供了展示自己的平台,欢迎大家搜集更多问答,投稿给我们吧!


----------------    --------------


1.微信群:

添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。



推荐阅读


640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!


640?wx_fmt=png 喜欢就点击“好看”吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值