spark的一点总结

1.要知道1个线程也是可以运行多个task的!只不过如果同时运行多个task就会出现运行一会儿这个,运行一会儿那个,这样轮流运行的情况!
2.读取本地文件和hdfs文件的分区数(partition数)是不一样的!
3.可以用sparkconf在setMaster之后设置并行度,也就是线程数,同时也可以设置分区数(也就是partition数量),所以会出现一个线程运行多个partition的情况,
   如果我们不设置分区数,当从本地文件读取的时候,就从并行度和2取出他们的最小值,作为task数(即分区数,一个task对应一个partition)!(如果设置了分区数,就按照设置的分区数即可)
                         当从hdfs文件系统读取的时候,实际上是hdfs上的一个块对应一个partition!

                        
4.DataFrame相对于原始的RDD操作,性能会高一些!

                    
5.运行spark sql的时候不用开启yarn,当用spark SQL向hive中存储数据时,用hive的时候只要启动hdfs就行了,不用启动hive哦,hive就是个工具。有HDFS就可以用了!!


    
6.  窗口函数可以实现先分组,再求topN的需求,
    spark sql的内嵌函数有100多个呢
    dataFrame的内嵌函数
    udf
    udaf(user defined aggregate function)
    

7.使用了Spark SQL就必须导入Spark SQL的隐式转换,即import sqlContext.implicits._!    
                        
                        
                        
8.UV是需要去重的,PV是不需要去重的!


9. DataFrame中的聚合函数中可以传入Spark SQL中的内置函数!



10.如果你能用这些聚合函数里面传入内置函数的方式实现原来我们用spark core 的API实现的案例功能,那你给面试官的功底就会感觉很深厚,而且这种方式确实比直接用spark Core的API写的案例功能强大!



11.spark on yarn 与  MapReduce on yarn的不同:spark 采用了多线程的方式(每个excutor是一个进程,每个excutor可执行多个taskRunner线程),所以spark是:多进程+每个进程的多线程,
而mapreduce采用了多进程的模式,直接将一个map task直接放到一个进程中跑,MapReduce只有多进程!
一个进程也就对应一个端口号,一个JVM!


12.注意,本文的多进程和多线程,指的是同一个节点上多个任务的运行模式。无论是MapReduce和Spark,整体上看,都是多进程:
    MapReduce应用程序是由多个独立的Task进程组成的;Spark应用程序的运行环境是由多个独立的Executor进程构建的临时资源池构成的


13.多进程模型便于细粒度控制每个任务占用的资源,但会消耗较多的启动时间,不适合运行低延迟类型的作业,这是MapReduce广为诟病的原因之一。而多线程模型则相反,
该模型使得Spark很适合运行低延迟类型的作业。总之,Spark同节点上的任务以多线程的方式运行在一个JVM进程中,可带来以下好处:
  1)任务启动速度快,与之相反的是MapReduce Task进程的慢启动速度,通常需要1s左右;
  2)同节点上所有任务运行在一个进程中,有利于共享内存。这非常适合内存密集型任务,尤其对于那些需要加载大量词典的应用程序,可大大节省内存。
  3)同节点上所有任务可运行在一个JVM进程(Executor)中,且Executor所占资源可连续被多批任务使用,不会在运行部分任务后释放掉,这避免了每个任务重复申请资源带来的时间开销,
     对于任务数目非常多的应用,可大大降低运行时间。与之对比的是MapReduce中的Task:每个Task单独申请资源,用完后马上释放,不能被其他任务重用,尽管1.0支持JVM重用在一定程度上弥
     补了该问题,但2.0尚未支持该功能。尽管Spark的过线程模型带来了很多好处,但同样存在不足,主要有:
        1)由于同节点上所有任务运行在一个进程中,因此,会出现严重的资源争用,难以细粒度控制每个任务占用资源。与之相反的是MapReduce,它允许用户单独为
           Map Task和Reduce Task设置不同的资源,进而细粒度控制任务占用资源量,有利于大作业的正常平稳运行



13.Spark SQL

可以兼容Hive,读取Hive里面的表数据,可以从Hive/JDBC/JSON数据源读取数据过来直接变成DataFrame
里面的最佳拍档是DataFrame,数据框,"表"

传入一条SQL语句过去-->首先通过sql parser分析SQL语句-->接着会有Analyzer来生成逻辑执行计划,Logical Plan-->会通过optimizer来优化这个逻辑执行
计划,spark SQL牛的地方就是这个optimizer做的很不错,join where --> spark planner这个组件去生成物理执行计划
另外呢还有个钨丝计划,它会在底层使用内存的上面进行优化

我们如何理解DataFrame的存储呢?如果是一个RDD,里面存的是一个个的Person对象,相反DataFrame是列存储,相同列的数据会被存储在一起,当然还是
指的内存中,所以DataFrame的性能呢要比这个RDD好很多倍!DataSet会未来Spark SQL小组去重点研究的集合,会有这种数据集的API出现,性能会比DF更好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值