Связывание банок при отправке карты / сокращении заданий с помощью Pig? - PullRequest
4 голосов
/ 05 августа 2010

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

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

Далее я адаптировал файл example-script.pig для включения всех jar-файлов:

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)

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

1 Ответ

2 голосов
/ 17 августа 2010

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

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

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

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

...