72 votes

Des tests d'intégration de la Ruche emplois

Je suis en train d'écrire un non-trivial de la Ruche de travail à l'aide de la Ruche d'Épargne et d'interfaces de JDBC, et je vais avoir de la difficulté à mettre en place un décent de test JUnit. Par des non-trivial, je veux dire que les résultats de la tâche dans au moins un MapReduce stade, plutôt que de traiter avec le metastore.

Le test doit tirer jusqu'à une Ruche serveur, charger des données dans une table, d'exécuter certains non-trivial de la requête sur la table, et vérifier les résultats.

J'ai câblé un Printemps contexte en fonction du Printemps de référence. Cependant, le travail échoue sur le MapReduce phase, en se plaignant qu'aucun Hadoop binaire existe:

java.io.IOException: Cannot run program "/usr/bin/hadoop" (in directory "/Users/yoni/opower/workspace/intellij_project_root"): error=2, No such file or directory

Le problème est que la Ruche Serveur est en cours d'exécution en mémoire, mais s'appuie sur une installation locale de la Ruche afin de l'exécuter. Pour mon projet, à être autonome, j'ai besoin de la Ruche de services intégrés, y compris le HDFS et MapReduce clusters. J'ai essayé le démarrage d'une Ruche serveur en utilisant le même Ressort méthode et pointant à MiniDFSCluster et MiniMRCluster, semblables au modèle utilisé dans la Ruche QTestUtil source et dans HBaseTestUtility. Cependant, je n'ai pas pu obtenir que cela fonctionne.

Après trois jours d'essayer de disputer la Ruche des tests d'intégration, je pensais demander à la communauté:

  1. Comment voulez-vous recommander je test d'intégration de la Ruche des emplois?
  2. Avez-vous un travail de JUnit exemple pour tester l'intégration de la Ruche emplois aide-mémoire HDFS, M., et la Ruche instances?

Des ressources supplémentaires que j'ai regardé:

Edit: Je suis pleinement conscient que le travail à l'encontre d'un cluster Hadoop - qu'il soit local ou à distance - permet d'exécuter les tests d'intégration à l'encontre d'un full-stack de la Ruche instance. Le problème, comme l'a dit, c'est que ce n'est pas une solution viable pour les tests de la Ruche de flux de travail.

13voto

oby1 Points 242

Dans l'idéal il faudrait pouvoir tester des requêtes hive avec LocalJobRunner plutôt que de recourir à des mini-cluster de test. Toutefois, en raison de la RUCHE-3816 l'exécution de la ruche avec mapred.job.tracker=local résultats dans un appel à la ruche CLI exécutable installé sur le système (comme indiqué dans votre question).

Jusqu'à ce que la RUCHE-3816 est résolu, mini-cluster de test est la seule option. Ci-dessous est un minimum de mini-installation de cluster pour la ruche tests que j'ai testé contre CDH 4.4.

Configuration conf = new Configuration();

/* Build MiniDFSCluster */
MiniDFSCluster miniDFS = new MiniDFSCluster.Builder(conf).build();

/* Build MiniMR Cluster */
System.setProperty("hadoop.log.dir", "/path/to/hadoop/log/dir"); // MAPREDUCE-2785
int numTaskTrackers = 1;
int numTaskTrackerDirectories = 1;
String[] racks = null;
String[] hosts = null;
miniMR = new MiniMRCluster(numTaskTrackers, miniDFS.getFileSystem().getUri().toString(),
                           numTaskTrackerDirectories, racks, hosts, new JobConf(conf));

/* Set JobTracker URI */
System.setProperty("mapred.job.tracker", miniMR.createJobConf(new JobConf(conf)).get("mapred.job.tracker"));

Il n'est pas nécessaire d'exécuter un distinct hiveserver ou hiveserver2 processus de test. Vous pouvez tester avec un intégré à hiveserver2 processus en mettant en place votre connexion jdbc URL jdbc:hive2:///

6voto

Luís Bianchin Points 127

Je viens d'en trouver un assez bon outil: HiveRunner. Il est cadre supérieur de jUnit pour tester des scripts hive. Sous le capot, il commence un stand alone HiveServer avec en mémoire HSQL comme le metastore.

1voto

Dmitriusan Points 50

La ruche prend en charge les mode seulement dans le sens que le SGBDR qui stocke les méta-informations pour les tables de la Ruche peut fonctionner localement ou sur un serveur autonome (voir https://cwiki.apache.org/confluence/display/Hive/HiveClient pour plus de détails). En outre, la ruche avec de c'est l'accompagnement de base de données est simplement un orchestrateur pour une chaîne de tâches MapReduce, qui nécessite le framework Hadoop être en cours d'exécution.

Je recommande l'utilisation de cette machine virtuelle qui a un pré-configuré Hadoop pile http://hortonworks.com/products/hortonworks-sandbox/ . Hortonworks a est l'un des 2 leader de la distribution Hadoop de fournisseurs, de sorte qu'il est bien pris en charge.

-2voto

Abdul Yasin Points 1075

Cette question est principalement lié à votre configuration de MySQL.

Je parie que le problème est dans votre URL jdbc de configuration. Le message d'erreur indique tente de se connecter à l'hôte linux-96 et vous avez mentionné que vous avez installé votre serveur MySQL local.

D'abord exécuter le serveur MySQL en local et essayez d'ouvrir une session client:

$ sudo service mysqld start

$ mysql -h localhost -u root -p

Vous devriez être en mesure de se connecter (si pas de recherche pour comment faire pour réinitialiser le mot de passe root MySQL)

Créer votre base de données de destination dans MySQL et un utilisateur et un mot de passe et vérifiez que vous pouvez ouvrir une session en ligne de commande avant d'aller de l'avant.

$ mysql -h localhost -u -p

Vérifiez que vous hive-site.xml la configuration. Vous devriez avoir quelque chose comme ceci:

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X