Использование Pig в песочнице Hortonworks

Я пытался использовать CurrentTime() в песочнице, предоставленной Hortonworks, и не могу заставить ее работать.

Это все, что у меня есть в скрипте Pig:

<code>
REGISTER zookeeper.jar
REGISTER piggybank.jar
REGISTER hbase-common-0.98.4.2.2.0.0-2041-hadoop2.jar
REGISTER hbase-common-0.98.4.2.2.0.0-2041-hadoop2-tests.jar
REGISTER hbase-client-0.98.4.2.2.0.0-2041-hadoop2.jar
REGISTER guava.jar
a = CurrentTime();
dump a;
</code>

Ошибка, которую я вижу в журналах, говорит:

15/04/13 21:23:22 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
15/04/13 21:23:22 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
15/04/13 21:23:22 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType
2015-04-13 21:23:22,428 [main] INFO  org.apache.pig.Main - Apache Pig version 0.14.0.2.2.0.0-2041 (rexported) compiled Nov 19 2014, 15:24:46
2015-04-13 21:23:22,429 [main] INFO  org.apache.pig.Main - Logging error messages to: /hadoop/yarn/local/usercache/hue/appcache/application_1428957295391_0006/container_1428957295391_0006_01_000002/pig_1428960202427.log
2015-04-13 21:23:24,041 [main] INFO  org.apache.pig.impl.util.Utils - Default bootup file /home/yarn/.pigbootup not found
2015-04-13 21:23:24,615 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://sandbox.hortonworks.com:8020
2015-04-13 21:23:27,864 [main] ERROR org.apache.pig.PigServer - exception during parsing: Error during parsing. <file script.pig, line 10> Cannot expand macro 'CurrentTime'. Reason: Macro must be defined before expansion.
Failed to parse: <file script.pig, line 10> Cannot expand macro 'CurrentTime'. Reason: Macro must be defined before expansion.
    at org.apache.pig.parser.PigMacro.macroInline(PigMacro.java:455)
    at org.apache.pig.parser.QueryParserDriver.inlineMacro(QueryParserDriver.java:301)
    at org.apache.pig.parser.QueryParserDriver.expandMacro(QueryParserDriver.java:290)
    at org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:183)
    at org.apache.pig.PigServer$Graph.parseQuery(PigServer.java:1735)
    at org.apache.pig.PigServer$Graph.access$000(PigServer.java:1443)
    at org.apache.pig.PigServer.parseAndBuild(PigServer.java:387)
    at org.apache.pig.PigServer.executeBatch(PigServer.java:412)
    at org.apache.pig.PigServer.executeBatch(PigServer.java:398)
    at org.apache.pig.tools.grunt.GruntParser.executeBatch(GruntParser.java:171)
    at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:741)
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:372)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:230)
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:205)
    at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:81)
    at org.apache.pig.Main.run(Main.java:495)
    at org.apache.pig.Main.main(Main.java:170)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
2015-04-13 21:23:27,871 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <file script.pig, line 10> Cannot expand macro 'CurrentTime'. Reason: Macro must be defined before expansion.
Details at logfile: /hadoop/yarn/local/usercache/hue/appcache/application_1428957295391_0006/container_1428957295391_0006_01_000002/pig_1428960202427.log
2015-04-13 21:23:27,908 [main] INFO  org.apache.pig.Main - Pig script completed in 5 seconds and 684 milliseconds (5684 ms)

Я включил эти строки регистров, так как подумал, что, возможно, UDF каким-то образом не были включены. Я понятия не имею, что делать сейчас


person simplycoding    schedule 13.04.2015    source источник


Ответы (1)


Я думаю, вы должны использовать полный путь метода в настоящее время. У меня есть пример ниже, где я конвертирую данное время в формат даты unix.

register '/usr/lib/pig/piggybank.jar' ;
DEFINE ISOToUnix org.apache.pig.piggybank.evaluation.datetime.convert.ISOToUnix();

date_filter = FOREACH parsed_log GENERATE ISOToUnix(date) AS unixTime:long;
 STORE date_filter INTO '/root/pig/output/parselogdate/';

Я думаю, что для вашего приложения вы должны использовать ниже, просто попробуйте, если это работает. Ваше текущее время будет принимать кортеж в качестве ввода и возвращать текущее время в качестве вывода.

//Users is a file with tuples in it.
     a = load users;
     b = foreach a generate org.apache.pig.builtin.CurrentTime(); 
     dump b;

Я попытался выполнить выше и получил вывод. Вы можете найти документ по Java. .

person Karthik    schedule 18.04.2015
comment
Итак, в песочнице Hortonworks есть несколько пользовательских функций, которые я могу включить. Когда я щелкаю пользовательскую функцию piggbank.jar, чтобы включить ее, автоматически добавляется текст REGISTER piggybank.jar. Я добавляю еще 2 строки, чтобы сделать это REGISTER piggybank.jar; a = CurrentTime(); dump a; Однако я все еще получаю ту же ошибку Cannot expand macro - person simplycoding; 20.04.2015
comment
Проверьте мое последнее редактирование выше, оно должно работать. Вы не можете использовать функцию CurrentTime() напрямую, она должна выполняться для каждого кортежа. - person Karthik; 20.04.2015