Je gère un emploi Hadoop Mapreduce sur ma machine locale (pseudo-distribuée) qui se lit et écrit dans HBASE. Je reçois intermittiquement une erreur qui perturbe le travail, même lorsque l'ordinateur est laissé seul, sans autre processus significatif, voir le journal ci-dessous. La sortie d'un dépotoir de zookeeper après la mort est morte, avec le nombre de clients qui poussent après une exécution échouée: mon équipe de développement utilise actuellement la distribution CDH3U0, donc HBASE 0.90 .1 - Est-ce une question résolue dans une libération plus récente? Ou devrait-il y avoir quelque chose que je peux faire avec la configuration actuelle? Devrais-je juste m'attendre à redémarrer ZK et à tuer périodiquement les clients? Je suis ouvert à une option raisonnable qui permettra à mes emplois de compléter de manière cohérente. P>
3 Réponses :
J'ai eu des problèmes similaires à cela dans le passé. Beaucoup de temps avec HBase / Hadoop, vous verrez des messages d'erreur qui ne signalent pas le vrai problème que vous avez, vous devez donc être créatif avec cela. P>
C'est ce que j'ai trouvé et cela peut ou non s'appliquer à vous: p>
ouvrez-vous beaucoup de connexions à une table et ferme-vous lorsque vous avez terminé? Cela peut arriver dans un travail MR si vous effectuez des numérisations / obtiens dans le mappeur ou le réducteur (ce que je ne pense pas que vous vouliez faire si cela peut être évité). P>
Aussi, parfois, j'ai des problèmes similaires si mon mappeur ou mon réducteur écrit beaucoup à la même rangée. Essayez de distribuer vos écritures ou de minimiser les écritures pour réaliser problème. P>
Cela aiderait également si vous êtes entré en détail sur la nature de votre travail MR. Qu'est ce que ça fait? Avez-vous un exemple de code? P>
C'est un travail qui utilise le séparateur de phrase de OpenNLP pour générer un très grand corpus de phrases à partir d'un corpus modeste de documents. Chaque phrase obtient sa propre rangée dans la table de sortie et, étant donné que les documents source sont également dans une table HBASE, je viens de configurer une analyse et de configurer le travail avec TablemapreduduLutil pour utiliser ce balayage, ma sous-classe de Tablapper (qui génère des puts) et identitéTableDereducer. Il y a eu une question de Jira liée aux connexions ZK lors de l'utilisation de tableOutputformat, cependant, je pense que c'est ce que je suis contre.
s'avère que je frappais la faible limite de zookeper (qui, à mon avis, a été augmentée dans des versions plus courantes). J'avais essayé de définir une limite supérieure dans HBASE-SITE.XML:
# can put this number much higher if desired maxClientCnxns=35
Vérifiez les paramètres suivants: P>
Délai d'expiration de la session de zooveeper (zookeper.session.timeout) -> Essayez d'augmenter et de vérifier p>
Tire de ticker Zookeeper (Ticktime) -> Augmentation et test P>
Vérification de Ulimit (vérification de la commande Linux de l'utilisateur sous lequel vous Hadoop / hbase est en cours d'exécution) spécifique p>
Dans le boîtier ulimentaire, vous devez avoir un paramètre de suivi quelque peu une valeur supérieure. P>
Ouvrir des fichiers rendez cela un peu 32k ou plus p>
processus utilisateur max rendez-le comme illimité p>
Après avoir effectué ces modifications, vérifiez la plupart probablement, l'erreur sera partie p>
J'ai vu une perte de connexion quand il y a trop d'IO pour la machine donnée. Vous risquez peut-être plus que vous ne pouvez mâcher avec HBASE / ZOOOKEPER / Hadoop M / R et d'autres choses sur votre machine. Avez-vous installé des ganglions? Cela pourrait vous montrer la quantité de traitement que vous utilisez et si vous frappez un mur IO ou une traversée.
Une modification de la description initiale: le nombre de connexions client n'a pas augmenté de manière permanente après l'échec du travail. Selon le bogue décrit sur la Hbase Jira, je peux voir que cela se produise si le travail se termine avec succès.
@Mike, je n'exécutions pas vraiment d'autres processus de conséquence significative en même temps, mais c'est une idée intelligente de garder des onglets sur les ressources système. Heureusement, ma machine semble être assez costaud pour la tâche à la main.