So installieren Sie die datenfreundliche Apache Accumulo NoSQL-Datenbank unter Ubuntu 14.04

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.

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.

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.