面向Hadoop框架的高级语言:Apache Pig

栏目: Apache · 发布时间: 7年前

内容简介:面向Hadoop框架的高级语言:Apache Pig

Apache Pig是用来处理大规模数据的高级查询语言,配合 Hadoop使用,可以在处理海量数据时达到事半功倍的效果,比使用Java,C++等语言编写大规模数据处理程序的难度要小N倍,实现同样的效果的代码量也小N倍。Apache Pig为大数据集的处理提供了更高层次的抽象,为mapreduce算法(框架)实现了一套类 SQL 的数据处理脚本语言的 shell 脚本,在Pig中称之为Pig Latin,在这套脚本中我们可以对加载出来的数据进行 排序 、过滤、求和、分组(group by)、关联(Joining),Pig也可以由用户自定义一些函数对数据集进行操作,也就是传说中的UDF(user-defined functions)。

Pig有两种运行模式:Loca模式和MapReduce模式。当Pig在Local模式下运行时,Pig只访问本地一台主机;当Pig在 MapReduce模式下运行时,它将访问一个Hadoop集群和HDFS的安装位置。这时,Pig将自动地对这个集群进行分配和回收。因为Pig系统可以自动对MapReduce程序进行优化,所以当用户使用Pig Latin语言进行编程的时候,不必关心程序运行的效率,Pig系统将会自动对程序进行优化,这样可以大了节省编程时间。Pig的Local模式和 MapReduce模式都有三种运行方式,分别为:Grunt Shell方式、脚本文件方式和嵌入式程序方式。

Pig是一种编程语言,它简化了Hadoop常见的工作任务。Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操作使得半结构化数据变得有意义(如日志文件)。同时Pig可扩展使用 Java 中添加的自定义数据类型并支持数据转换。

Pig在数据类型上的设计理念总结为一句口号:pig吃任何东西,输入数据可以支持任何格式,pig天生支持那些流行的格式,如制表符分隔的文本文件,用户也可以增加函数支持其他的数据格式文件,pig不需要元数据或者数据的schma,但如果有也可以利用。

Apache Pig基本架构

面向Hadoop框架的高级语言:Apache Pig

Pig的实现5个主要部分构成:

面向Hadoop框架的高级语言:Apache Pig

Pig自己实现的一套框架对输入、输出的人机交互部分的实现,就是Pig Latin 。

Zebra是Pig与HDFS/Hadoop的中间层、Zebra是MapReduce作业编写的客户端,Zerbra用结构化的语言实现了对 hadoop物理存储元数据的管理也是对Hadoop的数据抽象层,Zebra中有2个核心的类 TableStore(写)/TableLoad(读)对Hadoop上的数据进行操作。

Pig中的Streaming主要分为4个组件: 1. Pig Latin 2. 逻辑层(Logical Layer) 3. 物理层(Physical Layer) 4. Streaming具体实现(Implementation),Streaming会创建一个Map/Reduce作业,并把它发送给合适的集群,同时监视这个作业的在集群环境中的整个执行过程。

MapReduce在每台机器上进行分布式计算的框架(算法)。

HDFS最终存储数据的部分。

与Hive对比

面向Hadoop框架的高级语言:Apache Pig

Language:在Hive中可以执行 “插入/删除”等操作,但是Pig中我没有发现有可以“插入”数据的方法。

Schemas:Hive中至少还有一个“表”的概念,但是Pig中我认为是基本没有表的概念,所谓的表建立在Pig Latin脚本中,对与Pig更不要提metadata了。

Partitions:Pig中没有表的概念,所以说到分区对于Pig来说基本免谈,如果跟Hive说“分区”(Partition)他还是能明白的。

Server:Hive可以依托于Thrift启动一个服务器,提供远程调用。Pig没有发现有这样的功能。

Shell:在Pig 你可以执行一些个 ls 、cat 这样很经典、很cool的命令,但是在使用Hive的时候我压根就没有想过有这样的需求。

Web Interface:Hive有,Pig无

JDBC/ODBC:Pig无,Hive有

Pig的应用场景

数据查询只面向相关技术人员

即时性的数据处理需求,这样可以通过pig很快写一个脚本开始运行处理,而不需要创建表等相关的事先准备工作。

Pig包括:

Pig Latin, 类SQL数据处理语言

在Hadoop上运行的Pig Latin执行引擎,将pig脚本转换为map-reduce程序在hadoop集群运行

Pig的优点:

编码简单

对常见的操作充分优化

可扩展。自定义UDF

Pig主要用户

Yahoo!: 90%以上的MapReduce作业是Pig生成的

Twitter: 80%以上的MapReduce作业是Pig生成的

Linkedin: 大部分的MapReduce作业是Pig生成的

其他主要用户: Salesforce, Nokia, AOL, comScore

Pig的主要开发者

Hortonworks

Twitter

Yahoo!

Cloudera

Pig工具

Piggybank(Pig官方函数库)

Elephant bird: Twitter的Pig函数库

DataFu: Linkedin的Pig函数库

Ambros: Twitter的Pig作业监控系统

Mortardata: 基于云的Pig集群管理系统

Pig定位

面向Hadoop框架的高级语言:Apache Pig

Pig Latin语言和传统的数据库语言很相似,但是Pig Latin更侧重于数据查询。而不是对数据进行修改和删除等操作。pig语句通常按照如下的格式来编写。

通过LOAD语句从文件系统读取数据

通过一系列”转换”语句对数据进行处理

通过一条STORE语句把处理结果输出到文件系统中,或者使用DUMP语句把处理结果输出到屏幕上。

LOAD和STORE语句有严格的语法规定。关键是灵活使用转换语句对数据进行处理。

Pig Latin的特性:

易于编程。实现简单的和高度并行的数据分析任务非常容易。

自动优化。任务编码的方式允许系统自动去优化执行过程,从而使用户能够专注于逻辑,而非效率。

可扩展性,用户可以轻松编写自己的函数用于特殊用途的处理。

Pig Latin 程序有一系列的 operation 和 transformation 组成。每个操作或变换对输入进行数据处理,然后产生输出结果。这些操作整体上描述了一个数据流。Pig 内部,这些变换操作被转换成一系列的 MapReduce 作业。Pig 不适合所有的数据处理任务,和 MapReduce 一样,它是为数据批处理而设计的。如果只想查询大数据集中的一小部分数据,Pig 的实现不会很好,因为它要扫描整个数据集或绝大部分。

面向Hadoop框架的高级语言:Apache Pig

参考资料

Pig网址:http://pig.apache.org


以上所述就是小编给大家介绍的《面向Hadoop框架的高级语言:Apache Pig》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Linux Programming Interface

The Linux Programming Interface

Michael Kerrisk / No Starch Press / 2010-11-6 / GBP 79.99

The Linux Programming Interface describes the Linux API (application programming interface)-the system calls, library functions, and other low-level interfaces that are used, directly or indirectly, b......一起来看看 《The Linux Programming Interface》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具