Вопрос по java, apache-pig – Запустить свинью в Java без встраивания сценария свиньи

3

Я новичок в сценарии свиньи, Hadoop, Hbase. Вот что мне нужно знать. Я хотел запустить скрипт PIG, я не хочу вставлять скрипт PIG в свою Java-программу и хотел запустить его с помощью любых методов Pig Execution, передавая необходимый скрипт PIG и параметры (возможно, файл параметров). Предоставляет ли базовая библиотека pig или любую другую библиотеку такой способ выполнения сценария pig. Я уже пробовал с помощью метода exec времени выполнения Java, я передаю некоторые параметры с разделенными пробелом строками, поэтому я прекратил вызывать команду pig grunt через метод exec времени выполнения, так как это неправильный способ выполнения команд pig.

Ваш Ответ

4   ответа
8

Вы можете использовать org.apache.pig.PigServer для запуска сценариев pig из Java-программ.

PigServer pigServer = new PigServer(ExecType.MAPREDUCE);
pigServer.registerScript("scripts/test.pig");

Требуется "pig.properties" на пути к классам.

fs.default.name=hdfs://<namenode-hostname>:<port>
mapred.job.tracker=<jobtracker-hostname>:<port>

Или передайте экземпляр java.util.Properties в конструктор PigServer.

Properties props = new Properties();
props.setProperty("fs.default.name", "hdfs://<namenode-hostname>:<port>");
props.setProperty("mapred.job.tracker", "<jobtracker-hostname>:<port>");
PigServer pigServer = new PigServer(ExecType.MAPREDUCE, props);
Как получить логи при выполнении свиного скрипта? Как узнать, успешно выполнено задание или нет?
0

Поскольку другие хорошо объяснили выполнение свиньи, встраивая ее в Java, позвольте мне добавить, как запустить параметризованную свинью без Java.

В этом сценарии все, что вам нужно, это ваши строки кода, сохраненные в виде файла свиньи, скажем,myFirstPigScript.pig.

Следующее, что вам нужно, это параметры внутри. Ну вот способ запустить свойmyFirstPigScript.pig с тремя входными параметрами.

pig -p in1=file1.txt -p in2=file2.txt -p outdirectory=outdirectory myFirstPigScript.pig 

Ваш сценарий свиньи будет выглядеть

A = load '$in1' USING PigStorage(',') AS (id_one:chararray,file1field1:chararray); 
B = load '$in2' USING PigStorage(',') AS (id_two:chararray,file2field1:chararray); 
C = join A by id_one, B by id_two;
store D into '$outdirectory' USING PigStorage(',') ;

Пример входных файлов будет CSV-файл с двумя столбцами

Вывести «часть» файлы будут присутствовать в директории

1

Я не уверен, что понимаю, о чем вы спрашиваете. Вы хотите знать, как запустить скрипт Pig из Java-программы?

Если так, мы используем классorg.apache.pig.PigRunner за это.

PigStats pigStats = PigRunner.run(args, null);

Его Javadoc утверждает:

A utility to help run PIG scripts within a Java program.

Однако из моего опыта Pig не предназначен для использования таким образом (по крайней мере, в версии 0.8). У нас были проблемы, такие как FileStreams, которые остались открытыми, и временные файлы, которые не были удалены.

1

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

http://wiki.apache.org/pig/EmbeddedPig

Похожие вопросы