web-dev-qa-db-fra.com

obtenez "ERREUR: impossible d'obtenir l'adresse principale de ZooKeeper; znode data == null" lors de l'utilisation du shell Hbase

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:

hbase-sites.xml

<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>

core-sites.xml

<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>

yarn-sites.xml

<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>
12
Rickie Lau

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 .

13
Chandra kant

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.

5
100rabh

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

3
Ronak Patel

Une solution rapide pourrait être de redémarrer hbase:

1) Stop-hbase.sh
2) Start-hbase.sh
2
Reegan Ochora

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

1
Chris

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.

0
YufengJ

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.

0
r poon