J'ai installé Hadoop2.2.0 et Hbase0.98.0 et voici ce que je fais:
$ ./bin/start-hbase.sh
$ ./bin/hbase Shell
2.0.0-p353 :001 > list
alors j'ai eu ceci:
ERROR: Can't get master address from ZooKeeper; znode data == null
Pourquoi est-ce que je reçois cette erreur? Une autre question: Dois-je exécuter ./sbin/start-dfs.sh
et ./sbin/start-yarn.sh
avant de lancer base?
En outre, à quoi servent ./sbin/start-dfs.sh
et ./sbin/start-yarn.sh
?
Voici quelques uns de mes doc de conf:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://127.0.0.1:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/Users/Apple/Documents/tools/hbase-tmpdir/hbase-data</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/Users/Apple/Documents/tools/hbase-zookeeper/zookeeper</value>
</property>
</configuration>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
<description>The name of the default file system.</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/Users/micmiu/tmp/hadoop</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>io.native.lib.available</name>
<value>false</value>
</property>
</configuration>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.Apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
Si vous voulez simplement exécuter HBase sans entrer dans la gestion de Zookeeper pour HBase autonome, supprimez tous les blocs property
de hbase-site.xml
à l'exception du bloc de propriété nommé hbase.rootdir
.
Maintenant, lancez /bin/start-hbase.sh
. HBase est livré avec son propre Zookeeper, qui démarre lorsque vous exécutez /bin/start-hbase.sh
, ce qui suffit si vous essayez de contourner le problème pour la première fois. Plus tard, vous pourrez définir des configurations en mode distribué pour Zookeeper.
Vous devez uniquement exécuter /sbin/start-dfs.sh
pour exécuter HBase puisque la valeur de hbase.rootdir
est définie sur hdfs://127.0.0.1:9000/hbase
dans votre hbase-site.xml
. Si vous le changez quelque part sur le système de fichiers local en utilisant file:///some_location_on_local_filesystem
, vous n'avez même pas besoin d'exécuter /sbin/start-dfs.sh
.
hdfs://127.0.0.1:9000/hbase
indique que c'est un emplacement sur HDFS et /sbin/start-dfs.sh
démarre namenode et datanode, qui fournit une API sous-jacente permettant d'accéder au système de fichiers HDFS. Pour en savoir plus sur Yarn, veuillez consulter http://hadoop.Apache.org/docs/r2.3.0/hadoop-yarn/hadoop-yarn-site/YARN.html .
Cela pourrait également se produire si la machine virtuelle ou la machine hôte est mise en veille, Zookeeper ne restera pas en ligne. Le redémarrage de VM devrait résoudre le problème.
Vous devez démarrer zookeeper puis exécuter Hbase-Shell
{HBASE_HOME}/bin/hbase-daemons.sh {start,stop} zookeeper
et vous voudrez peut-être vérifier cette propriété dans hbase-env.sh
# Tell HBase whether it should manage its own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false
Reportez-vous à Source - Zookeeper
Une solution rapide pourrait être de redémarrer hbase:
1) Stop-hbase.sh
2) Start-hbase.sh
J'ai eu exactement la même erreur. Le pare-feu Linux bloquait la connectivité. On peut tester les ports via telnet. Une solution rapide consiste à désactiver le pare-feu et à voir s'il le corrige:
Désactivez complètement le pare-feu sur tous vos nœuds. Remarque: cette commande ne survivra pas au redémarrage de vos machines.
systemctl stop firewalld
La solution à long terme est que vous devez configurer le pare-feu pour autoriser les ports hbase.
Notez que votre version de hbase peut utiliser différents ports: https://issues.Apache.org/jira/browse/HBASE-10123
Le niveau de sortie de Hbase Shell est assez élevé pour indiquer que de nombreuses erreurs de configuration entraînent ce message. Pour vous aider à déboguer, il serait bien mieux de regarder dans le journal hbase
/var/log/hbase
pour comprendre la cause première du problème.
J'ai eu le même problème aussi. Pour moi, ma cause fondamentale était due à hadoop-kms ayant un numéro de port en conflit avec mon hbase-master. Tous deux utilisent le port 16000, mon HMaster n'a même pas été lancé lorsque j'ai appelé hbase Shell. Après avoir résolu ce problème, ma base de données a fonctionné.
Là encore, le conflit de ports kms pourrait ne pas être votre cause fondamentale. Suggérez fortement de consulter/var/log/hbase pour trouver la cause.
Dans mon cas, avec la même erreur lors de l'exécution de hbase - je n'ai pas inclus les propriétés de zookeeper dans le fichier hbase-site.xml et je continue à recevoir les messages d'erreur ci-dessus (basé sur le guide Apache hbase, seules les deux propriétés requises: rootdir et distribuée sont essentielles. ).
Je peux également retracer ma sortie de la commande jps qui découvre qu’en fait, mon serveur Hregion et Hmaster n’étaient pas correctement opérationnels.
Après avoir arrêté et redémarré (comme une réinitialisation), je les avais déjà en marche et je pouvais exécuter hbase correctement.