Este tópico descreve como usar um nó EMR Hive no DataWorks para processar dados da tabela de informações de usuário ods_user_info_d_emr e da tabela de logs de acesso ods_raw_log_d_emr. O sistema processa os dados sincronizados do OSS para gerar dados de perfil de usuário.
Pré-requisito
Antes de começar, conclua as etapas em Sincronizar dados.
Etapa 1: Projetar o fluxo de trabalho
Para configurar dependências entre os nós do fluxo de trabalho, consulte Sincronizar dados.
Clique duas vezes no novo fluxo de trabalho para abrir sua aba de configuração. Clique em New Node, selecione EMR Hive e arraste-o para a tela à direita. Na caixa de diálogo New Node, insira o Node Name do nó e clique em Confirm.
Crie três nós EMR Hive com os nomes dwd_log_info_di_emr, dws_user_info_all_di_emr e ads_user_info_1d_emr e configure as seguintes dependências.
dwd_log_info_di_emr: Limpa os dados brutos de log do OSS.
dws_user_info_all_di_emr: Agrega os dados de log limpos e as informações básicas do usuário.
ads_user_info_1d_emr: Gera os dados finais do perfil do usuário.
Etapa 2: Criar uma função
Analise os dados brutos de log no formato de destino. Este tópico fornece um pacote de funções para converter endereços IP em regiões. Baixe o pacote, registre-o como função no DataWorks e chame-o no código.
Carregar o recurso
Baixe o arquivo ip2region-emr.jar.
-
No DataStudio, abra o fluxo de trabalho WorkShop, clique com o botão direito em EMR e escolha . Configure os parâmetros do novo recurso e clique em New.
A tabela a seguir descreve os principais parâmetros.
Storage Path: Selecione o bucket do OSS especificado para o cluster EMR durante a preparação do ambiente.
Upload File: Selecione o arquivo ip2region-emr.jar baixado.
Mantenha os demais parâmetros com os valores padrão ou configure-os conforme necessário.
Clique no ícone
na barra de ferramentas para enviar o recurso ao projeto do mecanismo EMR no ambiente de desenvolvimento.
Registrar a função
No DataStudio, abra o fluxo de trabalho, clique com o botão direito em EMR e selecione New Function.
-
Na caixa de diálogo New Function, defina o Function Name como getregion e clique em New. Em seguida, configure as informações da função.
A tabela a seguir descreve os principais parâmetros.
Resource: Selecione ip2region-emr.jar.
Class Name: Insira org.alidata.emr.udf.Ip2Region.
Mantenha os demais parâmetros com os valores padrão ou configure-os conforme necessário.
Clique no ícone
na barra de ferramentas para enviar a função ao projeto do mecanismo EMR no ambiente de desenvolvimento.
Etapa 3: Configurar nós EMR Hive
Criar o nó dwd_log_info_di_emr
1. Editar o código
Clique duas vezes no nó dwd_log_info_di_emr para abrir sua aba de configuração. Na página de edição do nó, insira as seguintes instruções.
Se houver vários mecanismos EMR associados ao seu workspace no Data Studio, selecione o EMR Engine apropriado. Caso haja apenas um mecanismo EMR associado, essa seleção não é necessária.
--Create ODS layer table
CREATE TABLE IF NOT EXISTS dwd_log_info_di_emr (
ip STRING COMMENT 'IP address',
uid STRING COMMENT 'User ID',
`time` STRING COMMENT 'Time yyyymmddhh:mi:ss',
status STRING COMMENT 'Server response status code',
bytes STRING COMMENT 'Bytes returned to client',
region STRING COMMENT 'Region, derived from IP',
method STRING COMMENT 'HTTP request type',
url STRING COMMENT 'url',
protocol STRING COMMENT 'HTTP protocol version',
referer STRING COMMENT 'Source url',
device STRING COMMENT 'Device type ',
identity STRING COMMENT 'Access type crawler feed user unknown'
)
PARTITIONED BY (
dt STRING
);
ALTER TABLE dwd_log_info_di_emr ADD IF NOT EXISTS PARTITION (dt='${bizdate}');
set hive.vectorized.execution.enabled = false;
INSERT OVERWRITE TABLE dwd_log_info_di_emr PARTITION (dt='${bizdate}')
SELECT ip
, uid
, tm
, status
, bytes
, getregion(ip) AS region --Use custom UDF to derive region from IP.
, regexp_extract(request, '(^[^ ]+) .*') AS method --Split request into three fields via regex.
, regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') AS url
, regexp_extract(request, '.* ([^ ]+$)') AS protocol
, regexp_extract(referer, '^[^/]+://([^/]+){1}') AS referer --Clean referer via regex to get a more precise url.
, CASE
WHEN lower(agent) RLIKE 'android' THEN 'android' --Derive device type and access type from agent.
WHEN lower(agent) RLIKE 'iphone' THEN 'iphone'
WHEN lower(agent) RLIKE 'ipad' THEN 'ipad'
WHEN lower(agent) RLIKE 'macintosh' THEN 'macintosh'
WHEN lower(agent) RLIKE 'windows phone' THEN 'windows_phone'
WHEN lower(agent) RLIKE 'windows' THEN 'windows_pc'
ELSE 'unknown'
END AS device
, CASE
WHEN lower(agent) RLIKE '(bot|spider|crawler|slurp)' THEN 'crawler'
WHEN lower(agent) RLIKE 'feed'
OR regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') RLIKE 'feed' THEN 'feed'
WHEN lower(agent) NOT RLIKE '(bot|spider|crawler|feed|slurp)'
AND agent RLIKE '^[Mozilla|Opera]'
AND regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') NOT RLIKE 'feed' THEN 'user'
ELSE 'unknown'
END AS identity
FROM (
SELECT SPLIT(col, '##@@')[0] AS ip
, SPLIT(col, '##@@')[1] AS uid
, SPLIT(col, '##@@')[2] AS tm
, SPLIT(col, '##@@')[3] AS request
, SPLIT(col, '##@@')[4] AS status
, SPLIT(col, '##@@')[5] AS bytes
, SPLIT(col, '##@@')[6] AS referer
, SPLIT(col, '##@@')[7] AS agent
FROM ods_raw_log_d_emr
WHERE dt = '${bizdate}'
) a;
2. Definir configurações de agendamento
As configurações de agendamento a seguir implementam este cenário: diariamente às 00:30, após o nó upstream ods_raw_log_d_emr sincronizar os dados de user_log.txt do OSS para a tabela ods_raw_log_d_emr no EMR, o sistema aciona o nó atual dwd_log_info_di_emr. Esse nó processa os dados da tabela ods_raw_log_d_emr e grava os resultados na partição correspondente à data comercial da tabela dwd_log_info_di_emr.
Parâmetro | Configuração |
Scheduling Parameters | Na seção Scheduling Parameters, adicione o seguinte:
|
Time attribute | Defina RUN Attribute como Allow Rerun on Success or Failure. |
Scheduling Dependency | Em Scheduling Dependency, verifique se a tabela de saída está configurada como a saída deste nó. O formato é |
Nas configurações de tempo, defina o Scheduling period como Dia. Não é necessário configurar separadamente o Scheduling Time para este nó. O horário diário de acionamento deste nó segue o horário agendado do nó virtual do fluxo de trabalho Workshop_start_emr. Portanto, o agendamento ocorre somente após as 00:30 todos os dias.
3. Salvar a configuração
Configure outros parâmetros necessários conforme apropriado. Após concluir a configuração, clique no ícone
na barra de ferramentas da página de edição de código do nó para salvar a configuração atual.
Criar o nó dws_user_info_all_di_emr
1. Editar o código
Clique duas vezes no nó dws_user_info_all_di_emr para abrir sua aba de configuração. Na página de edição do nó, insira as seguintes instruções.
Se houver vários mecanismos EMR associados ao seu workspace no Data Studio, selecione o EMR Engine apropriado. Caso haja apenas um mecanismo EMR associado, essa seleção não é necessária.
--Create DW layer table
CREATE TABLE IF NOT EXISTS dws_user_info_all_di_emr (
uid STRING COMMENT 'User ID',
gender STRING COMMENT 'Gender',
age_range STRING COMMENT 'Age range',
zodiac STRING COMMENT 'Zodiac sign',
region STRING COMMENT 'Region, derived from IP',
device STRING COMMENT 'Device type ',
identity STRING COMMENT 'Access type crawler feed user unknown',
method STRING COMMENT 'HTTP request type',
url STRING COMMENT 'url',
referer STRING COMMENT 'Source url',
`time` STRING COMMENT 'Time yyyymmddhh:mi:ss'
)
PARTITIONED BY (
dt STRING
);
ALTER TABLE dws_user_info_all_di_emr ADD IF NOT EXISTS PARTITION (dt='${bizdate}');
INSERT OVERWRITE TABLE dws_user_info_all_di_emr PARTITION (dt='${bizdate}')
SELECT COALESCE(a.uid, b.uid) AS uid
, b.gender
, b.age_range
, b.zodiac
, a.region
, a.device
, a.identity
, a.method
, a.url
, a.referer
, a.`time`
FROM (
SELECT *
FROM dwd_log_info_di_emr
WHERE dt = '${bizdate}'
) a
LEFT OUTER JOIN (
SELECT *
FROM ods_user_info_d_emr
WHERE dt = '${bizdate}'
) b
ON a.uid = b.uid;
2. Definir configurações de agendamento
As configurações de agendamento a seguir implementam este cenário: diariamente às 00:30, após a conclusão das tarefas upstream ods_user_info_d_emr e dwd_log_info_di_emr, o sistema aciona o nó dws_user_info_all_di_emr. Esse nó mescla e processa dados das tabelas ods_user_info_d_emr e dwd_log_info_di_emr e grava os resultados na tabela dws_user_info_all_di_emr.
Parâmetro | Configuração |
Scheduling Parameters | Na seção Scheduling Parameters, adicione o seguinte:
|
Time attribute | Defina RUN Attribute como Allow Rerun on Success or Failure. |
Scheduling Dependency | Em Scheduling Dependency, verifique se a tabela de saída está configurada como a saída deste nó. O formato é |
Nas configurações de tempo, defina o Scheduling period como Dia. Não é necessário configurar separadamente o Scheduling Time para este nó. O horário diário de acionamento deste nó segue o horário agendado do nó virtual do fluxo de trabalho Workshop_start_emr. Portanto, o agendamento ocorre somente após as 00:30 todos os dias.
3. Salvar a configuração
Configure outros parâmetros necessários conforme apropriado. Após concluir a configuração, clique no ícone
na barra de ferramentas da página de edição de código do nó para salvar a configuração atual.
Criar o nó ads_user_info_1d_emr
1. Editar o código
Clique duas vezes no nó ads_user_info_1d_emr para abrir sua aba de configuração. Na página de edição do nó, insira as seguintes instruções.
Se houver vários mecanismos EMR associados ao seu workspace no Data Studio, selecione o EMR Engine apropriado. Caso haja apenas um mecanismo EMR associado, essa seleção não é necessária.
--Create RPT layer table
CREATE TABLE IF NOT EXISTS ads_user_info_1d_emr (
uid STRING COMMENT 'User ID',
region STRING COMMENT 'Region, derived from IP',
device STRING COMMENT 'Device type ',
pv BIGINT COMMENT 'pv',
gender STRING COMMENT 'Gender',
age_range STRING COMMENT 'Age range',
zodiac STRING COMMENT 'Zodiac sign'
)
PARTITIONED BY (
dt STRING
);
ALTER TABLE ads_user_info_1d_emr ADD IF NOT EXISTS PARTITION (dt='${bizdate}');
INSERT OVERWRITE TABLE ads_user_info_1d_emr PARTITION (dt='${bizdate}')
SELECT uid
, MAX(region)
, MAX(device)
, COUNT(0) AS pv
, MAX(gender)
, MAX(age_range)
, MAX(zodiac)
FROM dws_user_info_all_di_emr
WHERE dt = '${bizdate}'
GROUP BY uid;
2. Definir configurações de agendamento
Após o nó upstream dws_user_info_all_di_emr concluir a mesclagem das tabelas ods_user_info_d_emr e dwd_log_info_di_emr, o sistema aciona o nó ads_user_info_1d_emr para processar ainda mais os dados e gerar dados consumíveis.
Parâmetro | Configuração |
Scheduling Parameters | Na seção Scheduling Parameters, adicione o seguinte:
|
Time attribute | Defina RUN Attribute como Allow Rerun on Success or Failure. |
Scheduling Dependency | Em Scheduling Dependency, verifique se a tabela de saída está configurada como a saída deste nó. O formato é |
Nas configurações de tempo, defina o Scheduling period como Dia. Não é necessário configurar separadamente o Scheduling Time para este nó. O horário diário de acionamento deste nó segue o horário agendado do nó virtual do fluxo de trabalho Workshop_start_emr. Portanto, o agendamento ocorre somente após as 00:30 todos os dias.
3. Salvar a configuração
Configure outros parâmetros necessários conforme apropriado. Após concluir a configuração, clique no ícone
na barra de ferramentas da página de edição de código do nó para salvar a configuração atual.
Etapa 4: Enviar o fluxo de trabalho
Após concluir todas as configurações do fluxo de trabalho, teste se ele executa conforme esperado. Depois de um teste bem-sucedido, envie o fluxo de trabalho e aguarde sua implantação.
Na página de edição do fluxo de trabalho, clique em
para executar o fluxo de trabalho.Quando
aparecer ao lado de todos os nós no fluxo de trabalho, clique em
para enviar o fluxo de trabalho executado com sucesso.Na caixa de diálogo Submit, selecione os nós a serem enviados, marque Ignore I/O Inconsistency Alerts e clique em Confirm.
-
Após o envio bem-sucedido, implante cada nó do fluxo de trabalho.
Clique em Publish no lado direito da página para acessar a página Create Deployment Package.
Selecione os nós a serem implantados, clique em Deploy e, na caixa de diálogo Confirm Release, clique em Publish.
Etapa 5: Executar a tarefa no ambiente de produção
Após a implantação de uma tarefa, o sistema gera instâncias e as executa no dia seguinte. Use Supplementary data para retroagir dados do fluxo de trabalho implantado e verificar se a tarefa executa conforme esperado no ambiente de produção. Para obter mais informações, consulte Retroagir dados.
-
Após a implantação da tarefa, clique em Operation and Maintenance Center no canto superior direito.
Você também pode abrir a página de edição do fluxo de trabalho e clicar em Go to operations na barra de ferramentas para acessar a página Operation and Maintenance Center.
No painel de navegação à esquerda, escolha para acessar a página Auto Triggered Node e clique no nó virtual workshop_start_emr.
No DAG à direita, clique com o botão direito no nó workshop_start_emr e escolha .
Selecione as tarefas para as quais deseja retroagir dados, insira a data comercial e clique em Submit and Redirect.
Na página de retroação de dados, clique em Refresh até que todas as tarefas SQL sejam executadas com sucesso.
Próxima etapa
Em cenários de agendamento periódico, configure o monitoramento de qualidade de dados para as tabelas de saída a fim de garantir que os dados gerados pelas tarefas atendam às expectativas. Para obter mais informações, consulte Monitorar qualidade de dados.