Use a API REST do Apache Spark para enviar trabalhos remotos para um cluster do HDInsight SparkUse Apache Spark REST API to submit remote jobs to an HDInsight Spark cluster

Saiba como usar Apache Livy, a API REST do Apache Spark, que é usado para enviar trabalhos remotos para um cluster do Azure HDInsight Spark.Learn how to use Apache Livy, the Apache Spark REST API, which is used to submit remote jobs to an Azure HDInsight Spark cluster. Para obter a documentação detalhada, confira https://livy.incubator.apache.org/.For detailed documentation, see https://livy.incubator.apache.org/.

Você pode usar a Livy para executar shells interativos do Spark ou enviar trabalhos em lotes a serem executados no Spark.You can use Livy to run interactive Spark shells or submit batch jobs to be run on Spark. Este artigo aborda como usar a Livy para enviar trabalhos em lotes.This article talks about using Livy to submit batch jobs. Os snippets nesse artigo usam cURL para fazer chamadas à API REST para o ponto de extremidade da Livy Spark.The snippets in this article use cURL to make REST API calls to the Livy Spark endpoint.

Pré-requisitosPrerequisites

Enviar um trabalho em lotes do Apache Livy SparkSubmit an Apache Livy Spark batch job

Antes de enviar um trabalho em lotes, você deve carregar o jar do aplicativo no armazenamento de cluster associado ao cluster.Before you submit a batch job, you must upload the application jar on the cluster storage associated with the cluster. Você pode usar AzCopy, um utilitário de linha de comando, para fazer isso.You can use AzCopy, a command-line utility, to do so. Há muitos outros clientes que podem ser usados para carregar dados.There are various other clients you can use to upload data. É possível saber mais sobre eles em Carregar dados para trabalhos do Apache Hadoop no HDInsight.You can find more about them at Upload data for Apache Hadoop jobs in HDInsight.

curl -k --user "<hdinsight user>:<user password>" -v -H "Content-Type: application/json" -X POST -d '{ "file":"<path to application jar>", "className":"<classname in jar>" }' 'https://<spark_cluster_name>.azurehdinsight.net/livy/batches' -H "X-Requested-By: admin"

ExemplosExamples

  • Se o arquivo jar estiver no armazenamento de cluster (WASB)If the jar file is on the cluster storage (WASB)

    curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"wasb://mycontainer@mystorageaccount.blob.core.windows.net/data/SparkSimpleTest.jar", "className":"com.microsoft.spark.test.SimpleFile" }' "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    
  • Se quiser passar o nome do arquivo jar e o nome da classe como parte de um arquivo de entrada (nesse exemplo, input.txt)If you want to pass the jar filename and the classname as part of an input file (in this example, input.txt)

    curl -k  --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

Obter informações sobre lotes Livy Spark em execução no clusterGet information on Livy Spark batches running on the cluster

Sintaxe:Syntax:

curl -k --user "<hdinsight user>:<user password>" -v -X GET "https://<spark_cluster_name>.azurehdinsight.net/livy/batches"

ExemplosExamples

  • Se quiser recuperar todos os lotes Livy spark em execução no cluster:If you want to retrieve all the Livy Spark batches running on the cluster:

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches" 
    
  • Se você quiser recuperar um lote específico com uma ID de lote determinadaIf you want to retrieve a specific batch with a given batch ID

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches/{batchId}"
    

Excluir um trabalho em lotes do Livy SparkDelete a Livy Spark batch job

curl -k --user "<hdinsight user>:<user password>" -v -X DELETE "https://<spark_cluster_name>.azurehdinsight.net/livy/batches/{batchId}"

ExemploExample

Excluindo um trabalho em lotes com a ID de lote 5.Deleting a batch job with batch ID 5.

curl -k --user "admin:mypassword1!" -v -X DELETE "https://mysparkcluster.azurehdinsight.net/livy/batches/5"

Livy Spark e alta disponibilidadeLivy Spark and high-availability

O Livy fornece alta disponibilidade para trabalhos Spark em execução no cluster.Livy provides high-availability for Spark jobs running on the cluster. Aqui estão alguns exemplos.Here is a couple of examples.

  • Se o serviço Livy falhar depois de você enviar um trabalho remotamente a um cluster Spark, o trabalho continuará em execução em segundo plano.If the Livy service goes down after you have submitted a job remotely to a Spark cluster, the job continues to run in the background. Quando o Livy for backup, ele restaurará o status do trabalho e enviará o relatório de volta.When Livy is back up, it restores the status of the job and reports it back.
  • Os blocos de notas Jupyter para HDInsight são ativados pelo Livy no back-end.Jupyter notebooks for HDInsight are powered by Livy in the backend. Se um bloco de anotações estiver executando um trabalho do Spark e o serviço Livy for reiniciado, o bloco de notas continuará a executar as células de código.If a notebook is running a Spark job and the Livy service gets restarted, the notebook continues to run the code cells.

Mostrar um exemploShow me an example

Nesta seção, vamos examinar exemplos sobre como usar a Livy Spark para enviar um trabalho em lotes, monitorar o progresso do trabalho e excluir o trabalho.In this section, we look at examples to use Livy Spark to submit batch job, monitor the progress of the job, and then delete it. O aplicativo que usamos neste exemplo é o desenvolvido no artigo Criar um aplicativo Scala autônomo para ser executado no cluster Spark no HDInsight.The application we use in this example is the one developed in the article Create a standalone Scala application and to run on HDInsight Spark cluster. As etapas aqui supõem que:The steps here assume that:

  • Você já copiou o jar do aplicativo para a conta de armazenamento associada ao cluster.You have already copied over the application jar to the storage account associated with the cluster.
  • Você tem o CuRL instalado no computador, onde está executando essas etapas.You have CuRL installed on the computer where you are trying these steps.

Execute as seguintes etapas:Perform the following steps:

  1. Primeiramente, vamos verificar se a Livy Spark está em execução no cluster.Let us first verify that Livy Spark is running on the cluster. Podemos fazer isso obtendo uma lista de lotes em execução.We can do so by getting a list of running batches. Se estiver executando um trabalho usando a Livy pela primeira vez, a saída deverá ser zero.If you are running a job using Livy for the first time, the output should return zero.

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"
    

    Você deverá obter uma saída semelhante ao seguinte snippet:You should get an output similar to the following snippet:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:47:53 GMT
    < Content-Length: 34
    <
    {"from":0,"total":0,"sessions":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Observe que a última linha da saída informa total:0, o que sugere que não há lotes em execução.Notice how the last line in the output says total:0, which suggests no running batches.

  2. Agora vamos enviar um trabalho em lotes.Let us now submit a batch job. O snippet a seguir usa um arquivo de entrada (input.txt) para passar o nome do jar e o nome de classe como parâmetros.The following snippet uses an input file (input.txt) to pass the jar name and the class name as parameters. Se você estiver executando essas etapas em um computador Windows, usar um arquivo de entrada será a abordagem recomendada.If you are running these steps from a Windows computer, using an input file is the recommended approach.

    curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://mysparkcluster.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"
    

    Os parâmetros no arquivo input.txt são definidos da seguinte maneira:The parameters in the file input.txt are defined as follows:

    { "file":"wasb:///example/jars/SparkSimpleApp.jar", "className":"com.microsoft.spark.example.WasbIOTest" }
    

    Você deverá ver uma saída semelhante ao seguinte snippet:You should see an output similar to the following snippet:

    < HTTP/1.1 201 Created
    < Content-Type: application/json; charset=UTF-8
    < Location: /0
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:51:30 GMT
    < Content-Length: 36
    <
    {"id":0,"state":"starting","log":[]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Observe que a última linha da saída informa state:starting.Notice how the last line of the output says state:starting. Assim como, id:0.It also says, id:0. Aqui, 0 é a ID do lote.Here, 0 is the batch ID.

  3. Agora você pode recuperar o status desse lote específico usando a ID do lote.You can now retrieve the status of this specific batch using the batch ID.

    curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches/0"
    

    Você deverá ver uma saída semelhante ao seguinte snippet:You should see an output similar to the following snippet:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Fri, 20 Nov 2015 23:54:42 GMT
    < Content-Length: 509
    <
    {"id":0,"state":"success","log":["\t diagnostics: N/A","\t ApplicationMaster host: 10.0.0.4","\t ApplicationMaster RPC port: 0","\t queue: default","\t start time: 1448063505350","\t final status: SUCCEEDED","\t tracking URL: http://hn0-myspar.lpel1gnnvxne3gwzqkfq5u5uzh.jx.internal.cloudapp.net:8088/proxy/application_1447984474852_0002/","\t user: root","15/11/20 23:52:47 INFO Utils: Shutdown hook called","15/11/20 23:52:47 INFO Utils: Deleting directory /tmp/spark-b72cd2bf-280b-4c57-8ceb-9e3e69ac7d0c"]}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    Agora a saída mostra state:success, o que sugere que o trabalho foi concluído com êxito.The output now shows state:success, which suggests that the job was successfully completed.

  4. Se quiser, você pode excluir o lote.If you want, you can now delete the batch.

    curl -k --user "admin:mypassword1!" -v -X DELETE "https://mysparkcluster.azurehdinsight.net/livy/batches/0"
    

    Você deverá ver uma saída semelhante ao seguinte snippet:You should see an output similar to the following snippet:

    < HTTP/1.1 200 OK
    < Content-Type: application/json; charset=UTF-8
    < Server: Microsoft-IIS/8.5
    < X-Powered-By: ARR/2.5
    < X-Powered-By: ASP.NET
    < Date: Sat, 21 Nov 2015 18:51:54 GMT
    < Content-Length: 17
    <
    {"msg":"deleted"}* Connection #0 to host mysparkcluster.azurehdinsight.net left intact
    

    A última linha da saída mostra que o lote foi excluído com êxito.The last line of the output shows that the batch was successfully deleted. Excluir um trabalho, enquanto ele está em execução, também encerra o trabalho.Deleting a job, while it is running, also kills the job. Se você excluir um trabalho que foi concluído, com êxito ou não, essa ação excluirá por completo as informações sobre o trabalho.If you delete a job that has completed, successfully or otherwise, it deletes the job information completely.

Atualizações para a configuração do Livy começando com a versão do HDInsight 3.5Updates to Livy configuration starting with HDInsight 3.5 version

Os clusters HDInsight 3.5 e posteriores, por padrão, desabilitam o uso de caminhos de arquivos locais para acessar arquivos de dados de amostra ou jars.HDInsight 3.5 clusters and above, by default, disable use of local file paths to access sample data files or jars. Incentivamos o uso do caminho wasb:// em vez disso, para acessar os jars ou os arquivos de dados de exemplo do cluster.We encourage you to use the wasb:// path instead to access jars or sample data files from the cluster.

Enviar trabalhos da Livy para um cluster em uma rede virtual do AzureSubmitting Livy jobs for a cluster within an Azure virtual network

Se você se conectar a um cluster do HDInsight Spark de dentro de uma Rede Virtual do Azure, você poderá se conectar diretamente à Livy no cluster.If you connect to an HDInsight Spark cluster from within an Azure Virtual Network, you can directly connect to Livy on the cluster. Nesse caso, a URL de ponto de extremidade da Livy é http://<IP address of the headnode>:8998/batches.In such a case, the URL for Livy endpoint is http://<IP address of the headnode>:8998/batches. Aqui, 8998 é a porta na qual a Livy é executada em um nó de cabeçalho do cluster.Here, 8998 is the port on which Livy runs on the cluster headnode. Para obter mais informações sobre como acessar serviços em portas não públicas, consulte Portas usadas pelos serviços de Apache Hadoop no HDInsight.For more information on accessing services on non-public ports, see Ports used by Apache Hadoop services on HDInsight.

Próximas etapasNext steps