如何将 Spark 作业提交给 Apache Livy?
How to submit Spark jobs to Apache Livy?
我正在尝试了解如何将 Spark 作业提交给 Apache Livy。
我将以下 API 添加到我的 POM.xml:
<dependency>
<groupId>com.cloudera.livy</groupId>
<artifactId>livy-api</artifactId>
<version>0.3.0</version>
</dependency>
<dependency>
<groupId>com.cloudera.livy</groupId>
<artifactId>livy-scala-api_2.11</artifactId>
<version>0.3.0</version>
</dependency>
然后我在 Spark 中有以下代码,我想根据要求提交给 Livy。
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.sql.functions._
object Test {
def main(args: Array[String]) {
val spark = SparkSession.builder()
.appName("Test")
.master("local[*]")
.getOrCreate()
import spark.sqlContext.implicits._
implicit val sparkContext = spark.sparkContext
// ...
}
}
使用以下代码创建 LivyClient
实例并将应用程序代码上传到 Spark 上下文:
val client = new LivyClientBuilder()
.setURI(new URI(livyUrl))
.build()
try {
client.uploadJar(new File(testJarPath)).get()
client.submit(new Test())
} finally {
client.stop(true)
}
但是,问题是 Test
的代码不适用于 Apache Livy。
如何调整 Test
对象的代码才能 运行 client.submit(new Test())
?
您的 Test
class 需要实现 Livy 的 Job
接口并且您需要在 Test
class 中实现它的 call
方法,您可以从那里访问 jobContext/SparkContext。然后,您可以在 submit
方法
中传递 Test
的实例
您不必自己创建 SparkSession,Livy 会在集群上创建它,您可以在 call
方法中访问该上下文。
您可以在此处找到有关 Livy 程序化 API 的更多详细信息:https://livy.incubator.apache.org/docs/latest/programmatic-api.html
下面是测试 Class 的示例实现:
import com.cloudera.livy.{Job, JobContext}
class Test extends Job[Int]{
override def call(jc: JobContext): Int = {
val spark = jc.sparkSession()
// Do anything with SparkSession
1 //Return value
}
}
我正在尝试了解如何将 Spark 作业提交给 Apache Livy。
我将以下 API 添加到我的 POM.xml:
<dependency>
<groupId>com.cloudera.livy</groupId>
<artifactId>livy-api</artifactId>
<version>0.3.0</version>
</dependency>
<dependency>
<groupId>com.cloudera.livy</groupId>
<artifactId>livy-scala-api_2.11</artifactId>
<version>0.3.0</version>
</dependency>
然后我在 Spark 中有以下代码,我想根据要求提交给 Livy。
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.sql.functions._
object Test {
def main(args: Array[String]) {
val spark = SparkSession.builder()
.appName("Test")
.master("local[*]")
.getOrCreate()
import spark.sqlContext.implicits._
implicit val sparkContext = spark.sparkContext
// ...
}
}
使用以下代码创建 LivyClient
实例并将应用程序代码上传到 Spark 上下文:
val client = new LivyClientBuilder()
.setURI(new URI(livyUrl))
.build()
try {
client.uploadJar(new File(testJarPath)).get()
client.submit(new Test())
} finally {
client.stop(true)
}
但是,问题是 Test
的代码不适用于 Apache Livy。
如何调整 Test
对象的代码才能 运行 client.submit(new Test())
?
您的 Test
class 需要实现 Livy 的 Job
接口并且您需要在 Test
class 中实现它的 call
方法,您可以从那里访问 jobContext/SparkContext。然后,您可以在 submit
方法
Test
的实例
您不必自己创建 SparkSession,Livy 会在集群上创建它,您可以在 call
方法中访问该上下文。
您可以在此处找到有关 Livy 程序化 API 的更多详细信息:https://livy.incubator.apache.org/docs/latest/programmatic-api.html
下面是测试 Class 的示例实现:
import com.cloudera.livy.{Job, JobContext}
class Test extends Job[Int]{
override def call(jc: JobContext): Int = {
val spark = jc.sparkSession()
// Do anything with SparkSession
1 //Return value
}
}