0


Spark系列(一)spark简介及安装配置

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:易用性

  1. 可以使用多种编程语言快速编写应用程序,例如Java、Scala、Python、R和SQL
  2. 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主要应用在以下这些应用场景中:

  1. 低延时的海量数据计算需求,这个说的就是针 对Spark core的应用
  2. 低延时SQL交互查询需求,这个说的就是针对Spark SQL的应用
  3. 准实时(秒级)海量数据计算需求,这个说的就是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搭建模式:

  1. local模式
  2. standalone模式
  3. 基于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
标签: spark 大数据 hadoop

本文转载自: https://blog.csdn.net/qq_38130094/article/details/125764002
版权归原作者 程序员劝退师丶 所有, 如有侵权,请联系我们删除。

“Spark系列(一)spark简介及安装配置”的评论:

还没有评论