Korronteen datuak prozesatzeko kanalizazioa sortzen dugu. 1. zatia

Kaixo guztioi. Lagunok, zuekin partekatzen ari gara artikuluaren itzulpena, ikastaroko ikasleentzat espresuki prestatua. Datuen ingeniaria. Joan!

Korronteen datuak prozesatzeko kanalizazioa sortzen dugu. 1. zatia

Apache Beam eta DataFlow denbora errealeko kanalizazioetarako

Gaurko argitalpena duela gutxi lanean jorratu dudan zeregin batean oinarritzen da. Benetan pozik jarri nintzen inplementatu eta egindako lana blogeko argitalpen formatuan deskribatzeaz, datuen ingeniaritza lantzeko aukera eman zidalako, baita nire taldearentzat oso erabilgarria izango zen zerbait egiteko ere. Duela ez asko konturatu nintzen erabiltzaileen erregistro handi samarra geneukala gordeta gure sistemetan gure datu-produktu batekin erlazionatuta. Inork ez zuela datu hauek erabiltzen ikusi zen, beraz, berehala interesatu zitzaidan zer ikasi genezakeen, aldizka aztertzen hasiz gero. Hala ere, hainbat arazo izan ziren bidean. Lehen arazoa izan zen datuak berehala aztertzeko erabilgarri ez zeuden testu-fitxategi ezberdin askotan gordetzen zirela. Bigarren arazoa sistema itxi batean gordeta zeudela zen, eta, beraz, ezin nuen erabili nire tresna gogokoenak datuak aztertzeko.

Datu-iturburu hau gure erabiltzaile-esperientziako soluzio batzuetan sartuz nola erraztu behar izan genuen atzitzea eta balioa gehitzea. Pixka bat pentsatu ondoren, datu horiek hodeiko datu-base batera sartzeko kanalizazio bat diseinatzea erabaki nuen, taldeak eta biok bertara sartu eta informazio batzuk sortzen hasteko. Duela pixka bat Coursera-n Datu Ingeniaritza espezializazioa amaitu ondoren, ikastaroko tresna batzuk proiektu batean erabiltzeko gogotsu nengoen.

Beraz, datuak hodeiko datu-base batean jartzeak nire lehen arazoa konpontzeko modu egokia iruditu zitzaidan, baina zer egin nezakeen 2. zenbakiarekin? Zorionez, bazegoen datu hauek Python eta Google Cloud Platform (GCP) bezalako tresnak sartzeko ingurune batera eramateko modu bat. Hala ere, prozesu luzea izan zen, beraz, datuen transferentzia amaitu arte itxaron bitartean garatzen jarraitzeko aukera emango zidan zerbait egin behar nuen. Lortu nuen irtenbidea liburutegia erabiliz datu faltsuak sortzea izan zen Mitxelena Python-en. Ez nuen inoiz liburutegi hau erabili, baina azkar konturatu nintzen zein erabilgarria zen. Ikuspegi hau erabiltzeari esker, kodea idazten eta kanalizazioa probatzen hasi nintzen benetako daturik gabe.

Hori esanda, argitalpen honetan GCPn eskuragarri dauden teknologia batzuk erabiliz goian deskribatutako kanalizazioa nola eraiki nuen partekatuko dut. Zehazki, erabiliko dut Apache Beam (Python bertsioa), Dataflow, Pub/Sub eta Big Query erabiltzaileen erregistroak biltzeko, datuak eraldatzeko eta datu-basera transferitzeko, azterketa gehiago egiteko. Nire kasuan, Beam-en lotearen funtzionaltasuna baino ez nuen behar nire datuak denbora errealean iristen ez zirenez, beraz Pub/Sub ez zen beharrezkoa. Hala ere, streaming bertsioari eutsiko diot, praktikan topa dezakezuna hori baita.

GCP eta Apache Beam-en sarrera

Google Cloud Platform-ek datu handiak prozesatzeko tresna benetan erabilgarriak eskaintzen ditu. Hona hemen erabiliko ditudan tresna batzuk:

  • Pub/Sub Datuak denbora errealean jasotzeko aukera ematen duen Argitaratzaile-Harpidedun eredua erabiltzen duen mezularitza-zerbitzua da.
  • datu-fluxua datu kanalizazioak eraikitzea errazten duen zerbitzua da eta azpiegitura eskalatzea bezalako arazoak automatikoki konpontzen dituena, hau da, gure kanalizaziorako kodea idaztera bideratu gaitezke.
  • BigQuery hodeiko datu biltegiratze bat da. Beste SQL datu-base batzuk ezagutzen badituzu, BigQuery-k ez du denbora asko beharko asmatuko.
  • Azkenik, Apache Beam erabiliko dugu, bereziki Python bertsioan zentratuz gure kanalizazioa eraikitzeko. Tresna honek GCPrekin integratzen den korronte edo sorta prozesatzeko kanalizazio bat sortzeko aukera emango digu. Bereziki erabilgarria da prozesaketa paralelorako eta ETL motako zereginetarako egokia da, beraz, eraldaketak edo kalkuluak egiten ditugun bitartean datuak leku batetik bestera eraman behar baditugu, Beam aukera ona da.

GCP-n tresna ugari daude eskuragarri, beraz, zaila izan daiteke horien guztien jarraipena egitea eta zein den haien helburua, baina hona hemen horien laburpena erreferentzia gisa.
GCP-n tresna ugari daude eskuragarri, beraz, zaila izan daiteke horiek guztiak estaltzea, haien helburua barne, baina hala ere Hemen zure erreferentziarako laburpena.

Gure kanalizazioaren bistaratzea

Ikus ditzagun gure kanalizazioaren osagaiak hemen 1. irudia. Maila altuan, erabiltzaileen datuak denbora errealean bildu, prozesatu eta BigQuery-ra elikatu nahi ditugu. Erregistroak erabiltzaileek produktuarekin elkarreragiten dutenean sortzen dira, zerbitzariari eskaerak bidaliz, eta gero erregistratzen dira. Datu hauek bereziki erabilgarriak izan daitezke erabiltzaileek gure produktuarekin nola elkarreragiten duten eta ondo funtzionatzen ari den ulertzeko. Oro har, kanalizazioak fase hauek izango ditu:

Beam-ek prozesu hau oso erraza egiten du, streaming datu-iturburu bat edo CSV fitxategi bat izan eta batch prozesatzea nahi badugu. Geroago ikusiko duzu aldaketa minimoak besterik ez direla behar den kodean batetik bestera aldatzeko. Hau da Beam erabiltzearen abantailetako bat.

Korronteen datuak prozesatzeko kanalizazioa sortzen dugu. 1. zatia
1. Irudia: Datu-bide nagusia: Iturria:

Fakerrekin pseudodatuak sortzea

Lehen aipatu dudan bezala, datuetarako sarbide mugatua zela eta, benetako datuen formatu berean sasi-datuak sortzea erabaki nuen. Ariketa oso erabilgarria izan zen, datuen zain nengoen bitartean kodea idatzi eta kanalizazioa probatu ahal izan nuelako. Begirada bat ematea proposatzen dizut dokumentazioa Faker liburutegi honek zer gehiago eskaintzen duen ikusi nahi baduzu. Gure erabiltzaile-datuak beheko adibidearen antzekoak izango dira. Formatu honetan oinarrituta, datuak lerroz lerro sor ditzakegu denbora errealeko datuak simulatzeko. Erregistro hauek informazioa ematen digute, hala nola data, eskaera mota, zerbitzariaren erantzuna, IP helbidea, etab.

192.52.197.161 - - [30/Apr/2019:21:11:42] "PUT /tag/category/tag HTTP/1.1" [401] 155 "https://harris-lopez.com/categories/about/" "Mozilla/5.0 (Macintosh; PPC Mac OS X 10_11_2) AppleWebKit/5312 (KHTML, like Gecko) Chrome/34.0.855.0 Safari/5312"

Goiko lerroan oinarrituta, gure aldagaia sortu nahi dugu LINEbeheko giltza kizkurdun 7 aldagaiak erabiliz. Gure taula-eskeman aldagai-izen gisa ere erabiliko ditugu pixka bat geroago.

LINE = """
{remote_addr} - - [{time_local}] "{request_type} {request_path} HTTP/1.1" [{status}] {body_bytes_sent} "{http_referer}" "{http_user_agent}"
"""

Batch prozesatzea egingo bagenu, kodea oso antzekoa izango litzateke, nahiz eta denbora tarte batean lagin multzo bat sortu beharko genukeen. Faltsu bat erabiltzeko, besterik gabe, objektu bat sortu eta behar ditugun metodoei deitzen diegu. Bereziki, Faker erabilgarria izan zen IP helbideak eta webguneak sortzeko. Metodo hauek erabili ditut:

fake.ipv4()
fake.uri_path()
fake.uri()
fake.user_agent()

from faker import Faker
import time
import random
import os
import numpy as np
from datetime import datetime, timedelta



LINE = """
{remote_addr} - - [{time_local}] "{request_type} {request_path} HTTP/1.1" [{status}] {body_bytes_sent} "{http_referer}" "{http_user_agent}"
"""


def generate_log_line():
    fake = Faker()
    now = datetime.now()
    remote_addr = fake.ipv4()
    time_local = now.strftime('%d/%b/%Y:%H:%M:%S')
    request_type = random.choice(["GET", "POST", "PUT"])
    request_path = "/" + fake.uri_path()

    status = np.random.choice([200, 401, 404], p = [0.9, 0.05, 0.05])
    body_bytes_sent = random.choice(range(5, 1000, 1))
    http_referer = fake.uri()
    http_user_agent = fake.user_agent()

    log_line = LINE.format(
        remote_addr=remote_addr,
        time_local=time_local,
        request_type=request_type,
        request_path=request_path,
        status=status,
        body_bytes_sent=body_bytes_sent,
        http_referer=http_referer,
        http_user_agent=http_user_agent
    )

    return log_line

Lehen zatiaren amaiera.

Datozen egunetan zurekin partekatuko dugu artikuluaren jarraipena, baina orain ohiko iruzkinen zain gaude ;-).

Iturria: www.habr.com

Gehitu iruzkin berria