Apache HBase A BigTable Column Store on top of Hadoop Ich bin... ● Mitch Köhler ● Selbstständig seit 2010 ● Tätig als – Softwareentwickler – Softwarearchitekt ● Student an der OVGU seit Oktober 2011 ● Schwerpunkte – Client/Server, hauptsächlich im Web – Intelligente Systeme (Big Data, Information Retrieval, ...) HBase ist... ● Eine verteilte Datenbank nach dem Vorbild von Googles BigTable Paper BigTable – eine sortierte Map ● <RowKey, ColumnFamily, ColumnQualifier, Timestamp, Value> ● { ● "Key_1" : { ● "data" : { "myColumn" : { ● ● "4" : "Version_4-AKTUELL!", ● "3" : "Version_3", ● "2" : "Version_2", ● "1" : "Version_1" } ● } ● ● } HBase ist... ● ● Eine verteilte Datenbank nach dem Vorbild von Googles BigTable Paper Baut auf Hadoop auf ● Hohe Integration zwischen HBase und Hadoop ● OpenSource ● Thema dieses Vortrages :-) A few words of caution ● vergesst, was ihr über relationale Datenbanken wisst ● ● vergesst, was eine Tabelle in einem RDBMS darstellt ● ● Column Oriented Databases sind NICHT relational In HBase sind Tabellen NUR ein Ort, um Daten zu speichern → sie haben nicht die selbe semantische Bedeutung, wie in einem RDBMS! vergesst, wie Spalten in einem RDBMS arbeiten! ● HBase ist eine multidimensionale, sortierte Map! A few words of caution ● Keine Joins! ● Keine Transaktionen! ● Atomizität wird nur auf Operationen je Row garantiert ● Keine Typisierung der Spalten! ● Kein SQL! ● KEIN Ersatz für ein RDBMS! ● HBase ist in manchen Fällen wesentlich komplexer! A few words of caution KEIN ERSATZ für eine relationale Datenbank! HBase rockt! ● Millionen und abermillionen Writes/Reads pro Sekunde ● Facebook: 75 MRD Read/Writes per Day (Nov. 2011) – ● Bis zu 1.5 Millionen Read/Writes per Second Skaliert linear horizontal (und wurde dafür gebaut!) ● Daten werden sortiert gespeichert! ● Datenanalyse mit Hadoop MapReduce at Open Time Series Database ● Monitoring Tool, um Metriken von tausenden Servern parallel und in real-time zu verarbeiten ● Eigentlich lässt sich alles mögliche damit monitoren – Klickzahlen – Visits – Netzauslastung – Kekse ● Daten bleiben historisch erhalten ● Wie machen die das? Open Time Series Database ● MetricID (z.b. myservice.latency.avg) ● Timestamp (z.B. 1292148123) ● Tags ● Bestehen aus einem Namen als Kategorie und einer Unterkategorie – ● z.B. Name: Host, Unterkategorie: web32 Der zu speichernde Wert Open Time Series Database ● RowKey: ● ● Also zum Beispiel ● ● MetricID_Timestamp_<<Tags>> myservice.latency.avg_1292148123_Type:GET_host:web32 Timestamps werden auf 60 Minuten normiert! Design des RowKeys ● ● für festgelegte Zeitspanne können Analysen je RequestType und Host gefahren werden Beispiel: ● FROM – ● myservice.latency.avg_1292100000_Type:GET_host:web32 TO – myservice.latency.avg_1292200000_Type:GET_host:web32 Design des RowKeys ● MetricID_Timestamp_<<Tags>> ● myservice.latency.avg_1292148123_Type:GET_host:web32 ● Daten zum selben Service liegen beieinander ● jüngste Daten je Service zuerst ● ● für festgelegte Zeitspanne können Analysen je RequestType und Host gefahren werden Timestamps werden auf 60 Minuten normiert! Design des RowKeys ● RowKey ist Partitionierungskriterium ● HBase splittet eine Region, wenn ● Die Region unter zu hoher Last steht – Die Region zu groß wird HBase splittet aber niemals eine Row! – Eine Row liegt immer vollständig in einer Region – Rows sollten daher nicht zu groß werden – Open Time Series Database ● RowKey ● ● Wie sieht Column Qualifier aus? ● ● myservice.latency.avg_1292148123_Type:GET_host:web32 Enthält zeitliches Delta + Datentype Value: zu speichernder Wert für Metrik Open Time Series Database ● RowKey ● ● Wie sieht Column Qualifier aus? ● ● ● myservice.latency.avg_1292148123_Type:GET_host:web32 Delta von Timestamp des RowKeys und aktueller Zeit 4-Bit-Flag, um Datentyp des Wertes festzulegen Value: zu speichernder Wert für Metrik Facebooks Message Search ● HBases Versioning-Feature als Inverted Index ● Column Qualifier ● ● Term (z.B. „Kekse“) Versionen ● Verweise auf Nachrichten, die diesen Term enthalten Facebooks Message Search { "user_mitch" : { "msgbox_index" : { "Kekse" : { "13576884474" : "MSG_Bob", "13576844474" : "MSG_Bob" }, "Schokokekse" : { "13579885434" : "MSG_Bob", "13576844474" : "MSG_Eve" } One more thing... ● Support von mir ● ● Du bist ● ● ● ● [email protected] engagiert neugierig und an aufstrebenden Technologien interessiert HTML5 und Web-Technologien sind Dir ein Begriff? Dann melde Dich bei mir!