什么是星火作业?

What is Spark Job ?

我已经完成了 spark 安装并执行了几个设置主节点和工作节点的测试用例。也就是说,我对 Spark 上下文(而不是 SparkContext)中的工作到底意味着什么非常困惑。我有以下问题

我读了Spark documention,但我还是不太清楚。

话虽如此,我的实现是{以编程方式}编写 spark 作业,这将是一个 spark-submit。

如果可能,请提供一些示例。这将非常有帮助。

注意: 请不要post 触发链接,因为我已经试过了。尽管这些问题听起来很幼稚,但我仍然需要更清楚地理解。

好吧,术语总是很困难,因为它取决于上下文。很多时候,你可以习惯"submit a job to a cluster",对于spark来说就是提交一个驱动程序。

也就是说,Spark 对 "job" 有自己的定义,直接来自词汇表:

Job A parallel computation consisting of multiple tasks that gets spawned in response to a Spark action (e.g. save, collect); you'll see this term used in the driver's logs.

在这种情况下,假设您需要执行以下操作:

  1. 将包含人名和地址的文件加载到 RDD1
  2. 将包含人名和电话的文件加载到 RDD2
  3. 通过名称连接RDD1和RDD2,得到RDD3
  4. 在 RDD3 上映射,为每个人作为 RDD4
  5. 获得一张漂亮的 HTML 展示卡
  6. 将 RDD4 保存到文件。
  7. 映射 RDD1 以从地址中提取邮政编码以获得 RDD5
  8. 在 RDD5 上聚合以计算每个邮政编码上有多少人生活在 RDD6
  9. 收集 RDD6 并将这些统计信息打印到标准输出。

所以,

  1. 驱动程序就是整段代码,运行全部8个步骤。
  2. 在第 5 步制作整个 HTML 卡组是一个 工作 (很清楚,因为我们使用 保存 动作,不是转换)。与步骤 8collect 相同
  3. 其他步骤将组织成 阶段,每个作业都是一系列阶段的结果。对于简单的事情,作业可以有一个阶段,但需要重新分区数据(例如,步骤 3 中的连接)或任何破坏数据局部性的事情通常会导致出现更多阶段。您可以将阶段视为产生中间结果的计算,这些结果实际上可以持久化。例如,我们可以持久化 RDD1,因为我们将多次使用它,避免重新计算。
  4. 以上所有 3 个基本上都在谈论如何打破给定算法的 逻辑。相比之下,任务是特定的数据,它将经历给定的阶段,在给定的执行者。

希望它能让事情更清楚;-)

嘿,这是我以前做过的,希望对你有用:

#!/bin/bash
# Hadoop and Server Variables
HADOOP="hadoop fs"
HDFS_HOME="hdfs://ha-edge-group/user/max"
LOCAL_HOME="/home/max"

# Cluster Variables
DRIVER_MEM="10G"
EXECUTOR_MEM="10G"
CORES="5"
EXECUTORS="15"

# Script Arguments
SCRIPT="availability_report.py" # Arg[0]
APPNAME="Availability Report" # arg[1]

DAY=`date -d yesterday +%Y%m%d`

for HOUR in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
do
        #local directory to getmerge to
        LOCAL_OUTFILE="$LOCAL_HOME/availability_report/data/$DAY/$HOUR.txt"

        # Script arguments
        HDFS_SOURCE="webhdfs://1.2.3.4:0000/data/lbs_ndc/raw_$DAY'_'$HOUR" # arg[2]
        HDFS_CELLS="webhdfs://1.2.3.4:0000/data/cells/CELLID_$DAY.txt" # arg[3]
        HDFS_OUT_DIR="$HDFS_HOME/availability/$DAY/$HOUR" # arg[4]

        spark-submit \
        --master yarn-cluster \
        --driver-memory $DRIVER_MEM \
        --executor-memory $EXECUTOR_MEM \
        --executor-cores $CORES \
        --num-executors $EXECUTORS \
        --conf spark.scheduler.mode=FAIR \
        $SCRIPT $APPNAME $HDFS_SOURCE $HDFS_CELLS $HDFS_OUT_DIR

        $HADOOP -getmerge $HDFS_OUT_DIR $LOCAL_OUTFILE
done