豚のスクリプト、Hadoop、Hbase は初めてです。これが私が知る必要があることです。豚のスクリプトを実行したかったのですが、豚のスクリプトを Java プログラムに埋め込みたくないので、必要な豚のスクリプトとパラメーター (おそらくパラメーター ファイル) を渡す任意の豚の実行メソッドを介して実行したいと考えていました。コア ピッグ ライブラリまたはその他のライブラリは、ピッグ スクリプトを実行する方法を提供しますか。私はすでに Java ランタイム exec メソッドを試しました。いくつかのパラメーターをスペースで区切られた文字列で渡します。豚コマンドを実行する適切な方法ではないため、ランタイム exec メソッドを介して pig grunt コマンドを呼び出すのをやめました。
3 に答える
私はあなたが何を求めているのか理解できません。Java プログラムから Pig スクリプトを実行する方法を知りたいですか?
その場合は、このクラスを使用しorg.apache.pig.PigRunner
ます。
PigStats pigStats = PigRunner.run(args, null);
その Javadoc は次のように述べています。
Java プログラム内で PIG スクリプトを実行するのに役立つユーティリティ。
しかし、私の経験からすると、Pig は実際にはこのように使用されることを意図していません (少なくともバージョン 0.8 では)。FileStreams が開いたままになったり、一時ファイルが削除されないなどの問題がありました。
他の人は豚の実行をJavaに埋め込むことでよく説明しているので、Javaなしでパラメータ化された豚を実行する方法を追加しましょう。
このシナリオでは、豚ファイルとして保存された豚のコード行だけが必要ですmyFirstPigScript.pig
。
次に必要なのは、パラメータです。ここでは、myFirstPigScript.pig
3 つの入力パラメーターを使用して実行する方法を示します。
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(',') ;
サンプル入力ファイルは 2 列の csv ファイルになります
出力 'part' ファイルは outdirectory に存在します