Einführung
Apache Accumulo ist eine Open-Source-verteilte NoSQL-Datenbank, die auf der BigTable von Google basiert. Es wird verwendet, um CRUD-Vorgänge (Create Read Update Delete) für extrem große Datenmengen (oft als Big Data bezeichnet) effizient auszuführen. Accumulo wird anderen ähnlich verteilten Datenbanken (wie HBase oder CouchDB) vorgezogen, wenn ein Projekt eine differenzierte Sicherheit in Form einer Zugriffskontrolle auf Zellebene erfordert.
Accumulo basiert auf anderer Apache-Software. Accumulo stellt seine Daten in Form von Schlüssel-Wert-Paaren dar und speichert diese Daten als Dateien in HDFS (Apaches Hadoop Distributed File System). Es verwendet auch Apache ZooKeeper, um Einstellungen zwischen all seinen Prozessen zu synchronisieren.
In diesem Tutorial erfahren Sie, wie Sie:
-
Installieren und konfigurieren Sie Apache HDFS und ZooKeeper: Diese Systeme müssen aktiv sein, bevor Accumulo gestartet wird
-
Installieren und konfigurieren Sie eine eigenständige Instanz von Accumulo
Voraussetzungen
Sie benötigen Folgendes:
-
Ubuntu 14.04 Server (vorzugsweise 32-Bit)
-
Ein sudo Benutzer
-
Mindestens 2 GB swap space
Schritt 1 - Installieren und Konfigurieren von JDK 7
Accumulo, HDFS und ZooKeeper sind alle in Java geschrieben und benötigen zum Ausführen eine JVM (Java Virtual Machine). Beginnen wir also mit der Installation des JDK.
Aktualisieren Sie den Paketlistenindex.
sudo apt-get update
Installieren Sie OpenJDK 7 mit + apt-get
.
sudo apt-get install openjdk-7-jdk
Verwenden Sie "+ nano", um Ihre Shell-Umgebungsdatei "+ .bashrc" zu bearbeiten.
nano ~/.bashrc
Fügen Sie am Ende der Datei "+ JAVA_HOME +" als Umgebungsvariable hinzu.
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
_ * Hinweis *: Der Wert von "+ JAVA_HOME " kann je nach Architektur Ihres Servers unterschiedlich sein. Auf einem 64-Bit-Server wäre der Wert beispielsweise " / usr / lib / jvm / java-7-openjdk-amd64 ". Sie können den genauen Pfad anzeigen, indem Sie den Inhalt des Verzeichnisses ` / usr / lib / jvm / +` auflisten. Wenn sich Ihr Pfad von dem hier gezeigten unterscheidet, stellen Sie sicher, dass Sie hier und anderswo die entsprechenden Änderungen vornehmen. _
Speichern Sie die Datei und beenden Sie + nano +
. Aktualisieren Sie die Umgebungsvariablen der aktuellen Sitzung, indem Sie Folgendes eingeben:
. ~/.bashrc
Bearbeiten Sie die Konfigurationsdatei "+ java.security " der JVM mit " nano +".
sudo nano $JAVA_HOME/jre/lib/security/java.security
Suchen Sie nach dem Parameter "+ securerandom.source" und ändern Sie die Zeile so, dass sie so aussieht:
securerandom.source=file:/dev/./urandom
Speichern Sie die Datei und beenden Sie + nano +
. Diese Änderung ist erforderlich, um die Startzeit der JVM zu verringern. Wenn Sie diese Änderung nicht vornehmen, kann dies auf den meisten virtuellen Servern zu sehr langen Startzeiten führen.
Schritt 2 - Installieren Sie SSH
Hadoop benötigt SSH und Rsync, um seine Daemons zu verwalten. Installieren Sie sie mit dem folgenden Befehl:
sudo apt-get install ssh rsync
Schritt 3 - Aktivieren Sie die kennwortlose SSH-Konnektivität
Hadoop sollte in der Lage sein, über SSH eine Verbindung zu Ihrem Server herzustellen, ohne zur Eingabe eines Kennworts aufgefordert zu werden.
Erzeugen Sie einen RSA-Schlüssel mit + ssh-keygen
.
ssh-keygen -P ''
Drücken Sie * ENTER *, wenn Sie dazu aufgefordert werden, um die Standardwerte auszuwählen.
Fügen Sie den generierten Schlüssel zur Datei + authorized_keys +
hinzu.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Die Werte "+ localhost " und " 0.0.0.0 " sollten zur Liste der bekannten Hosts hinzugefügt werden. Der einfachste Weg, dies zu tun, besteht darin, den Befehl ` ssh +` auszuführen.
Fügen wir zuerst + localhost +
hinzu.
ssh localhost
Sie werden von einer Nachricht aufgefordert, die wie folgt aussieht:
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is bf:01:63:5b:91:aa:35:db:ee:f4:7e:2d:36:e7:de:42.
Are you sure you want to continue connecting (yes/no)?
Geben Sie "+ yes " ein und drücken Sie " ENTER".
Wenn die Anmeldung abgeschlossen ist, beenden Sie die untergeordnete SSH-Sitzung, indem Sie Folgendes eingeben:
exit
Fügen wir jetzt + 0.0.0.0 +
hinzu.
ssh 0.0.0.0
Geben Sie "+ yes " ein und drücken Sie " ENTER", wenn Sie dazu aufgefordert werden.
Verlassen Sie die untergeordnete SSH-Sitzung erneut, indem Sie Folgendes eingeben:
exit
Das SSH-Setup ist jetzt abgeschlossen.
Schritt 4 - Erstellen Sie ein Download-Verzeichnis
Sie werden ein paar Dateien für dieses Tutorial herunterladen. Obwohl dies nicht wirklich notwendig ist, ist es eine gute Idee, alle Ihre Downloads in einem separaten Verzeichnis zu speichern.
mkdir -p ~/Downloads
Geben Sie das Verzeichnis ein.
cd ~/Downloads
Schritt 5 - Laden Sie Apache Hadoop herunter
Zum Zeitpunkt des Schreibens ist die neueste stabile Version von Hadoop * 2.6.0 *. Lade es mit + wget +
herunter.
wget "http://www.eu.apache.org/dist/hadoop/common/stable/"
Schritt 6 - Laden Sie Apache ZooKeeper herunter
Die neueste stabile Version von ZooKeeper ist * 3.4.6 *. Lade es mit + wget +
herunter.
wget "http://www.eu.apache.org/dist/zookeeper/stable/"
Schritt 7 - Laden Sie Apache Accumulo herunter
Die neueste stabile Version von Accumulo ist * 1.6.1 *. Lade es mit + wget +
herunter.
wget "http://www.eu.apache.org/dist/accumulo/1.6.1/"
Schritt 8 - Erstellen Sie ein Installationsverzeichnis
Erstellen Sie ein Verzeichnis, um alle unsere Accumulo-bezogenen Installationen zu speichern.
mkdir -p ~/Installs
Geben Sie das Verzeichnis ein.
cd ~/Installs
Schritt 9 - Installieren und Konfigurieren von Hadoop
Verwenden Sie den Befehl "+ tar", um den Inhalt von "+ hadoop-2.6.0-src.tar.gz" zu extrahieren.
tar -xvzf ~/Downloads/hadoop-2.6.0.tar.gz
_ * Hinweis: * Wenn Sie eine andere Version dieser Software installiert haben, verwenden Sie bitte die entsprechende Version in Ihrem Dateinamen. _
Verwenden Sie "+ nano ", um " hadoop-env.sh +" zu öffnen.
nano ~/Installs/hadoop-2.6.0/etc/hadoop/hadoop-env.sh
Suchen Sie nach der Zeile, die mit + export JAVA_HOME +
beginnt, und ändern Sie sie in:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
Stellen Sie sicher, dass dieser Wert mit dem Wert identisch ist, den Sie in + .bashrc
festgelegt haben.
Standardmäßig generiert Hadoop viele Debug-Protokolle. Um dieses Verhalten zu beenden, suchen Sie nach der Zeile, die mit + export HADOOP_OPTS
beginnt, und ändern Sie sie in:
export HADOOP_OPTS="$HADOOP_OPTS -XX:-PrintWarnings -Djava.net.preferIPv4Stack=true"
Speichern und schließen.
Verwenden Sie "+ nano", um "+ core-site.xml" zu öffnen.
nano ~/Installs/hadoop-2.6.0/etc/hadoop/core-site.xml
Fügen Sie einen + <property> +
Block mit dem Namen + fs.defaultFS +
hinzu. Sein Wert sollte auf den Hostnamen und den Port des Namensknotens verweisen (in unserem Fall ist es "+ localhost " und der Standardport " 9000 +"). Wenn Sie die Kommentare ignorieren, bearbeiten Sie Ihre Datei so, dass sie folgendermaßen aussieht:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
Speichern und schließen.
Verwenden Sie + nano
, um` + hdfs-site.xml` zu öffnen.
nano ~/Installs/hadoop-2.6.0/etc/hadoop/hdfs-site.xml
Die folgenden Eigenschaften müssen zu dieser Datei hinzugefügt werden:
-
+ dfs.replication +
: Diese Zahl gibt an, wie oft ein Block von Hadoop repliziert wird. Standardmäßig erstellt Hadoop für jeden Block "+ 3 " - Replikate. Verwenden Sie in diesem Tutorial den Wert " 1 +", da wir keinen Cluster erstellen. -
+ dfs.name.dir +
: Dies zeigt auf einen Ort im Dateisystem, an dem der Namensknoten die Namenstabelle speichern kann. Sie müssen dies ändern, da Hadoop standardmäßig "+ / tmp " verwendet. Verwenden wir " hdfs_storage / name +", um die Namenstabelle zu speichern. -
+ dfs.data.dir +
: Dies zeigt auf einen Ort im Dateisystem, an dem der Datenknoten seine Blöcke speichern soll. Sie müssen dies ändern, da Hadoop standardmäßig "+ / tmp " verwendet. Verwenden wir " hdfs storage / data", um die Datenblöcke zu speichern.
Wenn Sie die Kommentare ignorieren, sollte Ihre Datei nach dem Hinzufügen dieser Eigenschaften folgendermaßen aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>hdfs_storage/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>hdfs_storage/data</value>
</property>
</configuration>
Verwenden Sie "+ nano", um eine neue Datei mit dem Namen "+ mapred-site.xml" zu erstellen.
nano ~/Installs/hadoop-2.6.0/etc/hadoop/mapred-site.xml
Fügen Sie dieser Datei eine Eigenschaft mit dem Namen "+ mapred.job.tracker " hinzu. Diese Eigenschaft enthält den Hostnamen und die Portnummer, auf denen der MapReduce-Job-Tracker ausgeführt wird. Verwenden Sie für unser Setup " localhost " und den Standardport " 9001 +".
Fügen Sie der Datei den folgenden Inhalt hinzu:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
Geben Sie das Basisverzeichnis von Hadoop ein (dies ist wichtig, da Hadoop das Verzeichnis + hdfs_storage +
im aktuellen Verzeichnis erstellt).
cd ~/Installs/hadoop-2.6.0/
Der NameNode kann jetzt initialisiert werden, indem Sie Folgendes eingeben:
~/Installs/hadoop-2.6.0/bin/hdfs namenode -format
Sie sollten ziemlich viel Ausgabe sehen.
Starten Sie als Nächstes den NameNode, indem Sie Folgendes eingeben:
~/Installs/hadoop-2.6.0/sbin/start-dfs.sh
Warten Sie ein oder zwei Minuten, bis es beginnt. Nach dem Start können Sie mit einem Browser "+ http: // <your-ip>: 50070 / +" aufrufen und über die Weboberfläche des NameNode navigieren.
image: https://assets.digitalocean.com/articles/accumulo_nosqldatabase/1.png [Hadoop NameNode-Weboberfläche]
Fehlerbehebung
Wenn Sie nicht auf die Weboberfläche zugreifen können, überprüfen Sie mit dem folgenden Befehl, ob der NameNode aktiv ist:
jps
Ihre Ausgabe sollte die folgenden drei Prozesse zusammen mit dem "+ Jps +" - Prozess enthalten:
-
+ DataNode +
-
+ NameNode +
-
+ SecondaryNameNode +
Wenn Sie sehen, dass + NameNode +
in der Ausgabe nicht vorhanden ist, führen Sie die folgenden Schritte aus. Wenn sie nicht in einem Block ausgeführt werden, müssen Sie sie möglicherweise separat ausführen. Kommentare sind in der Zeile enthalten.
cd ~/Installs/hadoop-2.6.0/
~/Installs/hadoop-2.6.0/sbin/stop-dfs.sh # Stop Hadoop's nodes
rm -rf hdfs_storage # Delete the namenode data
rm -rf /tmp/hadoop-* # Delete the temporary directories
~/Installs/hadoop-2.6.0/bin/hdfs namenode -format # Reformat the namenode
Starten Sie Hadoop mit + start-dfs.sh +
neu:
~/Installs/hadoop-2.6.0/sbin/start-dfs.sh
Sie sollten jetzt auf das Webinterface zugreifen können.
Schritt 10 - Installieren und Konfigurieren von ZooKeeper
Geben Sie das Verzeichnis "+ Installs +" ein.
cd ~/Installs
Verwenden Sie + tar +
, um + zookeeper-3.4.6.tar.gz +
zu extrahieren.
tar -xvzf ~/Downloads/zookeeper-3.4.6.tar.gz
Kopieren Sie die Beispieldatei + zoo_sample.cfg +
nach + zoo.cfg +
.
cp ~/Installs/zookeeper-3.4.6/conf/zoo_sample.cfg ~/Installs/zookeeper-3.4.6/conf/zoo.cfg
Die Konfiguration von ZooKeeper ist nun abgeschlossen. Starten Sie ZooKeeper, indem Sie Folgendes eingeben:
~/Installs/zookeeper-3.4.6/bin/zkServer.sh start
Sie sollten eine Ausgabe sehen, die so aussieht:
JMX enabled by default
Using config: ~/Installs/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
Schritt 11 - Accumulo installieren und konfigurieren
Nachdem alle Abhängigkeiten erfüllt sind, ist es Zeit, an der Installation von Accumulo selbst zu arbeiten.
Geben Sie das Verzeichnis "+ Installs +" ein.
cd ~/Installs
Extrahieren Sie + accumulo-1.6.1-bin.tar.gz
mit` + tar`:
tar -xvzf ~/Downloads/accumulo-1.6.1-bin.tar.gz
Accumulo wird mit Beispielkonfigurationen für Server mit verschiedenen Speichergrößen geliefert: 512 MB, 1 GB, 2 GB und 3 GB. In diesem Tutorial verwende ich die Konfiguration für 512 MB. Sie können eine andere Konfiguration auswählen, wenn Ihr Server über mehr Arbeitsspeicher verfügt.
Kopieren Sie die 512 MB Konfigurationsdateien in das Verzeichnis + conf +
.
cp ~/Installs/accumulo-1.6.1/conf/examples/512MB/standalone/* ~/Installs/accumulo-1.6.1/conf/
Verwenden Sie "+ nano", um Ihre Shell-Umgebung erneut mit der Datei "+ .bashrc" zu bearbeiten.
nano ~/.bashrc
Fügen Sie dieser Datei die folgenden Umgebungsvariablen hinzu:
-
HADOOP_HOME: Der Pfad zur Hadoop-Installation
-
ZOOKEEPER_HOME: Der Pfad zur ZooKeeper-Installation
Fügen Sie Ihrer Datei die folgenden Zeilen hinzu:
export HADOOP_HOME=~/Installs/hadoop-2.6.0/
export ZOOKEEPER_HOME=~/Installs/zookeeper-3.4.6/
Speichern und schließen.
Aktualisieren Sie die Umgebung so, dass die Variablen, die Sie zu + .bashrc +
hinzugefügt haben, in der aktuellen Sitzung verfügbar sind.
. ~/.bashrc
Verwenden Sie + nano +
, um + accumulo-env.sh +
zu bearbeiten.
nano ~/Installs/accumulo-1.6.1/conf/accumulo-env.sh
Standardmäßig wird der HTTP-Monitor von Accumulo nur an die lokale Netzwerkschnittstelle gebunden. Um über das Internet darauf zugreifen zu können, müssen Sie den Wert von "+ ACCUMULO_MONITOR_BIND_ALL " auf " true +" setzen.
Suchen Sie die Zeile, die mit "+ export ACCUMULO_MONITOR_BIND_ALL +" beginnt, und kommentieren Sie sie aus. Es sollte so aussehen:
export ACCUMULO_MONITOR_BIND_ALL="true"
Speichern und schließen.
Verwenden Sie + nano
, um` + accumulo-site.xml` zu bearbeiten.
nano ~/Installs/accumulo-1.6.1/conf/accumulo-site.xml
Die Arbeitsprozesse von Accumulo kommunizieren über einen geheimen Schlüssel miteinander. Dies sollte in eine sichere Zeichenfolge geändert werden. Suchen Sie nach der Eigenschaft "+ instance.secret " und ändern Sie ihren Wert. Ich werde diesen String verwenden: "+". Das XML für die Eigenschaft sollte folgendermaßen aussehen:
<property>
<name>instance.secret</name>
<value></value>
<description>A secret unique to a given instance that all servers must know in order to communicate with one another.
Change it before initialization. To
change it later use ./bin/accumulo org.apache.accumulo.server.util.ChangeSecret --old [oldpasswd] --new [newpasswd],
and then update this file.
</description>
</property>
Fügen Sie als Nächstes eine neue Eigenschaft mit dem Namen "+ instance.volumes " hinzu. Der Wert dieser Eigenschaft gibt an, wo Accumulo seine Daten im HDFS speichern soll. Speichern wir die Daten im Verzeichnis " / accumulo +".
<property>
<name>instance.volumes</name>
<value>hdfs://localhost:9000/accumulo</value>
</property>
Suchen Sie die Eigenschaft "+ trace.token.property.password ", und legen Sie den Wert auf etwas Sicheres fest. Merken Sie sich diesen Wert, da Sie ihn im nächsten Schritt benötigen. Ich werde dies auf "+" setzen.
<property>
<name>trace.token.property.password</name>
<value></value>
</property>
Speichern und schließen.
Accumulo initialisieren.
~/Installs/accumulo-1.6.1/bin/accumulo init
Sie werden aufgefordert, einen * Instanznamen * einzugeben. Verwenden Sie einen beliebigen Namen Ihrer Wahl. Ich wähle "+ DIGITAL_OCEAN +".
Als nächstes werden Sie zur Eingabe eines Passworts aufgefordert. Geben Sie dasselbe Kennwort ein, das Sie für die Eigenschaft "+ trace.token.property.password +" verwendet haben.
Sobald der Befehl ausgeführt wurde, können Sie Accumulo starten.
~/Installs/accumulo-1.6.1/bin/start-all.sh
Möglicherweise werden einige Warnungen angezeigt, in denen höhere Werte für bestimmte Systemparameter empfohlen werden. Da wir in diesem Lernprogramm eine sehr kleine Instanz erstellen, können Sie diese Warnungen ignorieren.
Nach Abschluss des Startvorgangs können Sie mit einem Browser die Accumulo-Weboberfläche unter + http: // <Ihre-Server-IP>: 50095 +
aufrufen.
image: https://assets.digitalocean.com/articles/accumulo_nosqldatabase/2.png [Accumulo-Weboberfläche]
Fazit
In diesem Tutorial haben Sie gelernt, wie Sie Apache Accumulo und alle anderen Komponenten, von denen es abhängt, einrichten. Wir haben heute ein sehr einfaches Setup mit HDFS im pseudoverteilten Modus erstellt, das auf einem einzelnen kleinen Server ausgeführt werden kann. Für eine optimale Leistung in einem Produktionsszenario sollte HDFS im vollständig verteilten Modus ausgeführt werden.
In Produktionsszenarien wird außerdem dringend empfohlen, diese Prozesse auf Servern mit mindestens 8 GB RAM und 4 oder mehr Prozessorkernen bereitzustellen, damit jeder Prozess mehr als 2 GB Arbeitsspeicher und einen separaten Kern verwenden kann. Alternativ können Sie die Komponenten separat auf verschiedenen Servern bereitstellen.
Weitere Informationen finden Sie im Apache Accumulo-Handbuch Benutzerhandbuch.