#apache-spark #hadoop-yarn #azure-data-factory-2 #azure-hdinsight #.net-spark
#apache-spark #hadoop-yarn #azure-data-factory-2 #azure-hdinsight #.net-spark
Вопрос:
Я создал кластер HDInsight (v4, Spark 2.4) в Azure и хочу запустить Spark.Ne приложение в этом кластере с помощью действия Azure Data Factory v2. В действии Spark можно указать путь к jar, параметр —class и аргументы для передачи в приложение Spark. При запуске аргументам автоматически присваивается префикс «-args». Но возможность установить «—files» необходима, поскольку она сообщает spark-submit, какие файлы необходимо развернуть на рабочих узлах. В данном случае это для распространения dll с UDF-определениями. Эти файлы необходимы для запуска Spark. Поскольку UDF являются ключевым компонентом приложений Spark, я бы подумал, что это должно быть возможно.
Если я подключаюсь к кластеру по SSH и запускаю команду spark-submit напрямую и указываю параметр —files, приложение Spark работает, поскольку файлы распространяются на рабочие узлы.
spark-submit --deploy-mode cluster --master yarn --files wasbs://xxx@yyy.blob.core.windows.net/SparkJobs/mySparkApp.dll --class org.apache.spark.deploy.dotnet.DotnetRunner wasbs://xxx@yyy.blob.core.windows.net/SparkJobs/microsoft-spark-2.4.x-0.12.1.jar wasbs://xxx@yyy.blob.core.windows.net/SparkJobs/publish.zip mySparkApp
Это руководства, которые были соблюдены:
Комментарии:
1. Я не знаю, есть ли реальный ответ, может быть, вам нужно поднять его с помощью поддержки ms, поскольку adf звучит так, как будто это неправильно? Я бы сказал, что я нашел в ADF несколько вещей, которые он не мог выполнить, и в итоге я написал функцию Azure и вызвал ее из ADF.
2. Спасибо Edd. Теперь я использую Livy REST API непосредственно в кластере HDInsight для выполнения задания Spark. По иронии судьбы, Livy — это то, что использует активность ADF Spark под капотом. Но когда я использую livy напрямую, я могу указать параметр —files напрямую.
Ответ №1:
Вы можете передать аргументы / параметр скрипту Pyspark в Azure data Factory, как показано ниже:
Код:
{
"name": "SparkActivity",
"properties": {
"activities": [
{
"name": "Spark1",
"type": "HDInsightSpark",
"dependsOn": [],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"rootPath": "adftutorial/spark/script",
"entryFilePath": "WordCount_Spark.py",
"arguments": [
"--input-file",
"wasb://sampledata@chepra.blob.core.windows.net/data",
"--output-file",
"wasb://sampledata@chepra.blob.core.windows.net/results"
],
"sparkJobLinkedService": {
"referenceName": "AzureBlobStorage1",
"type": "LinkedServiceReference"
}
},
"linkedServiceName": {
"referenceName": "HDInsight",
"type": "LinkedServiceReference"
}
}
],
"annotations": []
},
"type": "Microsoft.DataFactory/factories/pipelines"
}
Как передавать аргументы в ADF:
Некоторые из примеров передачи параметров в Azure Data Factory:
{
"name": "SparkSubmit",
"properties": {
"description": "Submit a spark job",
"activities": [
{
"type": "HDInsightMapReduce",
"typeProperties": {
"className": "com.adf.spark.SparkJob",
"jarFilePath": "libs/spark-adf-job-bin.jar",
"jarLinkedService": "StorageLinkedService",
"arguments": [
"--jarFile",
"libs/sparkdemoapp_2.10-1.0.jar",
"--jars",
"/usr/hdp/current/hadoop-client/hadoop-azure-2.7.1.2.3.3.0-3039.jar,/usr/hdp/current/hadoop-client/lib/azure-storage-2.2.0.jar",
"--mainClass",
"com.adf.spark.demo.Demo",
"--master",
"yarn-cluster",
"--driverMemory",
"2g",
"--driverExtraClasspath",
"/usr/lib/hdinsight-logging/*",
"--executorCores",
"1",
"--executorMemory",
"4g",
"--sparkHome",
"/usr/hdp/current/spark-client",
"--connectionString",
"DefaultEndpointsProtocol=https;AccountName=<YOUR_ACCOUNT>;AccountKey=<YOUR_KEY>",
"input=wasb://input@<YOUR_ACCOUNT>.blob.core.windows.net/data",
"output=wasb://output@<YOUR_ACCOUNT>.blob.core.windows.net/results"
]
},
"inputs": [
{
"name": "input"
}
],
"outputs": [
{
"name": "output"
}
],
"policy": {
"executionPriorityOrder": "OldestFirst",
"timeout": "01:00:00",
"concurrency": 1,
"retry": 1
},
"scheduler": {
"frequency": "Day",
"interval": 1
},
"name": "Spark Launcher",
"description": "Submits a Spark Job",
"linkedServiceName": "HDInsightLinkedService"
}
],
"start": "2015-11-16T00:00:01Z",
"end": "2015-11-16T23:59:00Z",
"isPaused": false,
"pipelineMode": "Scheduled"
}
}
Комментарии:
1. Привет, CHEEKATLAPRADEEP-MSFT, спасибо за ваш ответ. К сожалению, как я пишу в своем исходном сообщении, используя аргументы «Аргументы автоматически имеют префикс «-args» при запуске, что означает, что он будет выглядеть как -args «—files xyz», а не флаг «первого» уровня на том же уровне, что и —class (который вы можете установить напрямуюс параметрами Script / Jar.
Ответ №2:
Вы пробовали загружать эти файлы в папку files вашего хранилища Sparkjoblink Service? Согласно https://learn.microsoft.com/en-us/azure/data-factory/transform-data-using-spark , «Все файлы в папке files загружаются и помещаются в рабочий каталог исполнителя», поэтому я загрузил publish.zip в папку «файлы» и, похоже, мой Spark.NET иов работает после этого.
Например, для активности ADF spark mcirosoft-spark-2-4_2.11-1.0.0.jar был сохранен в /binary/spark/ моей учетной записи хранения, как показано ниже: