使用 Intellij IDEA 在 Maven 中使用 Scala 实现 Spark 的工作流和调度框架
Workflow and Scheduling Framework for Spark with Scala in Maven Done with Intellij IDEA
我用 Scala 创建了一个 spark 项目。它是一个在 POM 中配置了所有依赖项的 Maven 项目。
我将 Spark 用作 ETL。源是由 API 生成的文件,在 spark 中进行各种转换,然后将其加载到 cassandra。
是否有任何工作流软件,可以使用 jar 自动处理电子邮件触发、成功或失败的作业流程。
有人能帮帮我吗……Airflow 是否可以用于此目的,我使用了 SCALA 而不是 Python
请分享您的想法。
Spark 中没有可以提供帮助的内置机制。 cron 工作对你的情况来说似乎是合理的。如果您发现自己不断地向预定作业添加依赖项,请尝试 Azkaban
shell 脚本的一个这样的例子是:-
#!/bin/bash
cd /locm/spark_jobs
export SPARK_HOME=/usr/hdp/2.2.0.0-2041/spark
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HADOOP_USER_NAME=hdfs
export HADOOP_GROUP=hdfs
#export SPARK_CLASSPATH=$SPARK_CLASSPATH:/locm/spark_jobs/configs/*
CLASS=
MASTER=
ARGS=
CLASS_ARGS=
echo "Running $CLASS With Master: $MASTER With Args: $ARGS And Class Args: $CLASS_ARGS"
$SPARK_HOME/bin/spark-submit --class $CLASS --master $MASTER --num-executors 4 --executor-cores 4 "application jar file"
您甚至可以尝试使用 spark-launcher,它可用于以编程方式启动 spark 应用程序:-
首先创建一个示例 spark 应用程序并为其构建一个 jar 文件。
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object SparkApp extends App{
val conf=new SparkConf().setMaster("local[*]").setAppName("spark-app")
val sc=new SparkContext(conf)
val rdd=sc.parallelize(Array(2,3,2,1))
rdd.saveAsTextFile("result")
sc.stop()
}
这是我们简单的 spark 应用程序,使用 sbt assembly 为这个应用程序制作一个 jar,现在我们制作一个 scala 应用程序,通过它启动这个 spark 应用程序,如下所示:
import org.apache.spark.launcher.SparkLauncher
object Launcher extends App {
val spark = new SparkLauncher()
.setSparkHome("/home/knoldus/spark-1.4.0-bin-hadoop2.6")
.setAppResource("/home/knoldus/spark_launcher-assembly-1.0.jar")
.setMainClass("SparkApp")
.setMaster("local[*]")
.launch();
spark.waitFor();
}
在上面的代码中,我们使用了 SparkLauncher 对象并为其设置了值
setSparkHome(“/home/knoldus/spark-1.4.0-bin-hadoop2.6”) 用于设置spark home,内部调用spark submit。
.setAppResource(“/home/knoldus/spark_launcher-assembly-1.0.jar”) 用于指定我们的spark应用程序的jar。
.setMainClass(“SparkApp”) spark程序即驱动程序的入口点。
.setMaster(“local[*]”) 设置 master 的地址,现在我们 运行 它在本地机器上开始。
.launch() 只是启动我们的 spark 应用程序。
这是最低要求,您还可以设置许多其他配置,如传递参数、添加 jar 、设置配置等。
我用 Scala 创建了一个 spark 项目。它是一个在 POM 中配置了所有依赖项的 Maven 项目。
我将 Spark 用作 ETL。源是由 API 生成的文件,在 spark 中进行各种转换,然后将其加载到 cassandra。
是否有任何工作流软件,可以使用 jar 自动处理电子邮件触发、成功或失败的作业流程。
有人能帮帮我吗……Airflow 是否可以用于此目的,我使用了 SCALA 而不是 Python
请分享您的想法。
Spark 中没有可以提供帮助的内置机制。 cron 工作对你的情况来说似乎是合理的。如果您发现自己不断地向预定作业添加依赖项,请尝试 Azkaban
shell 脚本的一个这样的例子是:-
#!/bin/bash
cd /locm/spark_jobs
export SPARK_HOME=/usr/hdp/2.2.0.0-2041/spark
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HADOOP_USER_NAME=hdfs
export HADOOP_GROUP=hdfs
#export SPARK_CLASSPATH=$SPARK_CLASSPATH:/locm/spark_jobs/configs/*
CLASS=
MASTER=
ARGS=
CLASS_ARGS=
echo "Running $CLASS With Master: $MASTER With Args: $ARGS And Class Args: $CLASS_ARGS"
$SPARK_HOME/bin/spark-submit --class $CLASS --master $MASTER --num-executors 4 --executor-cores 4 "application jar file"
您甚至可以尝试使用 spark-launcher,它可用于以编程方式启动 spark 应用程序:-
首先创建一个示例 spark 应用程序并为其构建一个 jar 文件。
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object SparkApp extends App{
val conf=new SparkConf().setMaster("local[*]").setAppName("spark-app")
val sc=new SparkContext(conf)
val rdd=sc.parallelize(Array(2,3,2,1))
rdd.saveAsTextFile("result")
sc.stop()
}
这是我们简单的 spark 应用程序,使用 sbt assembly 为这个应用程序制作一个 jar,现在我们制作一个 scala 应用程序,通过它启动这个 spark 应用程序,如下所示:
import org.apache.spark.launcher.SparkLauncher
object Launcher extends App {
val spark = new SparkLauncher()
.setSparkHome("/home/knoldus/spark-1.4.0-bin-hadoop2.6")
.setAppResource("/home/knoldus/spark_launcher-assembly-1.0.jar")
.setMainClass("SparkApp")
.setMaster("local[*]")
.launch();
spark.waitFor();
}
在上面的代码中,我们使用了 SparkLauncher 对象并为其设置了值
setSparkHome(“/home/knoldus/spark-1.4.0-bin-hadoop2.6”) 用于设置spark home,内部调用spark submit。
.setAppResource(“/home/knoldus/spark_launcher-assembly-1.0.jar”) 用于指定我们的spark应用程序的jar。
.setMainClass(“SparkApp”) spark程序即驱动程序的入口点。
.setMaster(“local[*]”) 设置 master 的地址,现在我们 运行 它在本地机器上开始。
.launch() 只是启动我们的 spark 应用程序。
这是最低要求,您还可以设置许多其他配置,如传递参数、添加 jar 、设置配置等。