Spark入门

 spark是 什么?
            spark是一个快速且通用的集群计算平台
    
    spark特点:
                spark是快速的
                spark扩充了MapReduce计算模型
                spark是基于内存计算的
                    当我们处理大批量的数据的时候,难免会产生中间数据结果,
                        我们往哪里放?
                        第一种方法:放在硬盘中,很显然会带来写入写出的消耗。
                        第二种方法:放在内存中,spark是采用json方法
                
                spark是通用的:
                    比如我有一个瑞士刀  里面带有很多小刀
                            spark的设计容纳了其他分布式系统拥有的功能
                            批处理、迭代式计算、交互式查询和流处理等
                                批处理:hadoop
                                迭代计算:机器学习
                                交互查询:hive
                                流处理框架:storm
                        优点:降低了维护成本
                
                spark是高度开发的:
                                spark提供了python  java  scala  SQL的API和丰富的内置库。
                                saprk和其他的大数据工具整合的很好,包括hadoop,kafka等。
    spark生态
-----------------------------
            诞生于2009年,加州大学伯克利分校RAD实验室的一个研究项目
            最初是基于hadoop MapReduce的,
            发现MapReduce在迭代式计算和交互式上低效,引入了内存存储
            
            2010年3月份spark开源
            2011年AMP实验室在spark上开发高级组件,像spark Streaming
            2013年转移到Apache下,不就便成为顶级项目了
    spark组件
---------------------------
            sparkCore:包含spark基本功能,包含任务调度,内存管理,容错机制
                        内部定义了RDDs(弹性分布式数据集)
                        提供了很多APIs来创建和操作这些RDDs
                        应用场景,为其他组件提供底层的服务
                        
            saprkSQL:是spark处理结构化数据的库,就像Hivesql,mysql一样,
                       应用场景,企业中用来做报表统计
                       
            sparkstreaming:是实时数据流处理组件,类似storm
                            sparkstreaming提供API来操作实时流数据
                            应用场景,企业中用来从kafka接受数据做实时统计
                            
            Mlib:一个包含通用机器学习功能的包    ,Machine learning lib。
                  包含分类,聚集,回归等,还包括模型评估,和数据导入
                  MLlib提供的上面的方法,都支持集群上的横向扩展。
                  应用场景:机器学习
            
            Graphx:是处理图的库(例如,社交网络图),并进行图的并行计算
                    像saprkstreaming,saprkSQL一样,他继承了RDD API
                    它提供了各种图的操作,和常用的图算法,比如:PangeRank算法
                    应用场景:图计算
                    
            Cluster Managers:就是集群管理,saprk自带一个集群管理就是单独调度器
                              常见的集群管理包括Hdoop YARN Apache  Mesos
                              
            精密集成的优点:
                    spark底层优化了,基于saprk底层的组件,也得到了相应的优化
                    紧密集成,节省了各个组件组合使用时的部署,测试等时间
                    向spark增加新的组件时,其它组件,可立即想用新组件的功能


    spark和hadoop比较
---------------------------------
                    hadoop应用场景
                                离线处理
                                对时效性要求不高
                                我们知道hadoop在处理数据的时候它的中间数据落到硬盘上,
                                    这样就导致hadoop在处理大量数据的时候他的时效性不是很高。
                                hadoop执行时间是几分钟到几小时
                    
                    spark应用场景
                                时效性要求高的场景
                                因为spark是基于内存的,他的中间数据尽量不落在硬盘上,
                                尽量的存储在内存中,这样就大大加快spark计算任务
                                spark执行时间是几秒钟到几分钟
                                
                                还有一个领域机器学习
                                
                    比较:
                        DougCutting的观点
                                    这是生态系统,每个组件都有其作用,各善其职就可以了
                                    spark不具有HDFS的存储能力,要借助HDFS持久化数据

    saprk运行环境
-----------------------
            spark是Scala写的,运行在JVM上,所以运行环境java+
            如果你用pythonAPI写的话,需要安装python2.6+或者3.4上
            scala和spark版本对应关系
            spark1.6.2 - Scala2.10   Spark2.0.0 - Scala2.11

    
    saprk下载
---------------------
        下载地址:http://spark.apache.org/downloads.html
        搭spark不需要hadoop,如果有hadoop集群,可下在相应版本
        解压
        
        spark目录:
                bin包含用来saprk交互的可执行文件,如saprkshell
                core,streaming,python...包含主要组件的源代码
                examples包含一些单机sparkjob,你可以研究和运行这些例子

       
        spark的shell:
                spark的shell使你能够处理分布在集群的数据。
                spark把数据加载到节点的内存中,因此分布式处理可在秒级完成
                快速使迭代式计算,实时查询、分析一般能够在shell完成
                saprk提供了python shells和scala shells
                
                scala shell:
                            bin/spark-shell

                                      
    Scala安装
--------------------------
            下载地址:https://www.scala-lang.org/download/2.10.5.html
            默认安装选项会自动配置环境变量
            scala和spark版本对应关系
            spark1.6.2 - Scala2.10   Spark2.0.0 - Scala2.11

           
    Intellij IDEA的下载 ,安装:
-------------------------------
                    下载地址http://www.jetbrains.com/idea/

   
    scala插件安装
----------------------------
                plugins 搜索scala直接安装,插件中有scala和sbt
    
    搭建开发环境常遇到的问题:
                        网络问题
                        版本匹配问题Scala2.10.5,jdk18,spark162。Sbt.013.8


    IntelliJ IDEA常用的设置
                主题和颜色 appearance
                字体 Editor  Colors & Fonts  Fonts

   
    RDD
-------------------
        Driver program:
                        包含程序的main()方法,RDDs的定义个操作
                        它管理很多节点,我们称作executors


           sparkContext:    通过sparkcontext对象访问spark
                        sparkContext对象代表和一个集群的连接
                        在shell中spark自动创建好了,就是sc
                        
        RDDs:(弹性分布式数据集,简写RDDs)
             这些RDDs,并行的分布在整个集群中     Lines就是数据集
             RDDs是spark分发数据和计算的基础抽象类
             一个RDD是一个不可改变的分布式集合对象
             saprk中,所有的计算都是通过RDDs的创建,转换操作完成的。
             一个RDD内部由许多partitions(分片)组成的
                    分片:
                        每个分片包括一部分数据,partitions可在集群不同节点上计算
                        分片是spark并行处理的单元,spark顺序的,并行的处理分片
        
        RDDS创建方法:
                    把一个存在的集合传个sparkContext的parallelize()方法,测试用val arr = sc.parallelize(Array(1,2,2,4),4)  rdd.foreach(print)遍历每一个变量打印出来
                    第一个参数:待并行化处理的集合,第二个参数:分区个数

        
        RDDS创建方法:
                    加载外部数据集
                    val rddText = sc.texFile("helloSparka.text")

        
    Transformations    
-------------------------
            Transformations    (转换)
            从之前的RDD构建一个新的RDD,像map()和filter()
    
        逐元素Transformations    
        map()
                map()接受函数,把函数应用到RDD的每一个元素,返回新的RDD
        
        filter()
            filter()接收函数,返回只包含满足filter()函数的元素的新RDD
            
        flatMap() 
            对每个输入元素,输出多个输出元素
            翻译就是压扁的意思,将RDD中元素压扁返回一个新的RDD

            
    集合运算
----------------------
            RDDs支持数学集合的计算,例如并集、交集

    
    RDD基本操作Actio
---------------------------------
                在RDD上计算出来一个结果
                把结果返回给driver program或保存在文件系统,count(),save
                常用的:
                        reduce()
                        接收一个函数是,作用在RDD两个类型相同的元素上,返回新元素
                        可以实现,RDD中元素的累加,计数,和其他类型的聚集操作
                        
            Collect():
                    遍历整个RDD,向driver program返回RDD的内容
                    需要单机内存能够容纳下(因为数据要拷贝给driver,测试使用)
                    大数据的时候,使用saveAsTextFile()action等
                    
            take(n):
                    返回RDD的n个元素(同时尝试访问最少的partitions)
                    返回结果是无序的,测试使用
                    
            top():
                    排序(更加RDD中数据的比较器)

            
            foreach():
                    计算RDD中的每个元素,但不返回到本地
                    可以配合println()友好输出打印出数据


   
    RDDs的特性:
-------------------
                RDDS的血统关系图:
                            Spark维护着RDDs之间的依赖关系和创建关系,叫做血统关系图
                            spark使用血统关系图来计算每个RDD的需求和恢复丢失的数据

                        
                            延迟计算:
                    spark对RDDs的计算是,他们第一次使用action操作的时候
                    这种方式在处理大数据的时候特别有用,可以减少数据的传输
                    spark内部记录metadata表名transformations操作已经被响应了
                    加载数据也是延迟计算,数据只有在必要的时候,才会被加载进去            
            
            RDD.persist():持久化
                    默认每次在RDDs上面进行action操作时,saprk都重新计算RDDs
                    如果想重复利用一个RDD,可以使用RDD.persist()
                    unpersist()方法从缓存中移除


   
    KeyVlaue对RDDs
-------------------
        创建KeyVlaue对RDDs:
                        使用map函数,返回key/value对
                        例如:包含数行数据的RDD,把每行数据的第一个单词作为keys

                        
        combineByKey():
                    最常用的基于key的聚合函数,返回的类型可以输入类型不一样
                    许多基于key的聚合函数都用到了它,像groupBykey()
                    
                    主要是遍历partition中的元素,元素的key,要么之前见过的,要么不是。
                    如果是新元素,使用我们提供的createCombiner()函数
                    如果是这个partition中已经存在的key,就会使用mergeValue()函数
                    合计每个partition的结果的时候,使用mergeCombiners()函数

        
    Scala基础知识
-------------------------------
            scala变量声明:
                        在scala中创建变量的时候,必须使用val中var
                        val,变量值不可修改,一旦分配不能重新指向别的值
                        var,分配后,可以指向类型相同的值
                        
            scala的匿名函数和类推断:
                        lines.filteer(line=>line.contains("world"))
                        定义一个匿名函数,接受一个参数line
                        使用line这个Stirng类型变量上的contains方法,并且返回结果
                        line的类型不需指定,能够推断出来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值