Pig Java Udfの概要

3452 ワード

pigを使う過程で、いつも自分でudfを書く必要があります.一般的にjavaのudfを書いて、mavenのプロジェクトを構成して管理します.基本的なpig java udfのmavenプロジェクトのpom定義は以下の通りです.
 

	4.0.0
	com.x
	PigUdf
	0.0.1-SNAPSHOT

	

		
		
			com.google.protobuf
			protobuf-java
			2.5.0
			provided
		
		
			com.x
			commons-protobuf
			0.1.1
			system 
			${basedir}/jars/commons-protobuf.jar 
		

		
			org.apache.hadoop
			hadoop-common
			2.2.0
		

		
			org.apache.pig
			pig
			0.13.0
			provided
		

	

	
		${project.artifactId}
		
			
				org.apache.maven.plugins
				maven-compiler-plugin
				2.3.2
				
					1.6
					1.6
					1.6
				
			

			
				maven-assembly-plugin
				
					
						jar-with-dependencies
					
				
				
					
						config
						package
						
							single
						
					
				
			

		
	

このdependencyはpig javaのインタフェースから来ています.
 
		
			org.apache.pig
			pig
			0.13.0
			provided
		

次にmavenのrepositoryを構成し、コマンドを実行します.
mvn clean package

tagetディレクトリの下にjarパッケージが表示されます.仮にudfという名前のCalcMetric()を書いてmyudf-jar-with-dependencies.jarをコンパイルしたとします.
この時pigがあるとします
 
register PigUdf.jar;

DEFINE CalcMetric com.x.pig.udf.CalcMetric();

raw_data = load '$input' using PigStorage('\u0001') as (val:long);

metrics_data = foreach raw_data generate CalcMetric(val) as metric;

store metrics_data into '$output' using PigStorage('\0001', '-schema');

ではpigを実行します
pig -f mypig.pig -param input=/user/tom/test/input_data -param output=/user/tom/test/output_data

Pigのregister文は、使用するjarパケットを示し、その後にjarパケットのパスが続く.これはHDFSパスではなくlocalパスである.pig scriptにjarパッケージ名のみを書き、コマンドラインにclasspathを指定することもできます.
-cp $your_path 
または
-Dpig.additional.jars='your_jar_path'
このjava udfなどの他のデータファイルにアクセスする必要がある場合は、ローカルファイルに依存して初期化します.Java udfはhadoop grid nodeでも一度初期化するのでgrid nodeでもこの問題があることを保証しなければならないので、この場合はhadoopのDistributedCacheを使う必要があります.このコマンドを使用できます.
-Dtmpfiles='$your_file'
または、pig scriptに次のように書きます.
set mapred.cache.files 'your_file'