通过 .NET Azure HDInsight 提交 Spark Scala (.jar) 作业 API
Submitting a Spark Scala (.jar) job via .NET Azure HDInsight API
我一直在尝试通过 .NET 中的 azure hdinsight api 向我的 spark 集群提交作业。我已经通过 Intellij Azure 插件 -> 向 HDInsight 提交 Spark 应用程序来检查我的 scala 代码是否有效,但是当通过 .net api 提交作业时我无法使其正常工作。 (可能是作业提交类型不正确?)我得到了一个jobId和一个jobComplete状态,但它没有正确写入输出。
斯卡拉:
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object HDInsightScala{
def main (arg: Array[String]): Unit = {
val conf = new SparkConf().setAppName("HDInsightScala")
val sc = new SparkContext(conf)
val rdd = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
//find the rows which have only one digit in the 7th column in the CSV
val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1)
rdd1.saveAsTextFile("wasbs:///myOutputs")
}
}
C#:
public void runCurrentJob()
{
List<string> args = new List<string> {}; // No parameters
// JarFile leads to "wasbs:///tmp/default_artifact.jar"
// JarClass is the name of my main class -> "HDInsightScala"
var parameters = new MapReduceJobSubmissionParameters
{
JarFile = "wasbs:///"+ConfigurationManager.AppSettings["jarPath"],
JarClass = ConfigurationManager.AppSettings["mainClassName"],
//Arguments = args
};
var jobResponse = hdiJobManager.JobManagement.SubmitMapReduceJob(parameters);
var jobID = jobResponse.JobSubmissionJsonResponse.Id;
MessageBox.Show("My job ID is " + jobID + "\n wait for completion . . .");
var jobDetail = hdiJobManager.JobManagement.GetJob(jobID).JobDetail;
while (!jobDetail.Status.JobComplete)
{
Thread.Sleep(1000);
jobDetail = hdiJobManager.JobManagement.GetJob(jobID).JobDetail;
}
MessageBox.Show("JOB IS COMPLETE.");
}
根据你的描述,根据我的理解,你能够通过 Intellij Azure Plugin
将你的 scala 代码作为 spark 作业提交到 HDInsight Spark Cluster 并且有效。
根据官方文档Use HDInsight Tools in Azure Toolkit for IntelliJ to create Spark applications for HDInsight Spark Linux cluster,似乎IntelliJ插件会帮助打包你的scala代码并将这些作业文件上传到集群,然后将作业提交给yarn manager到运行。
因此,要解决您的问题,我认为第一步是检查您是否已将 Scala 代码打包到作业并将它们上传到 HDFS。其次,您可以参考 REST API https://docs.microsoft.com/en-us/rest/api/hdinsightspark/hdinsight-spark-batch-job#create-a-new-batch-job
尝试通过某些 HTTP 客户端(例如 postman
)将作业提交到 运行。
然后,您可以按照上述故障排除步骤调试和改进您的 C# 代码,使其正常运行。希望对你有帮助。
我一直在尝试通过 .NET 中的 azure hdinsight api 向我的 spark 集群提交作业。我已经通过 Intellij Azure 插件 -> 向 HDInsight 提交 Spark 应用程序来检查我的 scala 代码是否有效,但是当通过 .net api 提交作业时我无法使其正常工作。 (可能是作业提交类型不正确?)我得到了一个jobId和一个jobComplete状态,但它没有正确写入输出。
斯卡拉:
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object HDInsightScala{
def main (arg: Array[String]): Unit = {
val conf = new SparkConf().setAppName("HDInsightScala")
val sc = new SparkContext(conf)
val rdd = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
//find the rows which have only one digit in the 7th column in the CSV
val rdd1 = rdd.filter(s => s.split(",")(6).length() == 1)
rdd1.saveAsTextFile("wasbs:///myOutputs")
}
}
C#:
public void runCurrentJob()
{
List<string> args = new List<string> {}; // No parameters
// JarFile leads to "wasbs:///tmp/default_artifact.jar"
// JarClass is the name of my main class -> "HDInsightScala"
var parameters = new MapReduceJobSubmissionParameters
{
JarFile = "wasbs:///"+ConfigurationManager.AppSettings["jarPath"],
JarClass = ConfigurationManager.AppSettings["mainClassName"],
//Arguments = args
};
var jobResponse = hdiJobManager.JobManagement.SubmitMapReduceJob(parameters);
var jobID = jobResponse.JobSubmissionJsonResponse.Id;
MessageBox.Show("My job ID is " + jobID + "\n wait for completion . . .");
var jobDetail = hdiJobManager.JobManagement.GetJob(jobID).JobDetail;
while (!jobDetail.Status.JobComplete)
{
Thread.Sleep(1000);
jobDetail = hdiJobManager.JobManagement.GetJob(jobID).JobDetail;
}
MessageBox.Show("JOB IS COMPLETE.");
}
根据你的描述,根据我的理解,你能够通过 Intellij Azure Plugin
将你的 scala 代码作为 spark 作业提交到 HDInsight Spark Cluster 并且有效。
根据官方文档Use HDInsight Tools in Azure Toolkit for IntelliJ to create Spark applications for HDInsight Spark Linux cluster,似乎IntelliJ插件会帮助打包你的scala代码并将这些作业文件上传到集群,然后将作业提交给yarn manager到运行。
因此,要解决您的问题,我认为第一步是检查您是否已将 Scala 代码打包到作业并将它们上传到 HDFS。其次,您可以参考 REST API https://docs.microsoft.com/en-us/rest/api/hdinsightspark/hdinsight-spark-batch-job#create-a-new-batch-job
尝试通过某些 HTTP 客户端(例如 postman
)将作业提交到 运行。
然后,您可以按照上述故障排除步骤调试和改进您的 C# 代码,使其正常运行。希望对你有帮助。