hdfs:hadoop分布式系统
spark主要使用了hadoop中hdfs

1 spark 用什么语言实现的?
    Spark使用Scala语言进行实现,Scala 建立在JAVA之上
    scala:是一个多范式编程语言,学习难度大于Java、python.语法灵活简单
    pyspark:使用python语言进行实现。python的函数库非常丰富,后期便于学习ML(机器学习)。

2.为什么使用spark?
    1.内存分布式计算,运行速度快
    2.spark可以支持多种语言编程(java, scala,rand, python),hadoop只支持java
    3.hadoop 处理的结果保存在磁盘,不支持有向无环图,没有优化方案,spark有优化方案,会选取最优的路径
    4.spark多了交互式数据的处理

3.spark的几种运行模式
     1.批处理 -- 用于大规模的分布式数据处理 
        i:spark-submit preS.py
        spark-submit工具提交Job时Driver运行在本地Client端

       2.流方式 -- Spark流用于传送和处理实时数据 
       3.交互方式:常用于处理在内存中的大块数据.较低的延迟
        i:Spark Scala Shell  
            在linux shell 下用 spark-shell 进入,用scala解释执行
      ii:Spark Python Shell (PySpark Shell)
          在linux shell 下用 pyspark 进入 , 用python解释执行

        iii: IPython (Jupyter) Notebook:用python交互解释执行
            cd /home/hadoop/anaconda3/bin
            ./jupyter notebook --ip 0.0.0.0 --port 9999

4.spark支持的文件格式?

    Text (包括CSV JSON 等)   以行为单位做数据
    SequenceFiles           序列文件(类似Text文件但带头部)
    AVRO                    一款序列化框架 ,以对象为单位 一个对象单位为片 (用的多,跨平台)
    Parquet(主要使用这个)按列存储,好处:这一列的数据类型是一致的,可以采用最优的方式压缩,都数据时按列读取,IO开销小
    orcfil:(列式)

5.说说rdd?

    1.弹性分布式数据集分布在不同集群节点的内存中
    2.可以理解成一大数组
    3.数组的每一元素是RDD的一分区
    4.一个RDD可以分布并被运算在多台计算机节点的内存及硬盘中
    5.RDD数据块可以放在磁盘上也可放在内存中(取决于设置)
    6.如出现缓存失效或丢失,RDD的分区可以重新计算刷新
    7.RDD本身是不能被修改的,但RDD可以通过API (底层采用Scala)被变换生成新的R
    8.有两类对RDD的操作:变换和操作(变换发生在worker机上,操作在driver机上)

6.解释DAG?

    有向无环图(DAG,Directed Acycle graph)的分布式并行计算框架(反应RDD之间的依赖,提供Cache机制来支持多次迭代计算或者数据共享以减少迭代计算之间读取数据局的开销,根据用户端对RDD的指令进行优化以减少系统开销)

7.说说spark和mapreduce的区别?
    1.运行方式(MR的运算是内存磁盘交互读写.不能再内存中共享数据,RDD可以被共享和持久化,每次都要写到磁盘里,在从磁盘中读取)
    2.大数据运算经常是交互式和迭代式的。所以数据的重用性很
重要。而MR的磁盘交互读写带来I/O 开销导致速度减慢, spark会在执行操作时,通过DAG,所以速度要快
8.spark的调度模式?

spark用哪种编程语言实现 spark采用什么语言编写_spark

“`
9. Spark-core 运行机理?

spark用哪种编程语言实现 spark采用什么语言编写_hadoop_02

1. SPARK CORE的 驱动程序首先运行Application的main函数并创建建立Spark Application的运行环境即SparkContext,SparkContext被注册到某类资源管理器上:Standalone、Mesos或YARN并申请运行Executor资源;

 2. 资源管理器分配Executor资源并启动Executor后端服务并接受主节点命令以及进行状态汇报
 3. SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor。
 4. Task在Executor(worker)上运行,运行完毕释放所有资源

10.Spark 调度模式 :YARN模式

spark用哪种编程语言实现 spark采用什么语言编写_spark用哪种编程语言实现_03

ResourceManager (由Application Manager 和Scheduler 组成)负责将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container,其中封装了机器资源,如内存、CPU、磁盘和网络等,每个任务会被分配一个Container,该任务只能在该Container中执行,并使用该Container内的资源. ResourceManager同时在每个DataNode上产生ApplicationMaster以监控Container的运行

    NodeManager是一个个的计算节点,主要负责启动和资源上监控Application所需的Container, 包括监控例如内存、CPU、磁盘和网络等的使用情况并将之汇报给ResourceManager。ApplicationMaster与具体的Application相关,主要负责同ResourceManager协商以获取合适的Containers,并跟踪这些Containers的状态和监控其进度。

11.YARN模式下的三层防错?

如果Container不行了AppMaster会重启Container
如果重启不行 会进行第二次请求 AppMaster回去请求ApplicationsManager
再不行 会把重新分配一个workers 当Node Manager