Mit Apache Ozone ist ein weiteres verteiltes Dateisystem auf den Markt gekommen, welches eine Alternative zu der Hadoop-Kernkomponente HDFS darstellt. Allerdings ist es noch nicht möglich ein automatisiertes In-Place-Upgrade durchzuführen. Nähere Informationen dazu finden Sie hier.
Es ist also noch notwendig die Hadoop-Komponenten einzeln auf die Verwendung von Ozone umzustellen, wenn man vom HDFS umsteigen möchte.
In diesem Artikel dreht sich alles um exakt diesen Umstieg vom HDFS auf Ozone und klärt welche Hadoop-Komponenten überhaupt fähig sind mit Ozone zu arbeiten und wie sich diese Komponenten dafür konfigurieren lassen.
Was ist Apache Ozone?
Ozone ist ein Object Store für Hadoop-Distributionen. Der Namespace besteht aus Volumes, welche wiederum in Buckets unterteilt werden. In diesen Buckets werden dann Keys abgespeichert. Diese Keys stellen für den Benutzer seine Dateien da. Volumes können nur vom Administrator erstellt werden. In den meisten Fällen erhält jeder Benutzer ein Volume, in dem er Buckets erstellen und seine Daten ablegen kann. Ein beispielhafter Pfad zu einem Key wäre:
ofs://ozone1/volume1/bucket1/user/
ozone1 ist dabei die ozone.service.id welche per Default ozone1 ist.
In Ozone sind die Daten in 256MB große Blöcke aufgeteilt. Diese Blöcke werden zu Containern zusammengefasst, welche standardmäßig eine feste Größe von 5GB haben. Anstatt der Blöcke werden in Ozone die Container repliziert. Dadurch ist es nicht mehr wichtig, ob es sich um große oder kleine Dateien handelt.
Ozone als Default File System nutzen
Um Apache Ozone nutzen zu können, muss mindestens ein Volume und ein dazugehöriger Bucket erstellt werden. In diesem Fall legen wir den Bucket ‚bucket1' und das Volume ‚volume1' an. Die Befehle bei Ozone sind nahezu identisch wie beim HDFS. Es ist allerdings wichtig, dass Ozone explizit angesprochen wird. Das ist entweder mit ofs oder mit o3fs möglich. Mit ofs wird der Namespace global angesprochen. Das ermöglicht eine Auflistung aller Volumes und Buckets. Der Prefix o3fs bezieht sich auf einen konkreten Bucket. In diesem Fall wird die ofs-Schreibweise verwendet, da sich das Kommando auf das Volume bezieht.
hdfs dfs -mkdir -p ofs://ozone1/volume1/bucket1
Ziel ist es, dass dieser Bucket als Standard-Dateisystem dient und damit das HDFS ablöst. Da wir in diesem Fall einen einzelnen Bucket ansprechen, wird hier die Schreibweise o3fs verwendet. Dafür müssen in der Konfigurationsdatei core_site_safty_valve einige neue Eigenschaften hinzugefügt werden.
Name: fs.defaultFS
Value: o3fs://bucket1.volume1.ozone1
Name: fs.o3fs.impl
Value: org.apache.hadoop.fs.ozone.OzoneFileSystem
Durch die Eigenschaft fs.defaultFS wird der soeben erstellte Bucket ‚bucket1' in dem Volume ‚volume1' als neues Standard-Dateisystem verwendet.
Nach Übernahme dieser Änderung nutzen alle Hadoop-Komponenten Ozone anstelle des HDFS. Allerdings benötigen einige der Komponenten noch weitere Konfigurationsanpassungen, um Ozone nutzen zu können.
Apache Spark auf Ozone ausführen
Damit Spark Jobs auf dem Ozone ausführen kann, muss ein Verzeichnis applicationHistory erstellt werden.
hdfs dfs -mkdir -p ofs://ozone1/volume1/bucket1/user/spark/applicationHistory
In einem kerberisierten Cluster muss in der Spark Konfigurationsdatei spark-conf/spark-defaults.conf_client_config_safety_valve definiert werden, sodass nun ein Bucket aus Ozone verwendet wird. Die Konfigurationsanpassung lautet wie folgt.
spark.yarn.access.hadoopFileSystems=o3fs://bucket1.volume1.ozone1
Apache Hive benötigt Anpassungen
Auch Hive benötigt Anpassungen, damit Ozone verwendet werden kann. Dafür muss die Einstellung hive_warehouse_directory auf ein Ozone Bucket angepasst werden.
hive_warehouse_directory=o3fs://bucket1.volume1.ozone1/warehouse/tablespace/managed/hive
Wird zusätzlich Hive on Tez verwendet, muss die Konfiguration hive_service_config_safety_valve angepasst werden. Dort ist folgende Eigenschaft notwendig.
Name: metastore.warehouse.tenant.colocation
Value: true
Durch diese Variable ist es möglich, einen Speicherort für verwaltete Tabellen außerhalb des Stammverzeichnisses des Warehouse festzulegen.
Apache Impala - Unterstützt aktuell Ozone noch nicht vollständig
Impala unterstützt zum momentanen Zeitpunkt Ozone nicht als Standard-Dateisystem. Näheres dazu finden sie hier. Daher muss für Impala das Standard-Dateisystem auf HDFS zurückgestellt werden. Dazu wird in der Konfiguration impalad_core_site_safety_valve folgendes eingetragen.
Name: fs.defaultFS
Value: hdfs://nameservice1
Die Verwendung von Ozone ist in Impala durch die Erstellung einer external table trotzdem möglich. Ein Befehl dafür wäre beispielhaft:
create external table impalaTest (col int) location 'o3fs:/bucket1.volume1.ozone1/impalaTest';
Die erstellte Tabelle nutzt Ozone als Speicherort.
Apache HBase - hsync noch nicht unterstützt
In HBase muss das Root Directory ebenfalls in den Ozone-Bucket gelegt werden.
hbase.rootdir = o3fs://bucket1.volume1.ozone1/hbase
Allerdings wird hsync, welches normalerweise von HBase verwendet wird, momentan nicht von Ozone unterstützt. Näheres dazu finden sie hier.
Dies führt dazu, dass hsync in der hbase_service_config_safety_valve deaktiviert werden muss, wodurch Inkonsistenzen bei einem Absturz von HBase-Servern entstehen können. Ein Einsatz in produktiven Umgebungen ist daher nicht zu empfehlen.
hbase.unsafe.stream.capability.enforce = false
Weiterhin muss das HBase-Verzeichnis in Zookeeper einmal vollständig gelöscht werden, damit der Service Monitor nach dem Neustart den HBase Master finden kann. Nach diesem Vorgang ist ein Neustart des gesamten Clusters erforderlich.
Kann man Apache Solr mit Ozone nutzen?
Solr kann leider momentan nicht mit Ozone verwendet werden, da für das data_dir eine sogenannte directoryFactory verwendet wird. Für das HDFS ist dies die HdfsDirectoryFactory. Zum aktuellen Zeitpunkt existiert keine directoryFactory für Ozone. https://solr.apache.org/guide/7_1/datadir-and-directoryfactory-in-solrconfig.html
Fazit
Dieser Artikel hat gezeigt, dass Ozone auf einem guten Weg ist, das HDFS in immer mehr Services zu ersetzen. Allerdings ist Ozone noch nicht so weit entwickelt, dass es HDFS komplett ersetzen kann. Es bietet sich an, Ozone zu Testzwecken zu verwenden.Allerdings ist es für einen Einsatz in produktiven Clustern noch nicht geeignet.
Interesse geweckt?
Sie haben Interesse an einer Weiterbildung oder Fragen zum Thema? Sprechen Sie uns an oder besuchen Sie einen unserer Kurse aus unserem Seminarshop:
Zu unseren SeminarenWeitere Infos zu Ozone
Ozone ist ein skalierbarer, redundanter und verteilter Objektspeicher für Hadoop. Weitere Informationen zu Apache Ozone erhalten Sie hier
Apache Software Foundation / Ozone