本人成功在windows下用cygwin配置下述的local开发环境,在cloudera quick start vm中分别配置过local 和 mapreduce开发环境,所有内容源于实践。但在windows下,不知道是jdk 还是其他原因,用cogroup、 illustrate、distinct等命令时会出错,还望有大神赐教。所以建议在装好cdh4 的Linux或quick start vm中搭建开发环境。
cdh4 和 cloudera manager 的安装请参阅官网:http://www.cloudera.com/content/support/en/documentation.html
quick start vm:http://www.cloudera.com/content/cloudera-content/cloudera-docs/DemoVMs/Cloudera-QuickStart-VM/cloudera_quickstart_vm.html (推荐)
本文操作都在cloudera用户下进行
1.新建普通的java project
2.加入运行pig,hadoop所需的jar:
hadoop的jar有点多,把vm中/usr/lib/hadoop/client和/usr/lib/hadoop下所有jar加到buildpath中
工程目录结构:
3.生成项目jar
UDF代码神马的我就不po了,各位可参考大神写的《programming pig》和此wiki:http://wiki.apache.org/pig/UDFManual
写好代码后就可以export jar了:
右键项目:
然后会出现
每当我们更改代码后就可以右击first.xxx -> create jar方便快捷地生成myudfs.jar。
4.运行环境配置
4.1 Linux local模式(调试推荐)
右击项目:
其中testFilter.pig为调用你udf的脚本(记住要register喔!,在windows下却因路径问题不能用register,详情请参照4.3,大神可赐教~~)
ok,接着就可以run或設断点debug了~~~~~
4.2 Linux mapreduce模式
前面配置和4.1一样,只是在最后一张图的时候为:
需要注意的是,myudfs.jar的路径是linux的路径,而load文件的路径是hdfs的路径。因此在mapreduce环境时请将项目中pigData的数据放到hdfs上。
这样去运行还是不行的,会报这样的错误
ERROR 4010: Cannot find hadoop configurations in classpath (neither hadoop-site.xml nor core-site.xml was found in the classpath)
这主要是因为eclipse里的pig读不到hdfs的配置信息。
所以要在Classpath中:
然后加入包含core-site.xml或hadoop-site.xml的文件夹。如我vm中的/etc/hadoop/conf
然后然后然后。。。。。。还会报错,这次就是说配置里host不能用localhost神马的。。。(因为vm就是pseudo的)
因此在自己有读写权限的目录新建一目录,把core-site.xml拉过来,把fs.defaultFS下的localhost啊name啊神马的改为cloudera,然后在/etc/hosts中加入cloudera。
大功告成!!
4.3 windows local环境
这个不推荐,需要装cygwin,问题很多。我就是在windows上调不出问题却在hadoop上fail了才转到linux来的。唯一的不同就是在run configuration中的program arguments 中用 -Dpig.additional.jars=myudfs.jar来代替script中的register,来解决路径问题。
希望各路大神赐教,如有不对的地方还请提出