通过 .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# 代码,使其正常运行。希望对你有帮助。