Spark基础入门

1. spark的核心概念,是什么?解决了什么问题?

内存计算框架

官网:Lightning-fast unified analytics engine.------快如闪电的统一分析引擎

    a unified analytics engine for large-scale data processing. ---针对大规模数据处理的统一分析引擎

补充:spark是基于hadoop基础之上的改进,不同于mapreduce的是Job中间的输出和结果可以保存在内存中,从而不再需要读写HDFS.

Spark是基于内存计算框架,计算速度非常快,但仅仅涉及计算,不涉及存储。


2. Spark的四大特性

2.1 Speed

    面试问题:为什么比hadoop快?

        1. 计算基于内存

                mapreduce任务后期计算的时候,每一个job的输出结果落地磁盘,后续其他job需要依赖于前面job的           输出结果,这个时候需要进行大量的磁盘io操作,性能降低。

                spark任务后期计算的时候,job输出的结果可以保存在内存中,后期其他job依赖前面job输出结果可以         直接从内存中获取,避免了磁盘io操作,性能比较高。

        例如hivesql:

            select name,age from (select * from user where age > 30) t;

            ===job1============  =========job2===============

        2. 进程和线程

                1) mapreduce任务以进程的方式运行在yarn集群中,比如程序有100个mapTask,一个task需要一个进         程,那么就需要100个进程。

                2)spark任务以线程的方式运行在进程中,比如程序有100个mapTask,后期一个task对应一个进程,           可以极端一点在一个进程中启动100个线程就可以了。

                3)开启进程和线程的时间和调度代价是不一样的,前者远远大于后者。

2.2 Easy of use(易用性)

     Java,Scala,Python,R,SQL

2.3 Generality(通用性)

    一站式

2.4 Run Everywhere

    Spark runs on Hadoop,Apache Mesos,Kubernetes,standalone,or in the cloud

        理解:计算框架==》计算程序==》要运行需要计算资源(内存,CPU,磁盘),哪里可以给当前这个任务提供计算资源,就可以把spark程序提交到哪里运行。

        * **standalone**

        spark自带的集群模式,集群中的老大Master负责

        * **yarn**

        ResourceManager负责(计算资源)

        * **mesos**

        apache开源的类似yarn的资源调度平台


3. Spark的整体架构

![8dd5236da9edf2b70030d47a7e0da361.png](evernotecid://EF6E7930-50FF-44A0-BEB3-6B91139D9B51/appyinxiangcom/27146473/ENResource/p2)


4. Spark的集群安装部署

~~~

例如:node01:master,node02:master,worker

node03:worker

~~~

- **在node01节点上下载并安装,及解压的过程略,spark-version :2.3.3**

- **修改配置vi spark-env.sh(/spark里面存储的是元数据)**

export JAVA_HOME=/opt/bigdata/jdk

#配置zk相关

export SPARK_DAEEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node01:2181,node02:2181,node03:2181 -Dspark.deploy.zookeeper.dir=/spark"

```

- **vi slaves(mv slaves.template slaves)**

```

#指定spark集群的worker节点

node02

node03

````

- **分发安装目录到其他节点**

``

scp -r /opt/bigdata/spark node02:/opt/bigdata

``

``

scp -r /opt/bigdata/spark node03:/opt/bigdata

``

- **修改spark环境变量vi /etc/profile,并立即生效source /etc/profile,所有节点都要执行**

``

export SPARK_HOME=/opt/bigdata/spark

``

``

export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

``


5. Spark的集群启动和停止(依赖Zookeeper,首先要启动zookeeper)

- 在node01上执行$SPARK_HOME/sbin/start-all.sh(在哪一台机器上执行start-all,哪一台机器就是master)

- 可以在node02上执行$SPARK_HOME/sbin/start-master.sh,这样node02也是一个master

- 其他命令sbin/stop-master.sh,sbin/stop-all.sh等顾名思义


6. Spark的集群web管理页面

- node01://8080,可以查看到master及worker的状态以及资源分配情况,当然还有任务执行等信息非常全面,master:alive

- node02://8080,master:standby,如果在node01上执行sbin/stop-master.sh,那么这个node02上的master状态会由standby-->alive,体现高可用(页面不会立即生效,大约需要1-2分钟,这期间是在计算资源及选举新的master的过程,这期间已经提交的任务不受影响,对即将提交的任务由于没有活着的master,会受到影响)


7. 初识spark程序

- **普通模式提交**(指定活着的master地址)

```

$SPARk_HOME/bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master spark://node01:7077 \

--executor-memory 1G \

--total-executor-cores 2 \

--examples/jars/spark-examples_2.11-2.3.3.jar \ 10

============================

####参数说明

--class:指定包含main方法的主类

--master:指定spark集群master地址

--executor-memory:指定任务在运行时需要的每一个executor内存大小,如果不指定就会全部占用分配的内存

--total-executor-cores:指定任务在运行时需要的总的cpu核数

```

- **高可用模式提交**(把所有master都罗列出来,后期程序会轮询maser列表找到活着的master,然后向它申请资源运行程序)

``

--master spark://node01:7077,node02:7077,node03:7077

``


8. spark-shell使用(退出spark-shell,干掉SparkSubmit进程,spark-shell仅仅用来测试或者本地学习,实际生产不用)

- ``$SPARK_HOME/bin/spark-shell --master local[2]``

####**说明**:本地模式启动2个线程运行程序(本地模式与集群无关),以下'sc'是运行shell后被初始化的SparkConext对象

- web界面:``http://node01:4040``

- 案例:(统计文件里的每个单词个数)

``scala> sc.textFile("file:///home/hadoop/words.txt").flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((x,y)=>x+y).collect

``

- ####简写

``

scala> sc.textFile("file:///home/hadoop/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

``

- ####处理hdfs上的数据

``

scala> sc.textFile("hdfs://node01:9000/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

``


9. Spark程序的开发(这里不过多介绍)

9.1 本地模式运行

![60771e1528951f6dc30d9e31cdc2b0c5.jpeg](evernotecid://EF6E7930-50FF-44A0-BEB3-6B91139D9B51/appyinxiangcom/27146473/ENResource/p4)

![4d819104964c8a4b4a3a05ec9f1951f8.jpeg](evernotecid://EF6E7930-50FF-44A0-BEB3-6B91139D9B51/appyinxiangcom/27146473/ENResource/p3)

9.2 集群模式开发:上传程序jar包到服务器,spark-submit时指定jar包和主类class以及输入输出参数(这里的输入参数:/words.txt, 输出参数:/out)

![b4c5d28db9b0f561ec9120cc921f3b17.jpeg](evernotecid://EF6E7930-50FF-44A0-BEB3-6B91139D9B51/appyinxiangcom/27146473/ENResource/p5)

你可能感兴趣的:(Spark基础入门)