0 概念:
Pig是专门用于处理数据的。
Pig提供了一套流式的数据处理语言,转换为MapReduce,处理HDFS中的数据。
pig加载hdfs文件到自己体系内处理好后在送回去。
pig中的字符串类型是bytearray
下载地址: http://www.apache.org/dyn/closer.cgi/pig
1 如何安装和使用pig?
不用配置,pig启动时读配置文件得到Hadoop的配置信息
直接解压缩,执行bin/pig,就进入到终端grunt命令行,会发现自动连接Hadoop的 hdfs://master:9000,如下:
ne.HExecutionEngine - Connecting to hadoop file system at: hdfs://master:9000
2014-12-24 00:11:44,406 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: master:9001
grunt>
2 命令简介:
a) 查看hdfs文件
grunt> fs -ls /
Found 8 items
drwxr-xr-x - zm supergroup 0 2014-12-18 21:23 /files
drwxr-xr-x - root supergroup 0 2014-12-23 20:55 /hbase
-rw-r--r-- 3 zm supergroup 2388 2014-12-23 20:48 /hello
-rw-r--r-- 3 zm supergroup 19 2014-12-02 04:16 /hello2
drwxr-xr-x - zm supergroup 0 2014-12-18 21:24 /out
drwxr-xr-x - root supergroup 0 2014-12-11 23:46 /tmp
drwxr-xr-x - root supergroup 0 2014-12-11 19:24 /user
drwxr-xr-x - root supergroup 0 2014-12-08 03:04 /usr
b)load 加载HDFS输入进入Pig, 主要 load后跟的是hdfs的路径
=左右需要空格
dump命令用于查看
a = load '/user.data';dump a; //默认使用制表符分隔加载的文件
b = load '/user.data2' using PigStorage(';');dump b; //加载文件时,指定分隔符,这样展示的时候会将分割的东西用,间隔后展示
eg: 展示b的结果为:
hello,you)
(hello,me)
(hello,30)
c = load '/user.data' using HBaseStorage;//可以加载hbase数据
d = load '/user.data' as (id, name);dump d; // 加载时 指定别名
grunt> describe d;
d: {id: bytearray,name: bytearray}
e = load '/user.data' as (id:int, name:bytearray);dump e; // 加载时,指定别名和对应加载后的类型
c) 将pig内处理的数据在写入到hdfs中:
store...into... 写入到hdfs中
eg:
grunt> store c into '/pigtest'; // 需要'' ,写到hdfs下的是目录结构
后用hdfs命令查看:
[root@master data]# hadoop fs -text /pigtest/part-m-00000
Warning: $HADOOP_HOME is deprecated.
hello you
hello me
hello 30
d) describe 显示关系的结构
foreach...generate... 迭代每一行记录 // 类比于, select $0 as id, $1 as name from a; $占位符,表示目标文件以分隔符分割下元素位置
f = foreach a generate $0 as id, $1 as name;dump f;
g = foreach e generate id,name;dump g;
filter...by... 过滤 // 类比于 where
h = filter f by id>1;dump h;
group...by... 分组
group h by uid;
order...by... 排序
i = order h by uid desc;
3 和hive的区别:
pig每一步都是一个小的操作,没有一个像 select from where group by order by 这种复杂操作,
hive: 立定跳远,一下要跳到终点, 适用人群: 更倾向于使用SQL语句
pig: 分小步来跳,每一步都不累,然后到达终点