Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Saiba como usar o Apache Livy, a API REST do Apache Spark, que é usada para enviar trabalhos remotos para um cluster do Azure HDInsight Spark. Para obter documentação detalhada, consulte Apache Livy.
Você pode usar o Livy para executar shells interativos do Spark ou enviar trabalhos em lote para serem executados no Spark. Este artigo fala sobre o uso do Livy para enviar trabalhos em lote. Os trechos neste artigo utilizam cURL para efetuar chamadas de API REST para o endpoint do Livy Spark.
Pré-requisitos
Um cluster do Apache Spark no HDInsight. Para obter instruções, veja Criar clusters do Apache Spark no Azure HDInsight.
Enviar um trabalho em lote com Apache Livy Spark
Antes de submeter um trabalho em lote, deve-se carregar o ficheiro jar da aplicação no armazenamento associado ao cluster. Você pode usar AzCopy, um utilitário de linha de comando, para fazer isso. Existem vários outros clientes que você pode usar para carregar dados. Você pode encontrar mais sobre eles em Carregar dados para trabalhos do Apache Hadoop no HDInsight.
curl -k --user "admin: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"
Exemplos
Se o arquivo jar estiver no armazenamento de cluster (WASBS)
curl -k --user "admin:mypassword1!" -v -H "Content-Type: application/json" -X POST -d '{ "file":"wasbs://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 você quiser passar o nome do arquivo jar e o nome da classe como parte de um arquivo de entrada (neste exemplo, 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 do Livy Spark em execução no cluster
Sintaxe:
curl -k --user "admin:password" -v -X GET "https://<spark_cluster_name>.azurehdinsight.net/livy/batches"
Exemplos
Se você quiser recuperar todos os lotes do Livy Spark em execução no cluster:
curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches"Se você quiser recuperar um lote específico com um determinado ID de lote
curl -k --user "admin:mypassword1!" -v -X GET "https://mysparkcluster.azurehdinsight.net/livy/batches/{batchId}"
Excluir um trabalho em lote do Livy Spark
curl -k --user "admin:mypassword1!" -v -X DELETE "https://<spark_cluster_name>.azurehdinsight.net/livy/batches/{batchId}"
Exemplo
A eliminar um trabalho em lote com o ID 5.
curl -k --user "admin:mypassword1!" -v -X DELETE "https://mysparkcluster.azurehdinsight.net/livy/batches/5"
Livy Spark e alta disponibilidade
O Livy fornece alta disponibilidade para trabalhos do Spark em execução no cluster. Eis alguns exemplos.
- Se o serviço Livy ficar inativo depois que você enviar um trabalho remotamente para um cluster do Spark, o trabalho continuará a ser executado em segundo plano. Quando Livy está novamente operacional, ele restaura o estado da tarefa e restitui o relatório.
- Os Notebooks Jupyter para HDInsight são alimentados pela Livy no back-end. Se um bloco de anotações estiver executando um trabalho do Spark e o serviço Livy for reiniciado, o bloco de anotações continuará a executar as células de código.
MOSTRE-ME UM EXEMPLO
Nesta seção, examinamos exemplos de como usar o Livy Spark para enviar um trabalho em lote, monitorar o progresso do trabalho e excluí-lo. O aplicativo que usamos neste exemplo é o desenvolvido no artigo Criar um aplicativo Scala autônomo e para ser executado no cluster HDInsight Spark. Os passos aqui assumem:
- Já copiou o ficheiro jar da aplicação para a conta de armazenamento associada ao cluster.
- Você tem o CuRL instalado no computador onde está tentando essas etapas.
Execute as seguintes etapas:
Para facilitar o uso, defina variáveis de ambiente. Este exemplo é baseado em um ambiente Windows, revise variáveis conforme necessário para seu ambiente. Substitua
CLUSTERNAME, ePASSWORDcom os valores apropriados.set clustername=CLUSTERNAME set password=PASSWORDVerifique se o Livy Spark está em execução no cluster. Podemos fazer isso obtendo uma lista de lotes em execução. Se você estiver executando um trabalho usando o Livy pela primeira vez, a saída deverá retornar zero.
curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches"Você deve obter uma saída semelhante ao seguinte trecho:
< 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 intactObserve como a última linha na saída diz total:0, o que sugere que não há lotes em execução.
Vamos agora enviar um trabalho em lote. O trecho a seguir usa um arquivo de entrada (input.txt) para passar o nome jar e o nome da classe como parâmetros. Se estiver a executar estes passos a partir de um computador Windows, utilizar um ficheiro de introdução é a abordagem recomendada.
curl -k --user "admin:%password%" -v -H "Content-Type: application/json" -X POST --data @C:\Temp\input.txt "https://%clustername%.azurehdinsight.net/livy/batches" -H "X-Requested-By: admin"Os parâmetros no input.txt de arquivo são definidos da seguinte forma:
{ "file":"wasbs:///example/jars/SparkSimpleApp.jar", "className":"com.microsoft.spark.example.WasbIOTest" }Você verá uma saída semelhante ao seguinte trecho:
< 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 intactObserve como a última linha da saída diz state:starting. Também diz , id:0. Aqui, 0 é o ID do lote.
Agora você pode recuperar o status desse lote específico usando o ID do lote.
curl -k --user "admin:%password%" -v -X GET "https://%clustername%.azurehdinsight.net/livy/batches/0"Você verá uma saída semelhante ao seguinte trecho:
< 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://myspar.lpel.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 intactA saída agora mostra state:success, o que sugere que o trabalho foi concluído com êxito.
Se desejar, agora você pode excluir o lote.
curl -k --user "admin:%password%" -v -X DELETE "https://%clustername%.azurehdinsight.net/livy/batches/0"Você verá um resultado semelhante ao seguinte trecho:
< 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 intactA última linha da saída mostra que o lote foi excluído com êxito. Excluir um trabalho, enquanto ele está em execução, também mata o trabalho. Se você excluir um trabalho que foi concluído, com êxito ou não, ele excluirá as informações do trabalho completamente.
Atualizações para a configuração do Livy a partir da versão HDInsight 3.5
Os clusters HDInsight 3.5 e superiores, por padrão, desabilitam o uso de caminhos de arquivos locais para acessar arquivos de dados de exemplo ou jars. Recomendamos que utilize o caminho wasbs:// para aceder a jars ou ficheiros de dados de exemplo do cluster.
Enviando trabalhos do Livy para um cluster em uma rede virtual do Azure
Se você se conectar a um cluster HDInsight Spark de dentro de uma Rede Virtual do Azure, poderá se conectar diretamente ao Livy no cluster. Nesse caso, a URL para o endpoint Livy é http://<IP address of the headnode>:8998/batches. Aqui, 8998 é a porta na qual o Livy é executado no headnode do cluster. Para obter mais informações sobre como acessar serviços em portas não públicas, consulte Portas usadas pelos serviços Apache Hadoop no HDInsight.