All Products
Search
Document Center

E-MapReduce:Proses data

Last Updated:Mar 26, 2026

Gunakan node EMR Hive di DataWorks untuk mengubah data mentah OSS menjadi set data profil pengguna. Tutorial ini memandu Anda melalui alur tiga tahap: membersihkan log web mentah, menggabungkannya dengan catatan pengguna, dan mengagregasi hasilnya ke dalam tabel ADS yang siap dikonsumsi.

Ikhtisar alur:

TahapNodeInputOutput
Bersihkan (ODS → DWD)dwd_log_info_di_emrods_raw_log_d_emrCatatan log terstruktur dengan bidang region, device, dan identity
Gabungkan (DWD → DWS)dws_user_info_all_di_emrdwd_log_info_di_emr + ods_user_info_d_emrLog dan demografi pengguna yang digabungkan
Ringkas (DWS → ADS)ads_user_info_1d_emrdws_user_info_all_di_emrProfil pengguna harian dengan jumlah page view (PV)

Ketergantungan node: dwd_log_info_di_emrdws_user_info_all_di_emrads_user_info_1d_emr

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Menyinkronkan data sumber seperti yang dijelaskan dalam Sinkronkan data.

  • Menyiapkan bucket Object Storage Service (OSS) untuk lingkungan tersebut (dirujuk pada Langkah 2).

Langkah 1: Rancang alur kerja

Pada panel Scheduled Workflow halaman DataStudio, klik ganda alur kerja tersebut. Pada tab konfigurasi alur kerja, klik EMR Hive di bagian EMR. Di kotak dialog Create Node, atur Name, lalu klik Confirm.

Buat tiga node EMR Hive berikut, lalu konfigurasikan ketergantungannya seperti yang ditunjukkan pada gambar:

  • dwd_log_info_di_emr — membersihkan data log OSS mentah

  • dws_user_info_all_di_emr — menggabungkan log yang telah dibersihkan dengan informasi dasar pengguna

  • ads_user_info_1d_emr — menghasilkan data profil pengguna akhir

image

Langkah 2: Daftarkan UDF untuk pencarian IP ke region

Log mentah menyimpan alamat IP pengunjung, tetapi alur memerlukan label region. Daftarkan User-Defined Function (UDF) yang menerjemahkan alamat IP menjadi nama region.

Unggah resource JAR

  1. Unduh paket ip2region-emr.jar.

  2. Pada halaman DataStudio, temukan alur kerja WorkShop, klik kanan EMR, lalu pilih Create Resource > EMR JAR. Konfigurasikan parameter berikut di kotak dialog. Atur parameter lain sesuai kebutuhan Anda atau gunakan nilai default.

    ParameterNilai
    Storage pathBucket OSS yang telah Anda siapkan
    FileJAR yang diunduh ip2region-emr.jar

    image

  3. Klik ikon image.png di bilah alat untuk melakukan commit resource ke proyek EMR di lingkungan pengembangan.

Daftarkan fungsi

  1. Pada halaman DataStudio, temukan alur kerja WorkShop, klik kanan EMR, lalu pilih Create Function.

  2. Di kotak dialog Create Function, atur Name menjadi getregion, lalu klik Create. Konfigurasikan parameter berikut pada tab yang muncul. Atur parameter lain sesuai kebutuhan Anda atau gunakan nilai default.

    ParameterNilai
    Resourceip2region-emr.jar
    Class Nameorg.alidata.emr.udf.Ip2Region

    image

  3. Klik ikon image.png di bilah alat untuk melakukan commit fungsi ke proyek EMR di lingkungan pengembangan.

Setelah langkah ini, Anda dapat memanggil getregion(ip) dalam pernyataan HiveQL apa pun di dalam proyek.

Langkah 3: Konfigurasikan node EMR Hive

Jika beberapa mesin komputasi EMR dikaitkan dengan DataStudio di ruang kerja Anda, pilih mesin komputasi yang sesuai untuk setiap node. Jika hanya satu mesin komputasi yang dikaitkan, lewati pemilihan ini.

Konfigurasikan dwd_log_info_di_emr (membersihkan log mentah)

Node ini mengurai tabel log mentah (ods_raw_log_d_emr) dan menulis catatan terstruktur ke dwd_log_info_di_emr. Setiap baris log mentah merupakan satu string tunggal yang dipisahkan oleh ##@@, dengan urutan bidang: ip, uid, time, request, status, bytes, referer, agent.

Tambahkan kode HiveQL

Klik ganda node dwd_log_info_di_emr untuk membuka tab konfigurasinya. Masukkan pernyataan berikut:

-- Buat tabel lapisan DWD untuk data log yang telah dibersihkan.
CREATE TABLE IF NOT EXISTS dwd_log_info_di_emr (
  ip       STRING COMMENT 'Alamat IP pengunjung',
  uid      STRING COMMENT 'ID Pengguna',
  `time`   STRING COMMENT 'Cap waktu permintaan (yyyymmddhh:mi:ss)',
  status   STRING COMMENT 'Kode status HTTP yang dikembalikan oleh server',
  bytes    STRING COMMENT 'Byte yang dikembalikan ke klien',
  region   STRING COMMENT 'Region yang diturunkan dari alamat IP melalui UDF',
  method   STRING COMMENT 'Metode HTTP (GET, POST, dll.)',
  url      STRING COMMENT 'Path URL permintaan',
  protocol STRING COMMENT 'Versi HTTP',
  referer  STRING COMMENT 'URL perujuk (hanya domain)',
  device   STRING COMMENT 'Jenis perangkat: android, iphone, ipad, macintosh, windows_phone, windows_pc, atau unknown',
  identity STRING COMMENT 'Jenis akses: crawler, feed, user, atau 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;

-- Urai dan bersihkan data log mentah untuk tanggal bisnis saat ini.
-- Setiap baris mentah adalah satu string dengan bidang yang dipisahkan oleh ##@@.
-- Urutan bidang: [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: menerjemahkan IP ke nama region
  , regexp_substr(request, '(^[^ ]+ )')                     AS method   -- Mengekstrak metode HTTP dari string permintaan
  , regexp_extract(request, '^[^ ]+ (.*) [^ ]+$')           AS url      -- Mengekstrak path URL dari string permintaan
  , regexp_extract(request, '.* ([^ ]+$)')                   AS protocol -- Mengekstrak versi HTTP dari string permintaan
  , regexp_extract(referer, '^[^/]+://([^/]+){1}')           AS referer  -- Menghapus path; hanya menyimpan domain perujuk
  , 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   -- Diturunkan dari string User-Agent
  , 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 -- Diturunkan dari string User-Agent dan path URL
FROM (
  -- Pisahkan setiap baris log mentah menjadi bidang individual menggunakan 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;

Konfigurasikan properti penjadwalan

Item konfigurasiNilai
Add Parameter (di bagian Scheduling Parameter)Nama: bizdate / Nilai: $[yyyymmdd-1]
DependenciesAtur tabel output menjadi workspacename.dwd_log_info_di_emr
Scheduling Cycle diatur ke Day. Lewati kolom Scheduled time — waktu eksekusi diwariskan dari node root workshop_start_emr, yang memicu semua node turunan setelah pukul 00.30 setiap hari.

Setelah Anda menyimpan pengaturan ini, node dwd_log_info_di_emr akan berjalan secara otomatis begitu node leluhur ods_raw_log_d_emr selesai menyinkronkan data dari OSS.

Simpan konfigurasi node

Klik ikon image.png di bilah alat atas untuk menyimpan node.

Konfigurasikan dws_user_info_all_di_emr (gabungkan log dengan catatan pengguna)

Node ini menggabungkan data log yang telah dibersihkan dengan tabel demografi pengguna dan menulis catatan gabungan ke dws_user_info_all_di_emr.

Tambahkan kode HiveQL

Klik ganda node dws_user_info_all_di_emr untuk membuka tab konfigurasinya. Masukkan pernyataan berikut:

-- Buat tabel lapisan DWS yang menggabungkan perilaku log dan demografi pengguna.
CREATE TABLE IF NOT EXISTS dws_user_info_all_di_emr (
  uid       STRING COMMENT 'ID Pengguna',
  gender    STRING COMMENT 'Jenis kelamin',
  age_range STRING COMMENT 'Rentang usia',
  zodiac    STRING COMMENT 'Zodiak',
  region    STRING COMMENT 'Region yang diturunkan dari alamat IP',
  device    STRING COMMENT 'Jenis perangkat',
  identity  STRING COMMENT 'Jenis akses: crawler, feed, user, atau unknown',
  method    STRING COMMENT 'Metode HTTP',
  url       STRING COMMENT 'Path URL permintaan',
  referer   STRING COMMENT 'Domain perujuk',
  `time`    STRING COMMENT 'Cap waktu permintaan (yyyymmddhh:mi:ss)'
)
PARTITIONED BY (dt STRING);

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

-- Gabungkan data log yang telah dibersihkan (kiri) dengan demografi pengguna (kanan) berdasarkan uid.
-- COALESCE menangani kasus di mana uid muncul di log tetapi tidak ada di tabel pengguna.
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;

Konfigurasikan properti penjadwalan

Item konfigurasiNilai
Add Parameter (di bagian Scheduling Parameter)Nama: bizdate / Nilai: $[yyyymmdd-1]
DependenciesAtur tabel output menjadi workspacename.dws_user_info_all_di_emr
Scheduling Cycle diatur ke Day. Lewati kolom Scheduled time — waktu eksekusi ditentukan oleh node root workshop_start_emr.

Setelah Anda menyimpan pengaturan ini, node dws_user_info_all_di_emr akan berjalan secara otomatis begitu kedua node leluhur (ods_user_info_d_emr dan dwd_log_info_di_emr) selesai.

Simpan konfigurasi node

Klik ikon image.png di bilah alat atas untuk menyimpan node.

Konfigurasikan ads_user_info_1d_emr (hasilkan profil pengguna)

Node ini mengagregasi data yang telah digabungkan menjadi profil pengguna harian, dikelompokkan berdasarkan uid, dan menulis hasilnya ke ads_user_info_1d_emr.

Tambahkan kode HiveQL

Klik ganda node ads_user_info_1d_emr untuk membuka tab konfigurasinya. Masukkan pernyataan berikut:

-- Buat tabel lapisan ADS untuk profil pengguna harian.
CREATE TABLE IF NOT EXISTS ads_user_info_1d_emr (
  uid       STRING COMMENT 'ID Pengguna',
  region    STRING COMMENT 'Region yang diturunkan dari alamat IP',
  device    STRING COMMENT 'Jenis perangkat',
  pv        BIGINT COMMENT 'Jumlah page view',
  gender    STRING COMMENT 'Jenis kelamin',
  age_range STRING COMMENT 'Rentang usia',
  zodiac    STRING COMMENT 'Zodiak'
)
PARTITIONED BY (dt STRING);

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

-- Agregasi perilaku per pengguna untuk tanggal bisnis saat ini.
-- COUNT(0) menghitung semua baris log per uid sebagai total page view.
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;

Konfigurasikan properti penjadwalan

Item konfigurasiNilai
Add Parameter (di bagian Scheduling Parameter)Nama: bizdate / Nilai: $[yyyymmdd-1]
DependenciesAtur tabel output menjadi workspacename.ads_user_info_1d_emr
Scheduling Cycle diatur ke Day. Lewati kolom Scheduled time — waktu eksekusi ditentukan oleh node root workshop_start_emr.

Setelah Anda menyimpan pengaturan ini, node ads_user_info_1d_emr akan berjalan secara otomatis begitu dws_user_info_all_di_emr selesai.

Simpan konfigurasi node

Klik ikon image.png di bilah alat atas untuk menyimpan node.

Langkah 4: Uji dan commit alur kerja

  1. Pada tab konfigurasi alur kerja, klik ikon run untuk menjalankan alur kerja.

  2. Saat ikon success muncul di samping semua node, klik ikon commit untuk melakukan commit.

  3. Pada kotak dialog Commit, pilih node yang akan di-commit, masukkan deskripsi, dan pilih Ignore I/O Inconsistency Alerts.

  4. Klik Confirm.

  5. Pada halaman Deployment Package Creation, deploy node tersebut.

Langkah 5: Jalankan node di lingkungan produksi

Node yang telah di-deploy menghasilkan instans yang dijadwalkan untuk hari berikutnya. Gunakan fitur pengisian ulang data untuk memicu eksekusi langsung dan memverifikasi bahwa alur berfungsi dari awal hingga akhir di lingkungan produksi.

  1. Klik Operation Center di pojok kanan atas (atau di bilah alat atas tab konfigurasi alur kerja).

  2. Di panel navigasi kiri, pilih Auto Triggered Node O&M > Auto Triggered Nodes. Klik nama node beban nol workshop_start_emr.

  3. Di grafik asiklik terarah (DAG) di sebelah kanan, klik kanan node workshop_start_emr, lalu pilih Run > Current and Descendant Nodes Retroactively.

  4. Di panel Backfill Data, pilih node yang akan diisi ulang datanya, atur parameter Data Timestamp, lalu klik Submit and Redirect. Halaman instans pengisian ulang data akan terbuka.

  5. Klik Refresh hingga semua node menunjukkan status sukses.

Lanjutan

Untuk memantau kualitas data yang dihasilkan oleh node-node ini, konfigurasikan aturan kualitas data di DataWorks. Untuk informasi lebih lanjut tentang pengisian ulang data dan pengelolaan instans pengisian ulang, lihat Pengisian ulang data dan tampilkan instans pengisian ulang data (versi baru).