Използване на Pig на Hortonworks Sandbox

Опитвам се да използвам 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 doc.

person Karthik    schedule 18.04.2015
comment
Така че в Hortonworks Sandbox имат някои UDF, които мога да включа. Когато щракна върху piggbank.jar UDF, за да го включа, текстът 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