Topik ini menjelaskan cara menggunakan node Hive E-MapReduce (EMR) di DataWorks untuk memproses data dalam tabel ods_user_info_d_emr dan ods_raw_log_d_emr, yang disimpan di Bucket OSS setelah sinkronisasi, guna mendapatkan data profil pengguna yang diinginkan. Tabel ods_user_info_d_emr menyimpan informasi dasar pengguna, sedangkan tabel ods_raw_log_d_emr menyimpan log akses situs web.
Prasyarat
Data yang diperlukan telah disinkronkan. Untuk informasi lebih lanjut, lihat Sinkronkan Data.
Langkah 1: Rancang alur kerja
Untuk informasi tentang dependensi antara node dalam alur kerja, lihat Sinkronkan Data.
Di panel Alur Kerja Terjadwal pada halaman DataStudio, klik dua kali alur kerja. Pada tab konfigurasi alur kerja, klik Create Node, lalu seret EMR Hive ke kanvas. Di kotak dialog Create Node, konfigurasikan parameter Name, lalu klik Confirm.
Anda harus membuat tiga node EMR Hive bernama dwd_log_info_di_emr, dws_user_info_all_di_emr, dan ads_user_info_1d_emr. Kemudian, konfigurasikan dependensi node seperti yang ditunjukkan pada gambar berikut.
dwd_log_info_di_emr: Digunakan untuk membersihkan data log OSS mentah.
dws_user_info_all_di_emr: Digunakan untuk menggabungkan data log OSS yang telah dibersihkan dengan informasi pengguna dasar.
ads_user_info_1d_emr: Digunakan untuk menghasilkan data profil pengguna.

Langkah 2: Buat fungsi
Anda dapat menggunakan fungsi untuk mengonversi data log yang disinkronkan dari format aslinya menjadi format yang diinginkan. Dalam contoh topik ini, paket kode fungsi yang digunakan untuk menerjemahkan alamat IP menjadi wilayah disediakan. Setelah Anda mengunduh paket kode fungsi ke mesin lokal dan mendaftarkannya sebagai fungsi di DataWorks, Anda dapat memanggil fungsi tersebut.
Unggah sumber daya
Unduh paket ip2region-emr.jar.
Di halaman DataStudio, temukan alur kerja bernama WorkShop, klik kanan EMR, lalu pilih . Di kotak dialog Buat Sumber Daya, konfigurasikan parameter dan klik Create.

Parameter utama:
Storage path: Pilih Bucket OSS yang Anda tentukan untuk kluster EMR yang Anda buat selama persiapan lingkungan.
File: Pilih paket ip2region-emr.jar yang telah diunduh.
Konfigurasikan parameter lainnya sesuai kebutuhan bisnis atau gunakan nilai default.
Klik ikon
di bilah alat untuk mengirimkan sumber daya ke proyek EMR di lingkungan pengembangan.
Daftarkan fungsi
Di halaman DataStudio, temukan alur kerja bernama WorkShop, klik kanan EMR, lalu pilih Create Function.
Di kotak dialog Create Function, atur parameter Name menjadi getregion, lalu klik Create. Pada tab yang muncul, konfigurasikan parameter-parameter.

Parameter utama:
Resource: Atur nilainya menjadi ip2region-emr.jar.
Class Name: Atur nilainya menjadi org.alidata.emr.udf.Ip2Region.
Konfigurasikan parameter lainnya sesuai kebutuhan bisnis atau gunakan nilai default.
Klik ikon
di bilah alat untuk mengirimkan fungsi ke proyek EMR di lingkungan pengembangan.
Langkah 3: Konfigurasikan node EMR Hive
Buat node dwd_log_info_di_emr
1. Edit kode node
Klik dua kali node dwd_log_info_di_emr untuk pergi ke tab konfigurasi node. Di tab konfigurasi, masukkan pernyataan berikut:
Jika beberapa mesin komputasi EMR terhubung dengan DataStudio di ruang kerja Anda, Anda harus select an EMR compute engine berdasarkan kebutuhan bisnis Anda. Jika hanya satu mesin komputasi EMR yang terhubung dengan DataStudio di ruang kerja Anda, Anda tidak perlu memilih mesin komputasi.
-- Buat tabel di lapisan ODS.
CREATE TABLE IF NOT EXISTS dwd_log_info_di_emr (
ip STRING COMMENT 'Alamat IP',
uid STRING COMMENT 'ID Pengguna',
`time` STRING COMMENT 'Waktu dalam format yyyymmddhh:mi:ss',
status STRING COMMENT 'Kode status yang dikembalikan oleh server',
bytes STRING COMMENT 'Jumlah byte yang dikembalikan ke klien',
region STRING COMMENT 'Wilayah, yang diperoleh berdasarkan alamat IP',
method STRING COMMENT 'Tipe permintaan HTTP',
url STRING COMMENT 'url',
protocol STRING COMMENT 'Nomor versi HTTP',
referer STRING COMMENT 'URL sumber',
device STRING COMMENT 'Tipe terminal',
identity STRING COMMENT 'Tipe akses, yang bisa 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;
INSERT OVERWRITE TABLE dwd_log_info_di_emr PARTITION (dt='${bizdate}')
SELECT ip
, uid
, tm
, status
, bytes
, getregion(ip) AS region -- Dapatkan wilayah menggunakan fungsi yang ditentukan pengguna (UDF) berdasarkan alamat IP.
, regexp_substr(request, '(^[^ ]+ )') AS method -- Gunakan ekspresi reguler untuk mengekstrak tiga bidang dari permintaan.
, regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') AS url
, regexp_extract(request, '.* ([^ ]+$)') AS protocol
, regexp_extract(referer, '^[^/]+://([^/]+){1}') AS referer -- Gunakan ekspresi reguler untuk membersihkan referrer HTTP untuk mendapatkan URL yang lebih akurat.
, CASE
WHEN lower (agent) RLIKE 'android' THEN 'android' -- Dapatkan tipe terminal dan akses dari nilai parameter 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. Konfigurasikan properti penjadwalan
Jika Anda mengonfigurasi properti penjadwalan untuk node dwd_log_info_di_emr seperti yang ditunjukkan dalam tabel berikut, setelah node ods_raw_log_d_emr, yang merupakan node leluhur dari node dwd_log_info_di_emr, mensinkronkan data dari objek OSS user_log.txt ke tabel EMR ods_raw_log_d_emr pada pukul 00:30 setiap hari dalam skenario penjadwalan, node dwd_log_info_di_emr dipicu untuk memproses data dalam tabel ods_raw_log_d_emr dan menulis data yang diproses ke partisi berbasis cap waktu data di tabel dwd_log_info_di_emr.
Bagian | Deskripsi | Screenshot |
Scheduling Parameter | Klik Tambah Parameter di bagian Scheduling Parameter. Di baris yang muncul di tabel, Anda dapat menentukan parameter penjadwalan dan nilai parameter penjadwalan tersebut.
|
|
Schedule | Setel parameter Rerun menjadi Allow Regardless of Running Status. |
|
Dependencies | Pastikan bahwa tabel yang dihasilkan digunakan sebagai tabel keluaran dari node saat ini. Tabel keluaran dinamai dalam format |
|
Di bagian Jadwal, setel parameter Scheduling Cycle menjadi Hari. Anda tidak perlu mengonfigurasi parameter Scheduled time secara terpisah untuk node saat ini. Waktu ketika node saat ini dijadwalkan untuk berjalan setiap hari ditentukan oleh waktu penjadwalan node beban nol workshop_start_emr dari alur kerja. Node saat ini dijadwalkan untuk berjalan setelah pukul 00:30 setiap hari.
3. Simpan konfigurasi
Dalam contoh ini, Anda dapat mengonfigurasi item konfigurasi lain yang diperlukan berdasarkan kebutuhan bisnis Anda. Setelah konfigurasi selesai, klik ikon
di bilah alat atas di tab konfigurasi node untuk menyimpan konfigurasi node.
Buat node dws_user_info_all_di_emr
1. Edit kode node
Klik dua kali node dws_user_info_all_di_emr untuk pergi ke tab konfigurasi node. Di tab konfigurasi, masukkan pernyataan berikut:
Jika beberapa mesin komputasi EMR terhubung dengan DataStudio di ruang kerja Anda, Anda harus select an EMR compute engine berdasarkan kebutuhan bisnis Anda. Jika hanya satu mesin komputasi EMR yang terhubung dengan DataStudio di ruang kerja Anda, Anda tidak perlu memilih mesin komputasi.
-- Buat tabel di lapisan DW.
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 'Tanda zodiak',
region STRING COMMENT 'Wilayah, yang diperoleh berdasarkan alamat IP',
device STRING COMMENT 'Tipe terminal',
identity STRING COMMENT 'Tipe akses, yang bisa crawler, feed, user, atau unknown',
method STRING COMMENT 'Tipe permintaan HTTP',
url STRING COMMENT 'url',
referer STRING COMMENT 'URL sumber',
`time` STRING COMMENT 'Waktu dalam format 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. Konfigurasikan properti penjadwalan
Konfigurasikan properti penjadwalan untuk node dws_user_info_all_di_emr seperti yang ditunjukkan dalam tabel berikut. Setelah node ods_user_info_d_emr dan dwd_log_info_di_emr, node leluhur dari node dws_user_info_all_di_emr, selesai berjalan pada pukul 00:30 setiap hari dalam skenario penjadwalan, node dws_user_info_all_di_emr dipicu untuk menggabungkan dan memproses tabel ods_user_info_d_emr dan dwd_log_info_di_emr dan menulis data yang diproses ke tabel dws_user_info_all_di_emr.
Bagian | Deskripsi | Screenshot |
Scheduling Parameter | Klik Tambah Parameter di bagian Scheduling Parameter. Di baris yang muncul di tabel, Anda dapat menentukan parameter penjadwalan dan nilai parameter penjadwalan tersebut.
|
|
Schedule | Setel parameter Rerun menjadi Allow Regardless of Running Status. |
|
Dependencies | Pastikan bahwa tabel yang dihasilkan digunakan sebagai tabel keluaran dari node saat ini. Tabel keluaran dinamai dalam format |
|
Di bagian Jadwal, setel parameter Scheduling Cycle menjadi Hari. Anda tidak perlu mengonfigurasi parameter Scheduled time secara terpisah untuk node saat ini. Waktu ketika node saat ini dijadwalkan untuk berjalan setiap hari ditentukan oleh waktu penjadwalan node beban nol workshop_start_emr dari alur kerja. Node saat ini dijadwalkan untuk berjalan setelah pukul 00:30 setiap hari.
3. Simpan konfigurasi
Dalam contoh ini, Anda dapat mengonfigurasi item konfigurasi lain yang diperlukan berdasarkan kebutuhan bisnis Anda. Setelah konfigurasi selesai, klik ikon
di bilah alat atas di tab konfigurasi node untuk menyimpan konfigurasi node.
Buat node ads_user_info_1d_emr
1. Edit kode node
Klik dua kali node ads_user_info_1d_emr untuk pergi ke tab konfigurasi node. Di tab konfigurasi, masukkan pernyataan berikut:
Jika beberapa mesin komputasi EMR terhubung dengan DataStudio di ruang kerja Anda, Anda harus select an EMR compute engine berdasarkan kebutuhan bisnis Anda. Jika hanya satu mesin komputasi EMR yang terhubung dengan DataStudio di ruang kerja Anda, Anda tidak perlu memilih mesin komputasi.
-- Buat tabel di lapisan RPT.
CREATE TABLE IF NOT EXISTS ads_user_info_1d_emr (
uid STRING COMMENT 'ID Pengguna',
region STRING COMMENT 'Wilayah, yang diperoleh berdasarkan alamat IP',
device STRING COMMENT 'Tipe terminal',
pv BIGINT COMMENT 'pv',
gender STRING COMMENT 'Jenis kelamin',
age_range STRING COMMENT 'Rentang usia',
zodiac STRING COMMENT 'Tanda zodiak'
)
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. Konfigurasikan properti penjadwalan
Setelah node dws_user_info_all_di_emr menggabungkan tabel ods_user_info_d_emr dan dwd_log_info_di_emr, node ads_user_info_1d_emr dapat dipicu untuk memproses lebih lanjut data guna menghasilkan data yang dapat dikonsumsi.
Bagian | Deskripsi | Screenshot |
Scheduling Parameter | Klik Tambah Parameter di bagian Scheduling Parameter. Di baris yang muncul di tabel, Anda dapat menentukan parameter penjadwalan dan nilai parameter penjadwalan tersebut.
|
|
Schedule | Setel parameter Rerun menjadi Allow Regardless of Running Status. |
|
Dependencies | Pastikan bahwa tabel yang dihasilkan digunakan sebagai tabel keluaran dari node saat ini. Tabel keluaran dinamai dalam format |
|
Di bagian Jadwal, setel parameter Scheduling Cycle menjadi Hari. Anda tidak perlu mengonfigurasi parameter Scheduled time secara terpisah untuk node saat ini. Waktu ketika node saat ini dijadwalkan untuk berjalan setiap hari ditentukan oleh waktu penjadwalan node beban nol workshop_start_emr dari alur kerja. Node saat ini dijadwalkan untuk berjalan setelah pukul 00:30 setiap hari.
3. Simpan konfigurasi
Dalam contoh ini, Anda dapat mengonfigurasi item konfigurasi lain yang diperlukan berdasarkan kebutuhan bisnis Anda. Setelah konfigurasi selesai, klik ikon
di bilah alat atas di tab konfigurasi node untuk menyimpan konfigurasi node.
Langkah 4: Kirim alur kerja
Setelah Anda mengonfigurasi alur kerja, uji apakah alur kerja dapat dijalankan sesuai harapan. Jika pengujian berhasil, kirim alur kerja dan tunggu alur kerja diterapkan.
Di tab konfigurasi alur kerja, klik ikon
untuk menjalankan alur kerja.Jika ikon
muncul di sebelah semua node dalam alur kerja, klik ikon
untuk mengirim alur kerja.Di kotak dialog Commit, pilih node yang ingin Anda kirim, masukkan deskripsi, lalu pilih Ignore I/O Inconsistency Alerts. Kemudian, klik Confirm.
Setelah alur kerja dikirim, Anda dapat menerapkan node dalam alur kerja.
Di sudut kanan atas tab konfigurasi alur kerja, klik Deploy. Halaman Buat Tugas Penerapan akan muncul.
Pilih node yang ingin Anda terapkan dan klik Deploy. Di kotak dialog Create Deploy Task, klik Deploy.
Langkah 5: Jalankan node di lingkungan produksi
Setelah Anda menerapkan node pada suatu hari, instance yang dihasilkan untuk node tersebut dapat dijadwalkan untuk berjalan pada hari berikutnya. Anda dapat menggunakan fitur data backfill untuk mengisi balik data untuk node dalam alur kerja yang telah diterapkan, yang memungkinkan Anda memeriksa apakah node dapat dijalankan di lingkungan produksi. Untuk informasi lebih lanjut, lihat Isi Balik Data dan Lihat Instance Pengisian Balik Data (versi baru).
Setelah Anda menerapkan node, klik Operation Center di sudut kanan atas.
Anda juga dapat mengklik Operation Center di bilah alat atas di tab konfigurasi alur kerja untuk pergi ke halaman Operation Center.
Di panel navigasi kiri halaman Pusat Operasi, pilih . Di halaman Auto Triggered Nodes, klik nama node beban nol workshop_start_emr.
Di grafik asiklik terarah (DAG) node di sebelah kanan, klik kanan node workshop_start_emr dan pilih .
Di panel Isi Balik Data, pilih node untuk mana Anda ingin mengisi balik data, konfigurasikan parameter Cap Waktu Data, lalu klik Submit and Redirect.
Di halaman pengisian balik data, klik Refresh hingga semua node SQL berhasil dijalankan.
Apa yang harus dilakukan selanjutnya
Untuk memastikan bahwa data tabel yang dihasilkan oleh node dalam skenario penjadwalan periodik memenuhi kebutuhan bisnis Anda, Anda dapat mengonfigurasi aturan pemantauan untuk memantau kualitas data tabel yang dihasilkan oleh node. Untuk informasi lebih lanjut, lihat Pantau Kualitas Data.






