Executar o Apache Oozie em clusters do Azure HDInsight com o Pacote de Segurança Enterprise
O Apache Oozie é um sistema de coordenação e fluxo de trabalho que gere tarefas do Apache Hadoop. O Oozie está integrado na pilha do Hadoop e suporta as seguintes tarefas:
- Apache MapReduce
- Apache Pig
- Apache Hive
- Apache Sqoop
Também pode utilizar o Oozie para agendar tarefas específicas de um sistema, como programas Java ou scripts de shell.
Pré-requisito
Um cluster do Azure HDInsight Hadoop com o Pacote de Segurança Enterprise (ESP). Veja Configurar clusters do HDInsight com ESP.
Nota
Para obter instruções detalhadas sobre como utilizar o Oozie em clusters não ESP, veja Utilizar fluxos de trabalho do Apache Oozie no Azure HDInsight baseado em Linux.
Ligar a um cluster esp
Para obter mais informações sobre o Secure Shell (SSH), veja Ligar ao HDInsight (Hadoop) com SSH.
Ligue-se ao cluster do HDInsight através de SSH:
ssh [DomainUserName]@<clustername>-ssh.azurehdinsight.net
Para verificar a autenticação Kerberos com êxito, utilize o
klist
comando . Caso contrário, utilizekinit
para iniciar a autenticação Kerberos.Inicie sessão no gateway do HDInsight para registar o token OAuth necessário para aceder Azure Data Lake Storage:
curl -I -u [DomainUserName@Domain.com]:[DomainUserPassword] https://<clustername>.azurehdinsight.net
Um código de resposta de estado de 200 OK indica um registo com êxito. Verifique o nome de utilizador e a palavra-passe se for recebida uma resposta não autorizada, como 401.
Definir o fluxo de trabalho
As definições de fluxo de trabalho do Oozie são escritas na Linguagem de Definição de Processos (hPDL) do Apache Hadoop. hPDL é uma linguagem de definição de processo XML. Siga os seguintes passos para definir o fluxo de trabalho:
Configurar a área de trabalho de um utilizador de domínio:
hdfs dfs -mkdir /user/<DomainUser> cd /home/<DomainUserPath> cp /usr/hdp/<ClusterVersion>/oozie/doc/oozie-examples.tar.gz . tar -xvf oozie-examples.tar.gz hdfs dfs -put examples /user/<DomainUser>/
Substitua pelo
DomainUser
nome de utilizador do domínio. SubstituaDomainUserPath
pelo caminho do diretório raiz para o utilizador de domínio. Substitua pelaClusterVersion
versão da plataforma de dados do cluster.Utilize a seguinte instrução para criar e editar um novo ficheiro:
nano workflow.xml
Depois de o editor nano abrir, introduza o seguinte XML como o conteúdo do ficheiro:
<?xml version="1.0" encoding="UTF-8"?> <workflow-app xmlns="uri:oozie:workflow:0.4" name="map-reduce-wf"> <credentials> <credential name="metastore_token" type="hcat"> <property> <name>hcat.metastore.uri</name> <value>thrift://<active-headnode-name>-<clustername>.<Domain>.com:9083</value> </property> <property> <name>hcat.metastore.principal</name> <value>hive/_HOST@<Domain>.COM</value> </property> </credential> <credential name="hs2-creds" type="hive2"> <property> <name>hive2.server.principal</name> <value>${jdbcPrincipal}</value> </property> <property> <name>hive2.jdbc.url</name> <value>${jdbcURL}</value> </property> </credential> </credentials> <start to="mr-test" /> <action name="mr-test"> <map-reduce> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <prepare> <delete path="${nameNode}/user/${wf:user()}/examples/output-data/mrresult" /> </prepare> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> <property> <name>mapred.mapper.class</name> <value>org.apache.oozie.example.SampleMapper</value> </property> <property> <name>mapred.reducer.class</name> <value>org.apache.oozie.example.SampleReducer</value> </property> <property> <name>mapred.map.tasks</name> <value>1</value> </property> <property> <name>mapred.input.dir</name> <value>/user/${wf:user()}/${examplesRoot}/input-data/text</value> </property> <property> <name>mapred.output.dir</name> <value>/user/${wf:user()}/${examplesRoot}/output-data/mrresult</value> </property> </configuration> </map-reduce> <ok to="myHive2" /> <error to="fail" /> </action> <action name="myHive2" cred="hs2-creds"> <hive2 xmlns="uri:oozie:hive2-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <jdbc-url>${jdbcURL}</jdbc-url> <script>${hiveScript2}</script> <param>hiveOutputDirectory2=${hiveOutputDirectory2}</param> </hive2> <ok to="myHive" /> <error to="fail" /> </action> <action name="myHive" cred="metastore_token"> <hive xmlns="uri:oozie:hive-action:0.2"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <configuration> <property> <name>mapred.job.queue.name</name> <value>${queueName}</value> </property> </configuration> <script>${hiveScript1}</script> <param>hiveOutputDirectory1=${hiveOutputDirectory1}</param> </hive> <ok to="end" /> <error to="fail" /> </action> <kill name="fail"> <message>Oozie job failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> </kill> <end name="end" /> </workflow-app>
Substitua
clustername
pelo nome do cluster.Para guardar o ficheiro, selecione Ctrl+X. Introduza Y. Em seguida, selecione Enter.
O fluxo de trabalho está dividido em duas partes:
Credencial. Esta secção utiliza as credenciais utilizadas para autenticar as ações do Oozie:
Este exemplo utiliza a autenticação para ações do Hive. Para saber mais, veja Autenticação de Ação.
O serviço de credenciais permite que as ações do Oozie representem o utilizador para aceder aos serviços do Hadoop.
Ação. Esta secção tem três ações: map-reduce, Hive server 2 e Hive server 1:
A ação de redução de mapas executa um exemplo de um pacote Oozie para redução de mapas que produz a contagem de palavras agregada.
As ações do Hive Server 2 e do Hive Server 1 executam uma consulta numa tabela do Hive de exemplo fornecida com o HDInsight.
As ações do Hive utilizam as credenciais definidas na secção credenciais para autenticação com a palavra-chave
cred
no elemento de ação.
Utilize o seguinte comando para copiar o
workflow.xml
ficheiro para/user/<domainuser>/examples/apps/map-reduce/workflow.xml
:hdfs dfs -put workflow.xml /user/<domainuser>/examples/apps/map-reduce/workflow.xml
Substitua pelo
domainuser
nome de utilizador do domínio.
Definir o ficheiro de propriedades para a tarefa do Oozie
Utilize a seguinte instrução para criar e editar um novo ficheiro para as propriedades da tarefa:
nano job.properties
Depois de o editor nano abrir, utilize o seguinte XML como o conteúdo do ficheiro:
nameNode=adl://home jobTracker=headnodehost:8050 queueName=default examplesRoot=examples oozie.wf.application.path=${nameNode}/user/[domainuser]/examples/apps/map-reduce/workflow.xml hiveScript1=${nameNode}/user/${user.name}/countrowshive1.hql hiveScript2=${nameNode}/user/${user.name}/countrowshive2.hql oozie.use.system.libpath=true user.name=[domainuser] jdbcPrincipal=hive/<active-headnode-name>.<Domain>.com@<Domain>.COM jdbcURL=[jdbcurlvalue] hiveOutputDirectory1=${nameNode}/user/${user.name}/hiveresult1 hiveOutputDirectory2=${nameNode}/user/${user.name}/hiveresult2
- Utilize o
adl://home
URI para anameNode
propriedade se tiver Azure Data Lake Storage Gen1 como o armazenamento do cluster principal. Se estiver a utilizar Armazenamento de Blobs do Azure, mude parawasb://home
. Se estiver a utilizar Azure Data Lake Storage Gen2, mude paraabfs://home
. - Substitua pelo
domainuser
nome de utilizador do domínio. - Substitua
ClusterShortName
pelo nome abreviado do cluster. Por exemplo, se o nome do cluster for https:// [ligação de exemplo] sechadoopcontoso.azurehdisnight.net, éclustershortname
os primeiros seis carateres do cluster: sechad. - Substitua pelo
jdbcurlvalue
URL JDBC da configuração do Hive. Um exemplo é jdbc:hive2://headnodehost:10001/;transportMode=http. - Para guardar o ficheiro, selecione Ctrl+X, introduza
Y
e, em seguida, selecione Enter.
Este ficheiro de propriedades tem de estar presente localmente ao executar tarefas do Oozie.
- Utilize o
Criar scripts do Hive personalizados para tarefas do Oozie
Pode criar os dois scripts do Hive para o Hive Server 1 e o Hive Server 2, conforme mostrado nas secções seguintes.
Ficheiro do Hive Server 1
Criar e editar um ficheiro para as ações do Hive Server 1:
nano countrowshive1.hql
Crie o script:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemake from hivesampletable limit 2;
Guarde o ficheiro no Sistema de Ficheiros Distribuído Apache Hadoop (HDFS):
hdfs dfs -put countrowshive1.hql countrowshive1.hql
Ficheiro do Hive Server 2
Criar e editar um campo para as ações do Hive Server 2:
nano countrowshive2.hql
Crie o script:
INSERT OVERWRITE DIRECTORY '${hiveOutputDirectory1}' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select devicemodel from hivesampletable limit 2;
Guarde o ficheiro no HDFS:
hdfs dfs -put countrowshive2.hql countrowshive2.hql
Submeter tarefas do Oozie
Submeter tarefas do Oozie para clusters ESP é como submeter tarefas do Oozie em clusters não ESP.
Para obter mais informações, veja Utilizar o Apache Oozie com o Apache Hadoop para definir e executar um fluxo de trabalho no Azure HDInsight baseado em Linux.
Resultados de uma submissão de trabalho do Oozie
As tarefas do Oozie são executadas para o utilizador. Assim, tanto os registos de auditoria do Apache Hadoop YARN como do Apache Ranger mostram os trabalhos que estão a ser executados como o utilizador representado. A saída da interface de linha de comandos de uma tarefa do Oozie é semelhante ao seguinte código:
Job ID : 0000015-180626011240801-oozie-oozi-W
------------------------------------------------------------------------------------------------
Workflow Name : map-reduce-wf
App Path : adl://home/user/alicetest/examples/apps/map-reduce/wf.xml
Status : SUCCEEDED
Run : 0
User : alicetest
Group : -
Created : 2018-06-26 19:25 GMT
Started : 2018-06-26 19:25 GMT
Last Modified : 2018-06-26 19:30 GMT
Ended : 2018-06-26 19:30 GMT
CoordAction ID: -
Actions
------------------------------------------------------------------------------------------------
ID Status Ext ID ExtStatus ErrCode
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@:start: OK - OK -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@mr-test OK job_1529975666160_0051 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive2 OK job_1529975666160_0053 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@myHive OK job_1529975666160_0055 SUCCEEDED -
------------------------------------------------------------------------------------------------
0000015-180626011240801-oozie-oozi-W@end OK - OK -
-----------------------------------------------------------------------------------------------
Os registos de auditoria do Ranger para as ações do Servidor do Hive 2 mostram o Oozie a executar a ação para o utilizador. As vistas Ranger e YARN são visíveis apenas para o administrador do cluster.
Configurar a autorização do utilizador no Oozie
Por si só, o Oozie tem uma configuração de autorização de utilizador que pode impedir os utilizadores de parar ou eliminar tarefas de outros utilizadores. Para ativar esta configuração, defina como oozie.service.AuthorizationService.security.enabled
true
.
Para obter mais informações, veja Instalação e Configuração do Apache Oozie.
Para componentes como o Hive Server 1 em que o plug-in do Ranger não está disponível ou suportado, só é possível autorização hdFS agregada. A autorização detalhada só está disponível através de plug-ins do Ranger.
Obter a IU web do Oozie
A IU Web do Oozie fornece uma vista baseada na Web sobre o estado das tarefas do Oozie no cluster. Para obter a IU da Web, siga os seguintes passos nos clusters esp:
Adicione um nó de extremidade e ative a autenticação SSH Kerberos.
Siga os passos da IU Web do Oozie para ativar o túnel SSH para o nó de extremidade e aceder à IU da Web.