Question

Je suis en train de combiner Hadoop, porc et Cassandra pour être en mesure de travailler sur des données stockées dans Cassandra au moyen de simples requêtes de porc. Le problème est que je ne peux pas obtenir Pig créer Map / Reduce emplois qui fonctionnent avec le CassandraStorage.

Ce que je l'ai fait est que je copiais le fichier stockage conf.xml d'un de mes machines à sous-munitions au-dessus de celui de contrib / porc (source distro de Cassandre), puis compilé les choses dans le fichier cassandra_loadfun.jar.

Ensuite, j'adapté l'exemple-script.pig pour inclure tous les bocaux:

register /opt/pig/pig-0.7.0-core.jar;
register /tmp/apache-cassandra-0.6.3-src/lib/libthrift-r917130.jar;
REGISTER /tmp/apache-cassandra-0.6.3-src/contrib/pig/build/cassandra_loadfunc.jar;
rows = LOAD 'cassandra://Keyspace1/Standard1' USING org.apache.cassandra.hadoop.pig.CassandraStorage();
cols = FOREACH rows GENERATE flatten($1);
colnames = FOREACH cols GENERATE $0;
namegroups = GROUP colnames BY $0;
namecounts = FOREACH namegroups GENERATE COUNT($1), group;
orderednames = ORDER namecounts BY $0;
topnames = LIMIT orderednames 50;
dump topnames;

Donc, si je ne me trompe pas les pots doivent être regroupés dans le travail qui est soumis à Hadoop. Mais lors de l'exécution du travail, il jette juste une exception à moi:

2010-08-04 22:11:46,395 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2117: Unexpected error when launching map reduce job.
2010-08-04 22:11:46,395 [main] ERROR org.apache.pig.tools.grunt.Grunt - org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias topnames
    at org.apache.pig.PigServer.openIterator(PigServer.java:521)
    at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:544)
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:241)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:162)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:138)
    at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:89)
    at org.apache.pig.Main.main(Main.java:391)
Caused by: org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1002: Unable to store alias topnames
    at org.apache.pig.PigServer.store(PigServer.java:577)
    at org.apache.pig.PigServer.openIterator(PigServer.java:504)
    ... 6 more
Caused by: org.apache.pig.backend.executionengine.ExecException: ERROR 2117: Unexpected error when launching map reduce job.
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:209)
    at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.execute(HExecutionEngine.java:308)
    at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:835)
    at org.apache.pig.PigServer.store(PigServer.java:569)
    ... 7 more
Caused by: java.lang.RuntimeException: Could not resolve error that occured when launching map reduce job: java.lang.NoClassDefFoundError: org/apache/thrift/TBase
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$JobControlThreadExceptionHandler.uncaughtException(MapReduceLauncher.java:510)
    at java.lang.Thread.dispatchUncaughtException(Thread.java:1845)

Ce que je ne comprends pas depuis la bibliothèque Thrift est explicitement dans la liste, et devrait être empaqueté, est-ce pas?

Était-ce utile?

La solution

L'exception dit clairement qu'il ne peut pas trouver TBase classe

java.lang.NoClassDefFoundError: org / apache / Thrift / TBase

Exploser le pot fourni et vérifiez si pot Thrift lib réellement présent au bon endroit. Le pot de Thrift peut avoir été livré à l'autre endroit.

Vous pouvez aussi mettre des pots dans le dossier lib de jar fourni. Une autre option serait ajouter à jar classpath explicitement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top