Apache HBase - Densetsu.org

Werbung
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!
Herunterladen