1. spark简介:
什么是Spark:Spark是一个用于大规模数据处理的统一计算引擎
注意:Spark不仅仅可以做类似于MapReduce的离线数据计算,还可以做实时数据计算,并且它还可以实现类似于Hive的SQL计算,等等,所以说它是一个统一的计算引擎
spark里面最重要的一个特性:内存计算
Spark中一个最重要的特性就是基于内存进行计算,从而让它的计算速度可以达到MapReduce的几十倍甚至上百倍
2. spark特点:
2.1 Speed:速度快
由于Spark是基于内存进行计算的,所以它的计算性能理论上可以比MapReduce快100倍
Spark使用最先进的DAG调度器、查询优化器和物理执行引擎,实现了高性能的批处理和流处理。
注意:批处理其实就是离线计算,流处理就是实时计算,只是说法不一样罢了,意思是一样的
2.2 Easy of Use:易用性
- 可以使用多种编程语言快速编写应用程序,例如Java、Scala、Python、R和SQL
- Spark提供了80多个高阶函数,可以轻松构建Spark任务。
2.3 Generality:通用性
Spark提供了Core、SQL、Streaming、MLlib、GraphX等技术组件,可以一站式地完成大数据领域的离线批处理、SQL交互式查询、流式实时计算,机器学习、图计算等常见的任务
从这可以看出来Spark也是一个具备完整生态圈的技术框架.
2.4 Runs Everywhere:到处运行
你可以在Hadoop YARN、Mesos或Kubernetes上使用Spark集群。
并且可以访问HDFS、Alluxio、Apache Cassandra、Apache HBase、Apache Hive和数百个其它数据源中的数据。
3. Spark的应用场景
Spark主要应用在以下这些应用场景中:
- 低延时的海量数据计算需求,这个说的就是针 对Spark core的应用
- 低延时SQL交互查询需求,这个说的就是针对Spark SQL的应用
- 准实时(秒级)海量数据计算需求,这个说的就是Spark Streaming的应用
之前有一种说法,说Spark将会替代Hadoop,这个说法是错误的,其实它们两个的定位是不一样的,Spark是一个通用的计算引擎,而Hadoop是一个包含HDFS、MapRedcue和YARN的框架,所以说Spark就算替代也只是替代Hadoop中的MapReduce,也不会整个替代Hadoop,因为Spark还需要依赖于Hadoop中的HDFS和YARN。
所以在实际工作中Hadoop会作为一个提供分布式存储和分布式资源管理的角色存在
Spark会在它之上去执行。
4. 环境要求及准备工作
首先要确保基础环境是具备的:
spark版本2.3.4
linux7:三台(hadoop安装的机器,免密时间同步等基本要求)
jdk版本:1.8.xxx 三位小版本以上的(为了兼容scala环境)
获取spark安装包:wget https://archive.apache.org/dist/spark/spark-2.3.4/spark-2.3.4-bin-hadoop2.7.tgz
解压后目录结构:
5. spark搭建模式:
- local模式
- standalone模式
- 基于yarn的spark集群模式【推荐使用】
local 和 standalone 模式必须启动 spark,yarn 模式无需启动 spark
5.1 local模式在解压缩安装后
./bin/spark-shell
可以通过wordcount来测试:
sc.textFile("data/data.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
5.2 Standalone模式搭建(基于hdfs文件存储)
官方手册:https://spark.apache.org/docs/2.3.4/spark-standalone.html#cluster-launch-scripts
5.1.1 首先配置spark环境变量: vim /etc/profiles
export SPARK=/usr/local/bigdata/spark-2.3.4-bin-hadoop2.7
export PATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER/bin:$HADOOP/bin:$HADOOP/sbin:$SPARK/bin:$SPARK/sbin
5.1.2 编辑spark-env.sh文件
cp spark-env.sh.template spark-env.sh
设置 spark 的主节点 和 端口;
spark_worker_memory 表示计算时使用的内存,越大越好,spark 是基于内存的计算
export JAVA_HOME=/usr/local/jdk1.8.0
export HADOOP_CONF_DIR=/usr/local/bigdata/hadoop-2.8.5/etc/hadoop/
export SPARK_MASTER_HOST=node1 # 每台master改成自己的主机名
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8080
export SPARK_WORKER_CORES=2
export SPARK_WORKER_MEMORY=2g
5.1.3 复制并编辑slaves文件
worker进程启动的目标机器
node2
node3
5.1.4 向目标节点(woker)远程下发spark文件
scp -r spark-2.3.4-bin-hadoop2.7 node2:`pwd`
scp -r spark-2.3.4-bin-hadoop2.7 node3:`pwd`
5.1.5 在master上启动所有节点
http://node1:8080![](https://img-blog.csdnimg.cn/6c2e70c422a0400981d48ca47ba694ca.png)
5.2 基于yarn安装spark集群
spark on yarn 模式只需在 hadoop 集群的任一节点安装 spark 即可,不需要 spark 集群;
因为 spark 应用提交到 yarn 后,yarn 负责集群资源调度。
spark 安装参照 Standalone 模式,大致如下:
5.2.1 配置环境变量
5.2.2 spark-env.sh 添加如下内容(核心)
YARN_CONF_DIR=/usr/local/bigdata/hadoop-2.8.5/etc/hadoop/
5.2.3 修改 hadoop yarn 的配置
修改 yarn-site.xml,添加如下内容:
不配置这步可能报错,特别是分配内存较小时,如虚拟机情况下。
<!-- spark 部署到 yarn 上需要这两个配置 -->
<!-- 是否启动一个线程检查每个任务正在使用的物理内存,如果超出分配值,则直接杀掉该任务,默认为 true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否启动一个线程检查每个任务正在试用的虚拟内存,如果超出分配值,则直接杀掉该任务,默认为 true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- spark 部署到 yarn 上需要这两个配置 -->
操作 yarn 模式
spark-shell --master yarn-client # 这种方式在 spark2.x 中被废弃,替代命令为下面这句
spark-shell --master yarn --deploy-mode client
yarn 模式 不在 spark UI 上监控,而是在 hadoop UI 上,地址为 http://node1:8088
5.2.4 wordcount测试
# 使用spark-shell的方式启动spark
#使用wordcount 测试下功能
./spark-shell --master yarn
sc.textFile("hdfs://node1:9000/sparktest/data.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)
6. 基于yarn方式HIVE元数据metastore启动spark
spark on hive sparksql
在spark的conf目录下增加hive-site.xml文件
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node3:9083</value>
</property>
</configuration>
启动后可以直接读到元数据
7 . 命令行提交任务参数解析
参数
解释
可选值举例
--class
Spark 程序中包含主函数的类
--master
Spark 程序运行的模式(环境)
模式:local[*]、spark://nameNode:7077、
Yarn
--executor-memory 1G
指定每个 executor 可用内存为 1G
符合集群内存配置即可,具体情况具体分析。
--total-executor-cores 2
指定所有executor 使用的cpu 核数
为 2 个
--executor-cores
指定每个executor 使用的cpu 核数
application-jar
打包好的应用 jar,包含依赖。这
个 URL 在集群中全局可见。 比如 hdfs:// 共享存储系统,如果是
file:// path , 那么所有的节点的
path 都包含同样的 jar
application-arguments传给 main()方法的参数
提交到本地和集群的示例
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.12-3.0.0.jar 10
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop11:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar 10
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.0.0.jar 10
8. 部署模式对比:
模式
Spark 安装机器数
需启动的进程
所属者
应用场景
Local
1
无
Spark
测试
Standalone
3
Master 及 Worker
Spark
单独部署
Yarn
1
Yarn 及 HDFS
Hadoop
混合部署
9. spark相关服务端口号
- Spark 查看当前 Spark-shell 运行任务情况端口号:4040(计算)
- Spark Master 内部通信服务端口号:7077
- Standalone 模式下,Spark Master Web 端口号:8080(资源)
- Spark 历史服务器端口号:18080
- Hadoop YARN 任务运行情况查看端口号:8088
版权归原作者 程序员劝退师丶 所有, 如有侵权,请联系我们删除。