2016-07-20 9 views
1

Ich bin mit Schwein mit Hcatalog Daten laden von hive externen Tabelle Ich trete Grunzen Schwein -useHCatalog mit und führen Sie die folgenden Schritte aus:Pig Script gibt

register 'datafu' 

define Enumerate datafu.pig.bags.Enumerate('1'); 

imported_data = load 'hive external table' using org.apache.hive.hcatalog.pig.HCatLoader() ; 


converted_data = foreach imported_data generate name,ip,domain,ToUnixTime(ToDate(dateandtime,'MM/dd/yyyy hh:mm:ss.SSS aa'))as unix_DateTime,date; 


grouped = group converted_data by (name,ip,domain); 

result = FOREACH grouped { 
      sorted = ORDER converted_data BY unix_DateTime; 
      sorted2 = Enumerate(sorted); 
      GENERATE FLATTEN(sorted2); 
}; 

Alle Befehle ausführen und gewünschte Ergebnis liefern.

Problem: Ich habe ein Schwein Skript mit über Befehle wie pigFinal.pig genannt und ausgeführt folgende im lokalen Modus Coz Skript in lokalen Dateisystem.

pig -useHCatalog -x local '/path/to/pigFinal.pig'; 

Exception

fehlgeschlagen logischen Plan zu erzeugen. Verschachtelte Ausnahme: org.apache.pig.backend.executionengine.ExecException: ERROR 1070: Konnte nicht datafu.pig.bags.Enumerate mithilfe von Imports beheben: [, java.lang., Org.apache.pig.builtin., org.apache.pig.impl.builtin] bei org.apache.pig.parser.LogicalPlanBuilder.buildUDF (LogicalPlanBuilder.java:1507) bei org.apache.pig.parser.LogicalPlanGenerator.func_eval (LogicalPlanGenerator.java.: 9372) bei org.apache.pig.parser.LogicalPlanGenerator.projectable_expr (LogicalPlanGenerator.java:11051) bei org.apache.pig.parser.LogicalPlanGenerator.var_expr (LogicalPlanGenerator.java:10810) bei org.apache .pig.parser.LogicalPlanGenerato r.expr (LogicalPlanGenerator.java:10159) bei org.apache.pig.parser.LogicalPlanGenerator.nested_command (LogicalPlanGenerator.java:16315) bei org.apache.pig.parser.LogicalPlanGenerator.nested_blk (LogicalPlanGenerator.java: 16116) bei org.apache.pig.parser.LogicalPlanGenerator.foreach_plan (LogicalPlanGenerator.java:16024) bei org.apache.pig.parser.LogicalPlanGenerator.foreach_clause (LogicalPlanGenerator.java:15849) bei org.apache .pig.parser.LogicalPlanGenerator.op_clause (LogicalPlanGenerator.java:1933) unter org.apache.pig.parser.LogicalPlanGenerator.general_statement (LogicalPlanGenerator.java:1102) bei org.apache.pig.parser.LogicalPlanGenerator.statement (LogicalPlanGenerator.java:560) bei org.apache.pig.parser.LogicalPlanGenerator.query (LogicalPlanGenerator.java:421) bei org.apache.pig .parser.QueryParserDriver.parse (QueryParserDriver.java:188) ... 17 weitere

Wo lese ich datafu jar für Schweine Skripte registrieren? ich denke, das ist die Frage. Bitte helfen Sie

Antwort

0

Sie müssen sicherstellen, dass die JAR-Datei in dem gleichen Ordner wie Ihre Pigscript befindet oder stellen Sie sicher, dass der korrekte Pfad in der Pigscript während der Registrierung der JAR-Datei zur Verfügung gestellt wird.Also in Ihrem Fall

Ändern Sie diese

register 'datafu' 

Um

-- If,lets say datafu-1.2.0.jar is your jar file and is located in the same folder as your pigscript then in your pigscript at the top have this 
REGISTER datafu-1.2.0.jar 

-- Else,lets say datafu-1.2.0.jar is your jar file and is located in the folder /usr/hadoop/lib then in your pigscript at the top have this 
REGISTER /usr/hadoop/lib/datafu-1.2.0.jar 
+0

Danke ich mit der ersten Option. – TKHN

0
pig -useHCatalog \ 
    -x local \ 
    -Dpig.additional.jars="/local/path/to/datafu.jar:/local/path//other.jar" \ 
    /path/to/pigFinal.pig; 

OR

in Ihrem Schwein Skript Verwendung vollständig qualifizierten Pfad

register /local/path/to/datafu.jar;