Todos os produtos
Search
Central de documentação

E-MapReduce:Processar dados

Última atualização: Jun 27, 2026

Use nós EMR Hive no DataWorks para transformar dados brutos do OSS em um conjunto de dados de perfil de usuário. Este tutorial apresenta um pipeline de três estágios: limpar logs da web brutos, juntá-los a registros de usuários e agregar os resultados em uma tabela ADS pronta para consumo.

Visão geral do pipeline:

Estágio

Nó

Entrada

Saída

Limpeza (ODS → DWD)

dwd_log_info_di_emr

ods_raw_log_d_emr

Registros de log estruturados com campos de região, dispositivo e identidade

Junção (DWD → DWS)

dws_user_info_all_di_emr

dwd_log_info_di_emr + ods_user_info_d_emr

Dados demográficos combinados com logs

Resumo (DWS → ADS)

ads_user_info_1d_emr

dws_user_info_all_di_emr

Perfil diário de usuário com contagens de visualizações de página (PV)

Dependência entre nós: dwd_log_info_di_emr → dws_user_info_all_di_emr → ads_user_info_1d_emr

Pré-requisitos

Antes de começar, verifique se você já:

  • Sincronizou os dados de source conforme descrito em Sincronizar dados

  • Preparou um bucket do Object Storage Service (OSS) para o ambiente (referenciado na Etapa 2)

Etapa 1: Projetar o fluxo de trabalho

No painel Scheduled Workflow da página DataStudio, clique duas vezes no fluxo de trabalho. Na aba de configuração do fluxo de trabalho, clique em EMR Hive na seção EMR. Na caixa de diálogo Create Node, defina o campo Name e clique em Confirm.

Crie os três nós EMR Hive listados abaixo e configure suas dependências conforme ilustrado na figura:

  • dwd_log_info_di_emr — limpa os dados de log brutos do OSS

  • dws_user_info_all_di_emr — une os logs limpos às informações básicas do usuário

  • ads_user_info_1d_emr — gera os dados finais do perfil de usuário

image

Etapa 2: Registrar uma UDF para consulta de região por IP

Os logs brutos armazenam endereços IP dos visitantes, mas o pipeline requer rótulos de região. Registre uma Função Definida pelo Usuário (UDF) que converta endereços IP em nomes de regiões.

Carregar o recurso JAR

  1. Baixe o pacote ip2region-emr.jar.

  2. Na página DataStudio, localize o fluxo de trabalho WorkShop, clique com o botão direito em EMR e escolha Create Resource > EMR JAR. Configure os parâmetros a seguir na caixa de diálogo: defina outros parâmetros conforme necessário ou mantenha os valores padrão.

    Parâmetro

    Valor

    Storage path

    O bucket do OSS preparado

    File

    O arquivo ip2region-emr.jar baixado

    image

  3. Clique no ícone image.png na barra de ferramentas para enviar o recurso ao projeto EMR no ambiente de desenvolvimento.

Registrar a função

  1. Na página DataStudio, localize o fluxo de trabalho WorkShop, clique com o botão direito em EMR e selecione Create Function.

  2. Na caixa de diálogo Create Function, defina Name como getregion e clique em Create. Configure os parâmetros a seguir na aba exibida: defina outros parâmetros conforme necessário ou mantenha os valores padrão.

    Parâmetro

    Valor

    Resource

    ip2region-emr.jar

    Class Name

    org.alidata.emr.udf.Ip2Region

    image

  3. Clique no ícone image.png na barra de ferramentas para enviar a função ao projeto EMR no ambiente de desenvolvimento.

Após esta etapa, você pode chamar getregion(ip) em qualquer instrução HiveQL dentro do projeto.

Etapa 3: Configurar os nós EMR Hive

Caso seu workspace tenha vários mecanismos de computação EMR associados ao DataStudio, selecione o mecanismo apropriado para cada nó. Se houver apenas um mecanismo associado, ignore esta seleção.

Configurar dwd_log_info_di_emr (limpeza de logs brutos)

Este nó analisa a tabela de logs brutos (ods_raw_log_d_emr) e grava registros estruturados em dwd_log_info_di_emr. Cada linha de log bruto consiste em uma única string delimitada por ##@@, com campos na seguinte ordem: ip, uid, time, request, status, bytes, referer, agent.

Adicionar o código HiveQL

Clique duas vezes no nó dwd_log_info_di_emr para abrir sua aba de configuração. Insira as seguintes instruções:

-- Create the DWD-layer table for cleansed log data.
CREATE TABLE IF NOT EXISTS dwd_log_info_di_emr (
  ip       STRING COMMENT 'Visitor IP address',
  uid      STRING COMMENT 'User ID',
  `time`   STRING COMMENT 'Request timestamp (yyyymmddhh:mi:ss)',
  status   STRING COMMENT 'HTTP status code returned by the server',
  bytes    STRING COMMENT 'Bytes returned to the client',
  region   STRING COMMENT 'Region derived from the IP address via UDF',
  method   STRING COMMENT 'HTTP method (GET, POST, etc.)',
  url      STRING COMMENT 'Request URL path',
  protocol STRING COMMENT 'HTTP version',
  referer  STRING COMMENT 'Referring URL (domain only)',
  device   STRING COMMENT 'Device type: android, iphone, ipad, macintosh, windows_phone, windows_pc, or unknown',
  identity STRING COMMENT 'Access type: crawler, feed, user, or 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;

-- Parse and cleanse raw log data for the current business date.
-- Each raw row is a single string with fields separated by ##@@.
-- Field order: [0]=ip, [1]=uid, [2]=tm, [3]=request, [4]=status, [5]=bytes, [6]=referer, [7]=agent
INSERT OVERWRITE TABLE dwd_log_info_di_emr PARTITION (dt='${bizdate}')
SELECT
    ip
  , uid
  , tm
  , status
  , bytes
  , getregion(ip)                                            AS region   -- UDF: translates IP to region name
  , regexp_substr(request, '(^[^ ]+ )')                     AS method   -- Extracts HTTP method from request string
  , regexp_extract(request, '^[^ ]+ (.*) [^ ]+$')           AS url      -- Extracts URL path from request string
  , regexp_extract(request, '.* ([^ ]+$)')                   AS protocol -- Extracts HTTP version from request string
  , regexp_extract(referer, '^[^/]+://([^/]+){1}')           AS referer  -- Strips path; keeps only the referring domain
  , CASE
      WHEN lower(agent) RLIKE 'android'       THEN 'android'
      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   -- Derived from the User-Agent string
  , 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 -- Derived from the User-Agent string and URL path
FROM (
  -- Split each raw log row into individual fields using the ##@@ delimiter.
  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;

Configurar propriedades de agendamento

Item de configuração

Valor

Add Parameter (na seção Scheduling Parameter)

Nome: bizdate / Valor: $[yyyymmdd-1]

Dependencies

Defina a tabela de saída como workspacename.dwd_log_info_di_emr

O Scheduling Cycle está definido como Day . Ignore o campo Scheduled time — o horário de execução é herdado do nó raiz workshop_start_emr , que aciona todos os nós descendentes após as 00:30 diariamente.

Ao salvar essas configurações, o nó dwd_log_info_di_emr será executado automaticamente assim que o nó ancestral ods_raw_log_d_emr concluir a sincronização de dados do OSS.

Salvar a configuração do nó

Clique no ícone image.png na barra de ferramentas superior para salvar o nó.

Configurar dws_user_info_all_di_emr (junção de logs com registros de usuários)

Este nó combina os dados de log limpos com a tabela demográfica de usuários e grava os registros unificados em dws_user_info_all_di_emr.

Adicionar o código HiveQL

Clique duas vezes no nó dws_user_info_all_di_emr para abrir sua aba de configuração. Insira as seguintes instruções:

-- Create the DWS-layer table combining log behavior and user demographics.
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 address',
  device    STRING COMMENT 'Device type',
  identity  STRING COMMENT 'Access type: crawler, feed, user, or unknown',
  method    STRING COMMENT 'HTTP method',
  url       STRING COMMENT 'Request URL path',
  referer   STRING COMMENT 'Referring domain',
  `time`    STRING COMMENT 'Request timestamp (yyyymmddhh:mi:ss)'
)
PARTITIONED BY (dt STRING);

ALTER TABLE dws_user_info_all_di_emr ADD IF NOT EXISTS PARTITION (dt='${bizdate}');

-- Join cleansed log data (left) with user demographics (right) on uid.
-- COALESCE handles cases where a uid appears in logs but not in the user table.
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;

Configurar propriedades de agendamento

Item de configuração

Valor

Add Parameter (na seção Scheduling Parameter)

Nome: bizdate / Valor: $[yyyymmdd-1]

Dependencies

Defina a tabela de saída como workspacename.dws_user_info_all_di_emr

O Scheduling Cycle está definido como Day . Ignore o campo Scheduled time — o horário de execução é determinado pelo nó raiz workshop_start_emr .

Ao salvar essas configurações, o nó dws_user_info_all_di_emr será executado automaticamente quando ambos os nós ancestrais (ods_user_info_d_emr e dwd_log_info_di_emr) tiverem concluído suas execuções.

Salvar a configuração do nó

Clique no ícone image.png na barra de ferramentas superior para salvar o nó.

Configurar ads_user_info_1d_emr (geração de perfis de usuário)

Este nó agrega os dados unidos em um perfil diário de usuário, agrupado por uid, e grava os resultados em ads_user_info_1d_emr.

Adicionar o código HiveQL

Clique duas vezes no nó ads_user_info_1d_emr para abrir sua aba de configuração. Insira as seguintes instruções:

-- Create the ADS-layer table for daily user profiles.
CREATE TABLE IF NOT EXISTS ads_user_info_1d_emr (
  uid       STRING COMMENT 'User ID',
  region    STRING COMMENT 'Region derived from IP address',
  device    STRING COMMENT 'Device type',
  pv        BIGINT COMMENT 'Page view count',
  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}');

-- Aggregate per-user behavior for the current business date.
-- COUNT(0) counts all log rows per uid as the page view total.
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;

Configurar propriedades de agendamento

Item de configuração

Valor

Add Parameter (na seção Scheduling Parameter)

Nome: bizdate / Valor: $[yyyymmdd-1]

Dependencies

Defina a tabela de saída como workspacename.ads_user_info_1d_emr

O Scheduling Cycle está definido como Day . Ignore o campo Scheduled time — o horário de execução é determinado pelo nó raiz workshop_start_emr .

Ao salvar essas configurações, o nó ads_user_info_1d_emr será executado automaticamente assim que dws_user_info_all_di_emr for concluído.

Salvar a configuração do nó

Clique no ícone image.png na barra de ferramentas superior para salvar o nó.

Etapa 4: Testar e enviar o fluxo de trabalho

  1. Na aba de configuração do fluxo de trabalho, clique no ícone run para executar o fluxo de trabalho.

  2. Quando o ícone success aparecer ao lado de todos os nós, clique no ícone commit para enviar.

  3. Na caixa de diálogo Commit, selecione os nós a serem enviados, insira uma descrição e marque Ignore I/O Inconsistency Alerts.

  4. Clique em Confirm.

  5. Na página Deployment Package Creation, implante os nós.

Etapa 5: Executar nós no ambiente de produção

Os nós implantados geram instâncias agendadas para o dia seguinte. Use o recurso de reprocessamento de dados para acionar uma execução imediata e verificar se o pipeline funciona de ponta a ponta em produção.

  1. Clique em Operation Center no canto superior direito (ou na barra de ferramentas superior da aba de configuração do fluxo de trabalho).

  2. No painel de navegação à esquerda, escolha Auto Triggered Node O&M > Auto Triggered Nodes. Clique no nome do nó de carga zero workshop_start_emr.

  3. No grafo acíclico direcionado (DAG) à direita, clique com o botão direito no nó workshop_start_emr e escolha Run > Current and Descendant Nodes Retroactively.

  4. No painel Backfill Data, selecione os nós para reprocessamento, defina o parâmetro Data Timestamp e clique em Submit and Redirect. A página de instâncias de reprocessamento de dados será aberta.

  5. Clique em Refresh até que todos os nós apresentem status de sucesso.

Próximos passos

Para monitorar a qualidade dos dados gerados por esses nós, configure regras de qualidade de dados no DataWorks. Para obter mais informações sobre reprocessamento de dados e gerenciamento de instâncias de reprocessamento, consulte Reprocessar dados e visualizar instâncias de reprocessamento de dados (nova versão).