2010-08-04 4 views
4

Я пытаюсь объединить Hadoop, Pig и Cassandra, чтобы иметь возможность работать с данными, хранящимися в Кассандре, с помощью простых запросов Pig. Проблема в том, что я не могу заставить Pig создавать задания Map/Reduce, которые действительно работают с CassandraStorage.Сопутствующие банки при отправке карты/сокращении рабочих мест через Pig?

Что я сделал, так это то, что я скопировал файл storage-conf.xml с одной из моих кластерных машин поверх одной в contrib/pig (исходный дистрибутив Cassandra), а затем скомпилировал материал в файл cassandra_loadfun.jar ,

Далее я приспособил пример-script.pig включает все банки:

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; 

Так что, если я не ошибаюсь, то банки должны быть объединены в работу, которая представляется Hadoop. Но при выполнении задания он просто бросает исключение на меня:

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) 

Что я не понимаю, так как библиотека бережливости перечислена явно, и должно быть в комплекте, не так ли?

+0

Для тех, кто нашел это сообщение при поиске [ERROR 1066: Не удалось открыть итератор для псевдонима] (http://stackoverflow.com/questions/34495085/error-1066-unable-to-open-iterator-for- alias-in-pig-generic-solution) здесь [общее решение] (http://stackoverflow.com/a/34495086/983722). –

ответ

2

Исключение ясно говорит, что он не в состоянии найти TBase класса

java.lang.NoClassDefFoundError: орг/Apache/бережливость/TBase

Explode комплектной банку и если бережливость Lib банк на самом деле присутствует проверить в нужном месте. Бережливая банка, возможно, была укомплектована в другом месте.

Вы также можете попробовать положить банки в папку lib в комплекте банке. Другой вариант - явно добавить jar в classpath.

+0

Все классы присутствуют в сгенерированных файлах jar, так что это не проблема. – cdecker

+0

Либо есть несколько банок с тем же классом org/apache/бережливость/TBase, что приводит к конфликту или банке, неправильно зарегистрировано. Это единственная причина, по которой я могу думать о том, –