Pig 的安装与使用

编写 Map 和 Reduce 应用程序并不十分复杂(是吗?),但这些编程确实需要一些软件开发经验。Apache Pig 改变了这种状况,它在 MapReduce 的基础上创建了更简单的过程语言抽象,为 Hadoop 应用程序提供了一种更加接近结构化查询语言 (SQL) 的接口。因此,您不需要编写一个单独的 MapReduce 应用程序,您可以用 Pig Latin 语言写一个脚本,在集群中自动并行处理与分发该脚本。它会自动转换未MR运行

再次感叹一下 CDH 这个套件真是Crazing,Pig又默认集成了,并且Hue中还有Pig Editor的在线编辑界面,还有一些辅助函数功能。

当然你是可以自己安装的,那肯定是要配置,搞半天,然后复制一堆的 jar包等等。

Pig 整合 HBase

Pig使用HBase交互需要增加两个jar包,打开Hue Pig Editor 界面中 "属性->资源" 添加HBase所需的资源文件,这样在写 Pig 脚本的时候,就不需要显式的 REGISTER 语句

CDH 已经默认导入了一些jar包,在/user/oozie/share/lib/lib_20160121155207/pig/ 目录下。

先上传:

sudo -u oozie hdfs dfs -put /opt/cloudera/parcels/CDH/jars/hbase-server-1.0.0-cdh5.5.1.jar /user/oozie/share/lib/lib_20160121155207/pig
sudo -u oozie hdfs dfs -put /opt/cloudera/parcels/CDH/jars/zookeeper-3.4.5-cdh5.5.1.jar /user/oozie/share/lib/lib_20160121155207/pig

在资源中增加以下三个:

hbase-client-1.0.0-cdh5.5.1.jar
zookeeper-3.4.5-cdh5.5.1.jar
hbase-server-1.0.0-cdh5.5.1.jar

Pig 导出 HBase数据到 csv 文件

导出某些字段、导出行建,字段间以TAB分割

x = LOAD 'hbase://test:content' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('d:md5,d:catid,d:modelid', '-loadKey');
STORE x INTO '/tmp/pig_content_export' USING PigStorage('\t');

导出数据示例:

10001   d89f3a35931c386956c1a402a8e09941    9812    110002  9103c8c82514f39d8360c7430c4ee557    8540    110003  f5dffc111454b227fbcdf36178dfe6ac    3722    1

如果只提供列族,

x = LOAD 'hbase://test:content' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('d', '-loadKey');
STORE x INTO '/tmp/pig_content_export' USING PigStorage('\t');

导出的字段会是这样:

10001   [title#dppHnvncykEpPdYIuZMOHWIBHJyoZfDCauZNOHVFnCVXaiPCqWKKwedgxRRKZRmIDUNfnYdxdZKAAbFW,time#2003-05-26 12:19:22,status#6,md5#d89f3a35931c386956c1a402a8e09941,modelid#1,publishedby#6,published#1448235977,datetime#2009-05-26 02:11:34,catid#9812]
10002   [title#CmDfRSMiExyYAExwTbzwJesCJNLrAEthCqYWKLBzRKaYPdYJypcuOMqwiCnFnzLdjLenanrRiqexbQXoFicJpyvKmeMwWuiEzHQfcZNRWfLp,time#2008-03-27 15:11:06,status#6,md5#9103c8c82514f39d8360c7430c4ee557,modelid#1,publishedby#232,published#1210749943,datetime#2015-08-12 20:33:38,catid#8540]

Pig 处理示例

这个脚本是从HBase一张表中的Html字段通过正则匹配出title与description标签,最终输出另一张表:

DATA = LOAD 'hbase://test:raw' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('d:name, d:html', '-loadKey') 
    AS (key:chararray, name:chararray, html:chararray);

FORMAT = foreach DATA generate
    key AS key:chararray,
    TRIM(REGEX_EXTRACT(html, '<title>(.*)</title>', 1)) AS title:chararray, 
    TRIM(REGEX_EXTRACT(html, '<meta name="description" content="(.*)">', 1)) AS description:chararray;

STORE FORMAT INTO 'hbase://test:raw_format' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('d:title d:description');