introduction
Apache Accumulo est une base de données NoSQL distribuée à source ouverte basée sur BigTable. Il est utilisé pour effectuer efficacement des opérations CRUD (Create Read Update Delete) sur des ensembles de données extrêmement volumineux (souvent appelés Big Data). Accumulo est préférable à d’autres bases de données distribuées similaires (telles que HBase ou CouchDB) si un projet nécessite une sécurité fine sous la forme d’un contrôle d’accès au niveau de la cellule.
Accumulo est construit sur d’autres logiciels Apache. Accumulo représente ses données sous forme de paires clé-valeur et les stocke sous forme de fichiers sur HDFS (système de fichiers distribués Hadoop d’Apache). Il utilise également Apache ZooKeeper pour synchroniser les paramètres entre tous ses processus.
Dans ce tutoriel, vous apprendrez à:
-
Installer et configurer Apache HDFS et ZooKeeper: Ces systèmes doivent être actifs avant de démarrer Accumulo.
-
Installer et configurer une instance autonome d’Accumulo
Conditions préalables
Vous aurez besoin des éléments suivants:
-
Serveur Ubuntu 14.04 (de préférence 32 bits)
-
Un utilisateur sudo
-
Au moins 2 Go de l’espace https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04]
Étape 1 - Installer et configurer JDK 7
Accumulo, HDFS et ZooKeeper sont tous écrits en Java et nécessitent une machine virtuelle Java (JVM) pour fonctionner. Commençons donc par installer le JDK.
Mettez à jour l’index de la liste de paquets.
sudo apt-get update
Installez OpenJDK 7 en utilisant + apt-get
.
sudo apt-get install openjdk-7-jdk
Utilisez + nano
pour éditer votre fichier d’environnement shell,` + .bashrc`.
nano ~/.bashrc
Ajoutez + JAVA_HOME +
en tant que variable d’environnement à la fin du fichier.
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
_
* Remarque *: La valeur de + JAVA_HOME +
peut être différente selon l’architecture de votre serveur. Par exemple, sur un serveur 64 bits, la valeur serait + / usr / lib / jvm / java-7-openjdk-amd64 +
. Vous pouvez voir le chemin exact en listant le contenu du répertoire + / usr / lib / jvm / +
. Si votre chemin est différent de ce qui est montré ici, assurez-vous d’apporter les modifications appropriées ici et ailleurs.
_
Enregistrez le fichier et quittez + nano +
. Mettez à jour les variables d’environnement de la session en cours en tapant:
. ~/.bashrc
Editez le fichier de configuration + java.security +
de la machine virtuelle Java à l’aide de + nano +
.
sudo nano $JAVA_HOME/jre/lib/security/java.security
Recherchez le paramètre + securerandom.source +
et modifiez la ligne afin qu’elle ressemble à ceci:
securerandom.source=file:/dev/./urandom
Enregistrez le fichier et quittez + nano +
. Ce changement est nécessaire pour réduire le temps de démarrage de la machine virtuelle. Ne pas effectuer ce changement peut entraîner des temps de démarrage très longs sur la plupart des serveurs virtuels.
Étape 2 - Installez SSH
Hadoop a besoin de SSH et de Rsync pour gérer ses démons. Installez-les en utilisant la commande suivante:
sudo apt-get install ssh rsync
Étape 3 - Activer la connectivité SSH sans mot de passe
Hadoop devrait pouvoir se connecter à votre serveur via SSH sans être invité à entrer un mot de passe.
Générez une clé RSA en utilisant + ssh-keygen
.
ssh-keygen -P ''
Appuyez sur * ENTER * lorsque vous y êtes invité pour choisir les valeurs par défaut.
Ajoutez la clé générée dans le fichier + allowed_keys +
.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Les valeurs + localhost +
et + 0.0.0.0 +
doivent être ajoutées à la liste des hôtes connus. Le moyen le plus simple de le faire est d’exécuter la commande + ssh +
.
Ajoutons d’abord + localhost +
.
ssh localhost
Vous recevrez un message ressemblant à ceci:
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)?
Tapez + yes +
et appuyez sur + ENTER
.
Une fois la connexion établie, quittez la session SSH enfant en tapant:
exit
Ajoutons + 0.0.0.0 +
maintenant.
ssh 0.0.0.0
Tapez + yes +
et appuyez sur + ENTER
lorsque vous y êtes invité.
Encore une fois, quittez la session enfant SSH en tapant:
exit
La configuration de SSH est maintenant terminée.
Étape 4 - Créer un répertoire de téléchargements
Vous allez télécharger quelques fichiers pour ce tutoriel. Bien que cela ne soit pas vraiment nécessaire, il est judicieux de stocker tous vos téléchargements dans un répertoire séparé.
mkdir -p ~/Downloads
Entrez le répertoire.
cd ~/Downloads
Étape 5 - Téléchargez Apache Hadoop
Au moment de la rédaction de ce document, la dernière version stable de Hadoop est * 2.6.0 *. Téléchargez-le en utilisant + wget +
.
wget "http://www.eu.apache.org/dist/hadoop/common/stable/"
Étape 6 - Téléchargez Apache ZooKeeper
La dernière version stable de ZooKeeper est * 3.4.6 *. Téléchargez-le en utilisant + wget +
.
wget "http://www.eu.apache.org/dist/zookeeper/stable/"
Étape 7 - Téléchargez Apache Accumulo
La dernière version stable d’Accumulo est * 1.6.1 *. Téléchargez-le en utilisant + wget +
.
wget "http://www.eu.apache.org/dist/accumulo/1.6.1/"
Étape 8 - Créer un répertoire d’installation
Créez un répertoire pour stocker toutes nos installations liées à Accumulo.
mkdir -p ~/Installs
Entrez le répertoire.
cd ~/Installs
Étape 9 - Installer et configurer Hadoop
Utilisez la commande + tar +
pour extraire le contenu de + hadoop-2.6.0-src.tar.gz +
.
tar -xvzf ~/Downloads/hadoop-2.6.0.tar.gz
_ * Remarque: * Si vous avez installé une version différente de l’un de ces logiciels, veuillez utiliser la version appropriée dans votre nom de fichier. _
Utilisez + nano +
pour ouvrir + hadoop-env.sh +
.
nano ~/Installs/hadoop-2.6.0/etc/hadoop/hadoop-env.sh
Recherchez la ligne commençant par + export JAVA_HOME +
et remplacez-la par:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
Assurez-vous que cette valeur est identique à celle que vous avez définie dans + .bashrc
.
Par défaut, Hadoop génère beaucoup de journaux de débogage. Pour arrêter ce comportement, recherchez la ligne commençant par + export HADOOP_OPTS +
et remplacez-la par:
export HADOOP_OPTS="$HADOOP_OPTS -XX:-PrintWarnings -Djava.net.preferIPv4Stack=true"
Sauvegarder et quitter.
Utilisez + nano
pour ouvrir` + core-site.xml`.
nano ~/Installs/hadoop-2.6.0/etc/hadoop/core-site.xml
Ajoutez un bloc + <property> +
nommé + fs.defaultFS +
. Sa valeur doit pointer vers le nom d’hôte et le port du namenode (dans notre cas, il s’agit de + localhost +
et du port par défaut + 9000 +
). En ignorant les commentaires, éditez votre fichier pour qu’il ressemble à ceci:
<?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>
Sauvegarder et quitter.
Utilisez + nano
pour ouvrir` + hdfs-site.xml`.
nano ~/Installs/hadoop-2.6.0/etc/hadoop/hdfs-site.xml
Les propriétés suivantes doivent être ajoutées à ce fichier:
-
+ dfs.replication +
: Ce nombre indique le nombre de fois qu’un bloc est répliqué par Hadoop. Par défaut, Hadoop crée des répliques+ 3 +
pour chaque bloc. Dans ce tutoriel, utilisez la valeur+ 1 +
, car nous ne créons pas de cluster. -
+ dfs.name.dir +
: Ceci pointe vers un emplacement du système de fichiers où le namenode peut stocker la table de noms. Vous devez changer cela car Hadoop utilise+ / tmp +
par défaut. Utilisons+ hdfs_storage / name +
pour stocker la table de noms. -
+ dfs.data.dir +
: Ceci pointe vers un emplacement du système de fichiers où le code de données doit stocker ses blocs. Vous devez changer cela car Hadoop utilise+ / tmp +
par défaut. Utilisons+ hdfs storage / data
pour stocker les blocs de données.
En ignorant les commentaires, après avoir ajouté ces propriétés, votre fichier devrait ressembler à ceci:
<?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>
Utilisez + nano
pour créer un nouveau fichier nommé` + mapred-site.xml`.
nano ~/Installs/hadoop-2.6.0/etc/hadoop/mapred-site.xml
Ajoutez une propriété nommée + mapred.job.tracker +
à ce fichier. Cette propriété contient le nom d’hôte et le numéro de port sur lesquels le suivi de travaux MapReduce est exécuté. Pour notre configuration, utilisez + localhost +
et le port par défaut + 9001 +
.
Ajoutez le contenu suivant au fichier:
<?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>
Entrez le répertoire de base de Hadoop (cela est important car Hadoop crée le répertoire + hdfs_storage +
dans le répertoire actuel).
cd ~/Installs/hadoop-2.6.0/
Le NameNode peut maintenant être initialisé en tapant:
~/Installs/hadoop-2.6.0/bin/hdfs namenode -format
Vous devriez voir un peu de sortie.
Ensuite, démarrez le NameNode en tapant:
~/Installs/hadoop-2.6.0/sbin/start-dfs.sh
Attendez une minute ou deux pour que ça commence. Une fois démarré, vous pouvez utiliser un navigateur pour visiter + http: // <votre-ip>: 50070 / +
et naviguer à travers l’interface Web du NameNode.
image: https: //assets.digitalocean.com/articles/accumulo_nosqldatabase/1.png [Interface Web Hadoop NameNode]
Dépannage
Si vous ne pouvez pas accéder à l’interface Web, vérifiez si le NameNode est actif à l’aide de la commande suivante:
jps
Votre sortie doit contenir les trois processus suivants, ainsi que le processus + Jps +
:
-
+ DataNode +
-
+ NameNode +
-
+ SecondaryNameNode +
Si vous voyez que + NameNode +
n’est pas présent dans la sortie, procédez comme suit. S’ils ne s’exécutent pas dans un bloc, vous devrez peut-être les exécuter séparément. Les commentaires sont inclus en ligne.
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
Redémarrez Hadoop en utilisant + start-dfs.sh +
:
~/Installs/hadoop-2.6.0/sbin/start-dfs.sh
Vous devriez pouvoir accéder à l’interface Web maintenant.
Étape 10 - Installer et configurer ZooKeeper
Entrez le répertoire + Installations +
.
cd ~/Installs
Utilisez + tar +
pour extraire + zookeeper-3.4.6.tar.gz +
.
tar -xvzf ~/Downloads/zookeeper-3.4.6.tar.gz
Copiez le fichier exemple + zoo_sample.cfg +
dans + zoo.cfg +
.
cp ~/Installs/zookeeper-3.4.6/conf/zoo_sample.cfg ~/Installs/zookeeper-3.4.6/conf/zoo.cfg
La configuration de ZooKeeper est maintenant terminée. Lancez ZooKeeper en tapant:
~/Installs/zookeeper-3.4.6/bin/zkServer.sh start
Vous devriez voir une sortie qui ressemble à ceci:
JMX enabled by default
Using config: ~/Installs/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
Étape 11 - Installer et configurer Accumulo
Maintenant que toutes ses dépendances sont satisfaites, il est temps de travailler à l’installation d’Accumulo.
Entrez le répertoire + Installations +
.
cd ~/Installs
Extrayez + accumulo-1.6.1-bin.tar.gz
en utilisant` + tar`:
tar -xvzf ~/Downloads/accumulo-1.6.1-bin.tar.gz
Accumulo est livré avec des exemples de configuration pour des serveurs avec différentes tailles de mémoire: 512 Mo, 1 Go, 2 Go et 3 Go. Je vais utiliser la configuration de 512 Mo dans ce tutoriel. Vous pouvez choisir d’autres configurations si votre serveur dispose de plus de mémoire.
Copiez les fichiers de configuration de 512 Mo dans le répertoire + conf +
.
cp ~/Installs/accumulo-1.6.1/conf/examples/512MB/standalone/* ~/Installs/accumulo-1.6.1/conf/
Utilisez + nano
pour éditer votre environnement shell à nouveau, en utilisant le fichier` + .bashrc`.
nano ~/.bashrc
Ajoutez les variables d’environnement suivantes à ce fichier:
-
HADOOP_HOME: le chemin de l’installation Hadoop
-
ZOOKEEPER_HOME: chemin d’accès à l’installation de ZooKeeper
Ajoutez les lignes suivantes à votre fichier:
export HADOOP_HOME=~/Installs/hadoop-2.6.0/
export ZOOKEEPER_HOME=~/Installs/zookeeper-3.4.6/
Sauvegarder et quitter.
Mettez à jour l’environnement afin que les variables que vous avez ajoutées à + .bashrc +
soient disponibles dans la session en cours.
. ~/.bashrc
Utilisez + nano +
pour éditer + accumulo-env.sh +
.
nano ~/Installs/accumulo-1.6.1/conf/accumulo-env.sh
Par défaut, le moniteur HTTP d’Accumulo ne se lie qu’à l’interface réseau locale. Pour pouvoir y accéder via Internet, vous devez définir la valeur de + ACCUMULO_MONITOR_BIND_ALL +
sur `` + true + `.
Recherchez la ligne commençant par + export ACCUMULO_MONITOR_BIND_ALL +
et décommentez-la. Ça devrait ressembler à ça:
export ACCUMULO_MONITOR_BIND_ALL="true"
Sauvegarder et quitter.
Utilisez + nano
pour éditer` + accumulo-site.xml`.
nano ~/Installs/accumulo-1.6.1/conf/accumulo-site.xml
Les processus de travail d’Accumulo communiquent entre eux à l’aide d’une clé secrète. Cela devrait être changé pour une chaîne qui est sécurisée. Recherchez la propriété + instance.secret +
et changez sa valeur. Je vais utiliser cette chaîne: ++
. Le code XML de la propriété devrait ressembler à ceci:
<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>
Ensuite, ajoutez une nouvelle propriété nommée + instance.volumes +
. La valeur de cette propriété spécifie où Accumulo doit stocker ses données dans le système HDFS. Laissez-nous stocker les données dans le répertoire + / accumulo +
.
<property>
<name>instance.volumes</name>
<value>hdfs://localhost:9000/accumulo</value>
</property>
Recherchez la propriété + trace.token.property.password +
et définissez sa valeur sur quelque chose de sécurisé. N’oubliez pas cette valeur, car vous en aurez besoin à l’étape suivante. Je vais mettre ceci à ++
.
<property>
<name>trace.token.property.password</name>
<value></value>
</property>
Sauvegarder et quitter.
Initialiser Accumulo.
~/Installs/accumulo-1.6.1/bin/accumulo init
Vous serez invité à entrer un * nom d’instance *. Utilisez n’importe quel nom de votre choix. Je choisis + DIGITAL_OCEAN +
.
Ensuite, vous serez invité à entrer un mot de passe. Tapez le même mot de passe que vous avez utilisé pour la propriété + trace.token.property.password +
.
Une fois la commande terminée, vous pouvez démarrer Accumulo.
~/Installs/accumulo-1.6.1/bin/start-all.sh
Il se peut que quelques avertissements recommandent des valeurs plus élevées pour certains paramètres système. Comme nous créons une très petite instance dans ce tutoriel, vous pouvez ignorer ces avertissements.
Une fois le démarrage terminé, vous pouvez utiliser un navigateur pour visiter l’interface Web d’Accumulo à l’adresse + http: // <votre-serveur-ip>: 50095 +
.
image: https: //assets.digitalocean.com/articles/accumulo_nosqldatabase/2.png [Interface Web Accumulo]
Conclusion
Dans ce didacticiel, vous avez appris à configurer Apache Accumulo et tous les autres composants dont il dépend. Nous avons créé aujourd’hui une configuration très simple utilisant HDFS en mode pseudo-distribué pouvant fonctionner sur un seul petit serveur. Pour des performances optimales dans un scénario de production, HDFS doit s’exécuter en mode entièrement distribué.
Dans les scénarios de production, il est également fortement recommandé de déployer ces processus sur des serveurs disposant d’au moins 8 Go de RAM et d’au moins 4 cœurs de processeur, de sorte que chaque processus puisse utiliser plus de 2 Go de mémoire et un cœur séparé. Alternativement, vous pouvez déployer les composants séparément sur différents serveurs.
Pour plus d’informations, reportez-vous au useruserutilisateur d’Apache Accumulo.