02_spark实操

运行案例程序

计算圆周率——Local

Local 模式下,解压安装 spark 后,运行 example 包下的案例程序:

bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[2] ./examples/jars/spark-examples_2.12-3.5.1.jar 10
  • --class 表示要执行程序的主类;
  • --master lcoal[2]:本地模式,启动 k 个核心来计算;

查看 SparkSpi.scala 源代码:

package org.apache.spark.examples

import scala.math.random

import org.apache.spark.sql.SparkSession

/** Computes an approximation to pi */
object SparkPi {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder
      .appName("Spark Pi")
      .getOrCreate()
    val slices = if (args.length > 0) args(0).toInt else 2
    val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
    val count = spark.sparkContext.parallelize(1 until n, slices).map { i =>
      val x = random * 2 - 1
      val y = random * 2 - 1
      if (x*x + y*y <= 1) 1 else 0
    }.reduce(_ + _)
    println(s"Pi is roughly ${4.0 * count / (n - 1)}")
    spark.stop()
  }
}

img

实现 WordCount——Local

同理,我们可以自己用 Scala 实现简单的词频统计程序并且运行在 Spark 上。

img

按如下步骤操作:

  • 事先准备好词频文件 1.txt、2.txt
  • 启动 spark 内置命令行解析器 spark-shell,编写 Scala 语句并执行。

img

Standalone 模式

Standalone 环境搭建

Standalone 模式不依赖于其他框架(Yarn、Mesos),完全由 Spark Master、Spark Worker 构建的高可用集群。

如何搭建 Standalone 模式:

  • 进入 conf 目录,修改 slaves.template 文件,为其中添加 worker 节点(节点名为对应主机名);
  • 修改 spark-env.sh 文件,为其配置 Spark 主节点主机名和端口:
SPARK_MASTER_HOST=xxx
SPARK_MASTER_PORT=7077
  • 分发 Spark 包到其他 Worker 节点上:xsync spark.xxxx
  • 启动集群:sbin/start-all.sh

standalone 模式下运行示例程序,注意 --master xxx 需要定义 主机IP+Port--executor-memory Executor使用内存--total-executor-cores CPU核数 需要指定额外参数。

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 2G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.12-3.5.1.jar \

Standalone 高可用

img

如何配置高可用:

  • 安装 Zookeeper;
  • 配置 spark-env.sh
#注释掉如下内容:
#SPARK_MASTER_HOST=hadoop102
#SPARK_MASTER_PORT=7077

#添加上如下内容。配置由Zookeeper管理Master,在Zookeeper节点中自动创建/spark目录,用于管理:
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER 
-Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104 
-Dspark.deploy.zookeeper.dir=/spark"

#添加如下代码
#Zookeeper3.5的AdminServer默认端口是8080,和Spark的WebUI冲突
export SPARK_MASTER_WEBUI_PORT=8989
  • 分发配置文件:xsync spark-env.sh
  • 分别启动主节点和工作节点;
  • 上传数据文件到 hadoop 集群目录:hadoop fs -put /xxx/input /input
  • Spark 以集群方式启动计算任务:
bin/spark-shell \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077,hadoop103:7077 \
--executor-memory 2g \
--total-executor-cores 2

Standalone 运行原理

Spark 有 standalone-clientstanalone-cluster 两种模式,区别在于 Driver 程序的运行节点。

  • 客户端模式,其中 --deploy-mode client 表示运行在本地客户端:
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077,hadoop103:7077 \
--executor-memory 2G \
--total-executor-cores 2 \
--deploy-mode client \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

img

  • 集群模式,其中 --deploy-mode cluster 表示运行在集群:
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077,hadoop103:7077 \
--executor-memory 2G \
--total-executor-cores 2 \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

img

Yarn 模式

Spark 客户端直连 Yarn,不需要额外构建 Spark 集群。

Yarn 模式配置过程

  • 修改 hadoop 配置文件 hadooop/yarn-site.xml
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是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>
  • 分发配置文件:xsync hadoop/yarn-site.xml
  • 修改 conf/spark-env.sh,添加 YARN_CONF_DIR
YARN_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop
  • 启动 HDFS、YARN 集群:sbin/start-dfs.sh、sbin/start-yarn.sh
  • 执行示例程序,其中 --master yarn 指定了运行模式:
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10
posted @ 2024-07-15 00:16  Stitches  阅读(30)  评论(0)    收藏  举报