一只猪让大数据飞起来

2022-04-27 19:04:46 浏览数 (1)

1,Pig 简介

每一个技术的产生都是对实现问题的一种反馈,Pig的出现也不例外。

人与人的互联,物与物的互通,人与物的交互~言行动作都产生了很多数据,这些数据对于企业却是弥足珍贵的,在物质充裕的时代,数据信息才是石油。

于是Hadoop大数据生态出现了,基于MapReduce的核心思想构建集群来处理大数据。

Pig作为生态的一部分出现在我们的眼前:它在MapReduce的基础上创建了更简单的过程语言抽象,为Hadoop应用程序提供了一种更加接近SQL的接口。

Pig的本地模式能方便的让我们处理本地的大文本文件,比如上百万行的数据Excel有心无力,Pig可以;复杂的多值嵌套的数据Excel很费劲,Pig很轻松。不需要去用Java去写复杂的Map Reduce代码,Pig轻松的语义化处理过程。

Pig:经典思路是一大拆多小,一层变多层,让文本数据模式化,处理起来更高效,几行程序可以出上TB的数据。

2,Pig在MAC上的安装

Pig包含两部分:

1,用于描述数据流的语言,称为Pig Latin;

2,用于Pig Latin程序执行的环境。(单JVM的本地环境和Hadoop集群上的分布式环境)。

Pig内部的一系列操作与变换都被转换成一系列的Map Reduce,是探索大规模数据集的脚本语言,五六行代码就可以处理TB级的数据

安装如下:

代码语言:javascript复制
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果报错,可以先下载:文件 brew_install.rb,然后控制台运行ruby brew_install.rb;修改镜像为国内,可以提升下载速度。

代码语言:javascript复制
brew install pig
安装完成后:
#进入本地模式,开启处理大文件之旅
pig -x local

3,Pig基础运用

3.1 模拟一个文本数据-student.txt

文件中包含:科目,学生姓名,成绩;我们从处理这个文件中来一起学习pig的入门操作。

2,基本操作

load 数据文件的载入,并用PigStorage来指定列的分隔符,用as 进行模式声明:字段名/类型。

s

代码语言:javascript复制
tudent = load '/Users/my_pig/student.txt' using PigStorage(',')
as (subject:chararray, name:chararray, score:int);

# 来查看数据模式
describe student

上面模式输出,我们可以看出类似数据表的结构,student是一个表名,有三字段:subject,name,score;每一个字段都有指定好的类型。方便我们后续的加工处理分析。

简单的操作:过滤,分组,取最大最小值,大家可以不断扩张自己的操作能力。

代码语言:javascript复制
filter_subject = FILTER student by subject=='语文';#查看结果集dump filter_subject;
代码语言:javascript复制
#分组:通过科目
group_subject = group filter_subject by subject;
#查看结果集-将多行数据-分组后变成一行
dump group_subject;

基于group_subject分组后的数据,我们才可以最聚合计算操作,也就是说数据的模式中需要包含group信息。

代码语言:javascript复制
max_min_score = foreach group_subject generate group, MAX(filter_subject.score), MIN(filter_subject.score);
#查看结果集
dump max_min_score
#保存结果成为一个文件
store max_min_score into 'yuwen_score' using PigStorage(',');

3,高级链接操作

典型的内连接(inner join)操作

代码语言:javascript复制
inner_student  = join student by $0, max_min_score by $0;
#查看结果集
dump inner_student;
--
(语文,小7白,122,语文,122,120)
(语文,小6白,120,语文,122,120)
(语文,小4白,120,语文,122,120)
(语文,小3白,120,语文,122,120)
(语文,小白,120,语文,122,120)
(语文,小一白,120,语文,122,120)
(语文,小2白,120,语文,122,120)

外连接(outer join)的操作,可以指定 LEFT OUTER或者 OUTER

代码语言:javascript复制
outer_student  = join  student by $0 LEFT OUTER, max_min_score by $0;
#查看结果集 
dump outer_student;

还有Cross操作,形成两个数据集的“交叉相乘”,形成数据的笛卡尔积。

代码语言:javascript复制
cross_student  = CROSS student, max_min_score

还有cogroup, flatten,union,排序等操作。

4,QA与总结

Pig看上去和SQL很相似,但有几点不同:

Pig是一种数据流编程语言,一步一步的操作,上一步的输出可以做为下一步的输入,将问题分成连贯的小步,不断逼近我们想要的数据结果,符合我们人类的工作习惯。而SQL是一种声明式的编程语言,是完整的约束集合,是一起提交运行的。

关系数据库对数据存储有严格的模式定义,比如整型的数据列不能存字符。而Pig对它处理的数据模式要求比较宽松。

Pig 对复杂,多值嵌套的数据结构的支持也不同于只能处理平面数据类型的SQL。但是SQL是支持在线低延迟的查询,Pig主要集中在离线的批数据处理。

结合不同场景,选择二者,我们的工作才能事半功倍。

0 人点赞