Giter VIP home page Giter VIP logo

big-bata's Introduction

Big-Bata

Aufgabenstellung

Mit dem folgenden Workflow soll es möglich werden, Addressen anhand der von OpenAddresses.io bereitgestellten Daten zu validieren.

Die Address-Daten können als Zip-Datei heruntergeladen werden, deren Inhalt in den folgenden Abbildungen dargestellt wird.

Alt text Alt text

Um Addressen anhand dieser Daten validieren zu können, soll der folgende Workflow realisiert werden:

  • Sammeln von Daten aus OpenAddresses.io
  • Speicherung der Rohdaten (CSV-Dateien) in HDFS (nach Ländern gegliedert)
  • Optimierung, Reduzierung und Bereinigung der Rohdaten
  • Exportierung der Adressdaten in eine Endbenutzerdatenbank (z.B. MySQL,MongoDB....)
  • Bereitstellung eines einfachen HTML-Frontends:
    • aus der Endbenutzerdatenbank lesen
    • Benutzereingaben verarbeiten (Straße, Ort, Postleitzahl....)
    • Validierung von Benutzereingaben anhand von OpenAddress-Daten am Ende des Vorgangs.
    • Anzeigen des Ergebnisses (echte oder nicht echte Adresse)
  • Der gesamte Daten-Workflow muss innerhalb eines ETL Workflow-Tools (Airflow/Pentaho) implementiert und automatisch ausgeführt werden.

Umsetzung

ETL Workflow

Der ETL-Workflow wird mit dem Tool Airflow realisiert. Er implementiert dabei den im Folgenden dargestellten Ablauf

  • Herunterladen der Address-Daten als Zip-Datei und entpacken.
  • Kopieren der relevanten Daten (nur Csv-Dateien und Länder-Ordner) ins HDFS
  • Extrahieren der nötigen Daten in eine neue Hive-Tabelle (Land, Stadt, Postleitzahl, Straße, Hausnummer)
  • Exportieren der Hive-Tabelle in eine MySql-Datenbank
  • Validierung der Daten durch eine NodeJs-Webseite mit Zugriff auf die MySql-Datenbank

Alt text

Airflow Tasks

Im Folgenden werden die jeweiligen Airflow Tasks beschrieben, mit welchen der o.g. Ablauf implementiert wird

Task Beschreibung
rm_local_import_dir Löscht den import Ordner "/home/airflow/openaddresses/" falls vorhanden
create_local_import_dir Erstellt einen neuen import ordner "/home/airflow/openaddresses/"
download_address_data Lädt die Daten als Zip-datei herunter "/home/airflow/openaddresses/openaddr-collected-europe.zip"
unzip_adress_data Entpackt die Zip-Datei in den Ordner "/home/airflow/openaddresses/openaddr-collected-europe"
create_hive_table_address_data Erstellt die Hive Tabelle "address_data" für die Address Daten, die nach Jahr, Monat, Tag, Land partitioniert ist
create_hdfs_address_data_dir_X Erstellt für jedes Land einen Ordner im HDFS mit dem Schema "/user/hadoop/openaddresses/raw/Jahr/Monat/Tag/Land"
dummy0 Wartet, bis alle Ordner erstellt wurden
hdfs_put_address_data_Land Kopiert alle Csv-Dateien aus jedem Ordner in den jeweiligen HDFS Ordner
dummy1 Wartet, bis alle Daten ins HDFS kopier wurden
hive_add_partition_address_data_Land Fügt den Inhalt jedes Ordners als partition in die Hive-Tabelle ein
dummy2 Wartet, bis alle partitionen zur Hive-Tabelle hinzugefügt worden sind
create_hive_table_final_address_data Erstellt die Tabelle "final_address_data", die die bereinigten Daten beinhalten wird
hive_insert_overwrite_final_address_data Kopiert die spalten Country, City, Postcode, Street, Number, Hash in die Tabelle "final_address_data"
create_table_remote Erstellt die Tabelle "final_address_data" in der Mysql Datenbank für die bereinigten Daten, falls noch nicht vorhanden
delete_from_remote Löscht alle alten Daten aus der Tabelle "final_address_data" falls vorhanden
hive_to_mysql_Land kopiert alle Daten aus der Hive Tabelle "final_address_data" nacheinander nach Ländern in die MySql tabelle "final_address_data"

Webseite

In der Webseite können Addressen in das Formular eingegeben werden. dabei können auch Felder frei gelassen werden. Nach Drücken des "Validate"-Buttons wird angezeigt, ob die Addresse gültig ist oder nicht.

Alt text

Projektaufbau

Container

Für die Realisierung werden die folgenden vier Docker Container verwendet:

Container Beschreibung DockerHub
hadoop Container mit Hive und Hadoop https://hub.docker.com/repository/docker/as14df/hadoop
airflow Container mit Airflow https://hub.docker.com/repository/docker/as14df/airflow_image
mysql Container mit Mysql Datenbank https://hub.docker.com/repository/docker/as14df/mysql
webapp Container mit NodeJs Webseite https://hub.docker.com/repository/docker/as14df/node-web-app

Ordner und Dateien

Airflow Beinhaltet alle Dags und Operatoren
address_validation.py Beinhaltet den DAG
hdfs_operators.py Definiert alle vorhandenen Operatoren
hdfs_put_operator.py Kopiert alle Csv-Dateien und alle Länder-Ordner ins HDFS
zip_file_operator.py Entpackt eine Zip-Datei
Images Beinhaltet Bilder für die README.md
SqlQueries Beinhaltet alle DDL Sql-Queries
Hive Beinhaltet alle DDL Sql-Queries für Hive
address_data.sql Beinhaltet das Create-Statement der address_data Tabelle
address_data_alter.sql Beinhaltet das Alter-Statement der address_data Tabelle
final_address_data.sql Beinhaltet das Create-Statement der final_address_data Tabelle
final_address_data_overwrite.sql Beinhaltet das Insert-Overwrite-Statement der final_address_data Tabelle
MySql Beinhaltet alle DDL Sql-Queries für MySql
final_address_data.sql Beinhaltet das Create-Statement der final_address_data Tabelle
WebApp Beinhaltet die relevanten Dateien für die Webseite
index.ejs Beinhaltet den HTML Code der Webseite
server.js Beinhaltet den Server Code der Webseite
README.md Beinhaltet die Dokumentation des Projekts

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.