hadoop是有apache基金会所开发的分布式系统基础架构,其主要提供了双方面的功能:分布式存储和分布式计算。当中分布式存储是分布式计算的基础,在hadoop的实现里面,提供了分布式存储的接口,并自己实现了一个分布式存储的实现即HDFS,但并不代表hadoop仅仅支持HDFS这一中实现,其同一时候支持别的存储系统,并在别的存储系统上运行分布式计算程序(mapreduce)。

 


大数据时代之hadoop(六):hadoop 生态圈(pig,hive,hbase,ZooKeeper,Sqoop)_hdfs

        从开发角度来说。hadoop给开发者预留了两个接口。即map接口和reduce接口。而整个作业的处理流程是固定的,即用户所能做的就是依据详细的项目需求来找到合适的方法实现自己的map函数和reduce函数,从而达到目的。

        从总体上来学习hadoop毕竟还是有点难度的。但已经有一些开源的工具已经替我们做了非常多,如pig,hive,hbase等,本节的重点在于了解这些构建在hadoop基础之上的一些开源工具。也可称为hadoop的生态圈吧。

 

1、pig


   大数据时代之hadoop(六):hadoop 生态圈(pig,hive,hbase,ZooKeeper,Sqoop)_数据_02

      pigs eat anything!

      pig 是Yahoo 为了让研究员和project师可以更简单的挖掘大规模数据集而发明的。

      pig为大型数据集的处理提供了更高层次的抽象。MapReduce使程序猿可以自定定义连续运行的map和reduce函数。

可是。数据处理通常须要多个mapreduce过程才干实现。所以将数据处理要求改写成mapreduce模式非常复杂的。

    与mapreduce相比,pig提供了更丰富的数据结构,还提供了一套强大的数据变换操作。

    Pig包含两部分:

          用于描写叙述数据流的语言,称为pig latin。

          用于运行pig latin程序的运行环境。用两种模式:单JVM中的本地环境和hadoop集群上的分布式运行环境

          一个pig latin程序有一系列的“操作(operation)”和“变换(transformation)”组成。

每一个操作或变换对输入进行处理,然后产生输出结果。

这些操作总体上描写叙述了一个数据流。Pig运行环境把数据流翻译成可运行的内部表示,并运行它。

演示样例:

--载入数据,并依照as 后指定的格式载入
records = load ‘/home/user/input/temperature1.txt’ as (year: chararray,temperature: int);
--打印records 对象
dump records;
describe records;
--过滤掉temperature!=999的数据
valid_records = filter records by temperature!=999;
--按year分组
grouped_records = group valid_records by year;
dump grouped_records;
describe grouped_records;
--取最大数
max_temperature = foreach grouped_records generate group,MAX(valid_records.temperature);
--备注:valid_records是字段名,在上一语句的describe命令结果中可以查看到group_records 的详细结构。
dump max_temperature;


与传统数据库比較:

 

        pig latin 是一种数据流编程语言,而SQL是一种描写叙述性编程语言。

        pig 不支持事物和索引,不支持低延时查询

 

2、hive


大数据时代之hadoop(六):hadoop 生态圈(pig,hive,hbase,ZooKeeper,Sqoop)_数据_03

       Hive是一个构建在hadoop上的数据仓库框架,它的设计目的是让精通SQL技能分析师可以在facebook存放在hdfs的大规模数据集进行查询。

 

       HIVE会把查询转换为一系列在hadoop集群上运行的mapreduce作业。

hive把数据组织为表,通过这样的方式为存储在HDFS的数据赋予结构。元数据如表模式存储在名为metastore的数据库中。


演示样例:

 

(1)创建表

CREATE TABLE csdn (username STRING,passw STRING,mailaddr STRING) row format delimited fields terminated by '#';

(2)load本地文件进csdn表:

LOAD DATA LOCAL INPATH '/home/development/csdnfile' OVERWRITE INTO TABLE csdn;

(3) 运行查询并将结果输出至本地文件夹:

INSERT OVERWRITE LOCAL DIRECTORY '/home/development/csdntop' SELECT passw,count(*) as passwdnum FROM csdn group by passw order by passwdnum desc;


 

与传统数据库比較:

    hive介于pig和传统RDBMS之间。hive的查询语言HiveQL,是基于SQL的。

    hive对数据的验证并不在载入数据时进行,而在查询时进行,称为“读时模式”,而传统的数据库是“写实模式”。

    hive也不支持事物和索引,不支持低延时查询。

 

3、hbase

大数据时代之hadoop(六):hadoop 生态圈(pig,hive,hbase,ZooKeeper,Sqoop)_hive_04

       HBase是一个在HDFS上开发的面向列的分布式数据库,并支持实时地随机读写超大规模数据集


       hbase是我们可以在便宜硬件构成的集群上管理超大规模的稀疏表

数据模型

   在hbase中。表格是由版本号的。单元格的内容是字节数组,表中的行的主键也是字节数组,全部对表的訪问都要通过标的主键。

   一个表的列族必须作为表模式定义的一部分预先给出,可是列族中新的列成员可以随后按需增加。

 

   hbase是有一个面向列族的存储器,即按列族存储。

hbase在水平方向上把表分採“区域”存储,每一个区域有表中的子集构成。

   hbase是一个分布式的、面向列的数据存储系统

4、ZooKeeper

大数据时代之hadoop(六):hadoop 生态圈(pig,hive,hbase,ZooKeeper,Sqoop)_hdfs_05

         ZooKeeper是hadoop的分布式协调服务。诞生于Yahoo公司。


         ZooKeeper提供了一组工具,使我们在构建分布式引用时可以对部分失败进行处理

 

5、Sqoop

              Sqoop是一个开源工具。它同意用户将数据从关系型数据库抽取到hadoop中,用以进一步处理。抽取处理的数据可以被mapreduce程序使用,也可以被其它相似于hive的工具使用。

一旦形成分析结果,Sqoop便可以将这些结果导回数据库。供其它client使用。