一、Pig--数据加工

1、Pig介绍

  Pig是Hadoop生态系统的一个组件
  提供了类似SQL的Pig Latin语言(包含Filter、GroupBy、Join、OrderBy等操作,同时也支持用户自定义函数)
  允许用户通过编写简单的脚本来实现复杂的数据分析,而不需要编写复杂的MapReduce应用程序
  Pig会自动把用户编写的脚本转换成MapReduce作业在Hadoop集群上运行,而且具备对生成的MapReduce程序进行自动优化的功能
  用户在编写Pig程序的时候,不需要关心程序的运行效率,这就大大减少了用户编程时间
  通过配合使用Pig和Hadoop,在处理海量数据时就可以实现事半功倍的效果,比使用Java、C++等语言编写MapReduce程序的难度要小很多,并且用更少的代码量实现了相同的数据处理分析功能

2、Pig过程

Pig语句通常按照如下的格式来编写:
通过LOAD语句从文件系统读取数据
通过一系列“转换”语句对数据进行处理
通过一条STORE语句把处理结果输出到文件系统中,或者使用DUMP语句把处理结果输出到屏幕上

hadoop的动物园 hadoop动物pig_Pig

                

hadoop的动物园 hadoop动物pig_hadoop的动物园_02

 3、采用Pig Latin语言编写的应用程序实例,实现对用户访问网页情况的统计分析

1 visits = load ‘/data/visits’ as (user, url, time);  //从文件/data/visits把网站访问信息加载到visits中
2 gVisits = group visits by url;  //通过站点url对visits分组汇总
3 visitCounts  = foreach gVisits generate url, count(visits);  //遍历gVisits ,得到每个站点的访客总数
4 urlInfo          = load ‘/data/urlInfo’ as (url, category, pRank);  //加载站点信息
5 visitCounts  = join visitCounts by url, urlInfo by url;  //使用站点url 链接visitCounts 和urlInfo 
//得到的连接结果表的结构visitCounts(url,visits,category,pRank)
6 gCategories = group visitCounts by category;  //按照站点类别汇总出每个站点类别的访问总数
7 topUrls = foreach gCategories generate top(visitCounts,10);  //找出访问数最多的10个站点类别8 store topUrls into ‘/data/topUrls’;  //把topUrls 保存到HDFS中

   Pig Latin是通过编译为MapReduce在Hadoop集群上执行的。统计用户访问量程序被编译成MapReduce时,会产生如图所示的Map和Reduce。

  Group和Join会跨越Map和Reduce任务。

hadoop的动物园 hadoop动物pig_Hadoop_03

4、Pig的应用场景
  (1)数据查询,只面向相关技术人员
  (2)即时性的数据处理需求,这样可以通过pig很快写一个脚本开始运行处理,而不需要创建表等相关的事先准备工作

Pig主要用户
Yahoo!: 90%以上的MapReduce作业是Pig生成的
Twitter: 80%以上的MapReduce作业是Pig生成的
Linkedin: 大部分的MapReduce作业是Pig生成的
其他主要用户: Salesforce, Nokia, AOL, comScore

二、Tez

1、Tez介绍

  Tez是Apache开源的支持DAG作业的计算框架,它直接源于MapReduce框架
  核心思想是将Map和Reduce两个操作进一步拆分
  Map被拆分成Input、Processor、Sort、Merge和Output
  Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等
  分解后的元操作可以任意灵活组合,产生新的操作
  这些操作经过一些控制程序组装后,可形成一个大的DAG作业
  通过DAG作业的方式运行MapReduce作业,提供了程序运行的整体处理逻辑,就可以去除工作流当中多余的Map阶段,减少不必要的操作,提升数据处理的性能
  Hortonworks把Tez应用到数据仓库Hive的优化中,使得性能提升了约100倍

2、Tez的优化主要体现在:
  去除了连续两个作业之间的“写入HDFS”
  去除了每个工作流中多余的Map阶段

3、Tez实例

SELECT a.state, COUNT(*),AVERAGE(c.price)
FROM a
JOIN b ON (a.id = b.id)
JOIN c ON (a.itemId = c.itemId)
GROUP BY a.state

 上面任务Tez过程和Hive过程对比如下:

hadoop的动物园 hadoop动物pig_Hadoop_04

hadoop的动物园 hadoop动物pig_Hadoop_05

4、Tez框架在Hadoop生态系统中的作用

  在Hadoop2.0生态系统中,MapReduce、Hive、Pig等计算框架,都需要最终以MapReduce任务的形式执行数据分析,因此,Tez框架可以发挥重要的作用
  借助于Tez框架实现对MapReduce、Pig和Hive等的性能优化,可以解决现有MR框架在迭代计算(如PageRank计算)和交互式计算方面的问题

 

hadoop的动物园 hadoop动物pig_Hadoop_06

5、(Tez+Hive)与Impala、Dremel和Drill的区别?

  Tez在解决Hive、Pig延迟大、性能低等问题的思路,是和那些支持实时交互式查询分析的产品(如Impala、Dremel和Drill等)是不同的
  (1)Impala、Dremel和Drill思路

  Impala、Dremel和Drill的解决问题思路是抛弃MapReduce计算框架,不再将类似SQL语句的HiveQL或者Pig语句翻译成MapReduce程序,而是采用与商用并行关系数据库类似的分布式查询引擎,可以直接从HDFS或者HBase中用SQL语句查询数据,而不需要把SQL语句转化成MapReduce任务来执行,从而大大降低了延迟,很好地满足了实时查询的要求
  (2)Tez优化思路

  Tez则不同,比如,针对Hive数据仓库进行优化的“Tez+Hive”解决方案,仍采用MapReduce计算框架,但是对DAG的作业依赖关系进行了裁剪,并将多个小作业合并成一个大作业,这样,不仅计算量减少了,而且写HDFS次数也会大大减少

三、Spark

  Hadoop缺陷,其MapReduce计算模型延迟过高,无法胜任实时、快速计算的需求,因而只适用于离线批处理的应用场景
  中间结果写入磁盘,每次运行都从磁盘读数据
  在前一个任务执行完成之前,其他任务无法开始,难以胜任复杂、多阶段的计算任务

  Spark最初诞生于伯克利大学的APM实验室,是一个可应用于大规模数据处理的快速、通用引擎,如今是Apache软件基金会下的顶级开源项目之一

  Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题

  内存计算,带来了更高的迭代运算效率
  基于DAG的任务调度执行机制,优于MapReduce的迭代执行机制

  当前,Spark正以其结构一体化、功能多元化的优势,逐渐成为当今大数据领域最热门的大数据计算平台

四、Kafka

  Kafka是一种高吞吐量的分布式发布订阅消息系统,用户通过Kafka系统可以发布大量的消息,同时也能实时订阅消费消息
  Kafka可以同时满足在线实时处理和批量离线处理

 

hadoop的动物园 hadoop动物pig_Hadoop_07

  在公司的大数据生态系统中,可以把Kafka作为数据交换枢纽,不同类型的分布式系统(关系数据库、NoSQL数据库、流处理系统、批处理系统等),可以统一接入到Kafka,实现和Hadoop各个组件之间的不同类型数据的实时高效交换。