大数据时代之hadoop(一):hadoop安装

大数据时代之hadoop(二):hadoop脚本解析

大数据时代之hadoop(三):hadoop数据流(生命周期)

大数据时代之hadoop(四):hadoop 分布式文件系统(HDFS)

大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)

 

 

 

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

 


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


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

 

1、pig

   

      pigs eat anything!


      pig 是Yahoo 为了让研究员和工程师能够更简单的挖掘大规模数据集而发明的。


      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

       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

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


       hbase是我们能够在廉价硬件构成的集群上管理超大规模的稀疏表


数据模型


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


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

 

   hbase是有一个面向列族的存储器,即按列族存储。hbase在水平方向上把表分采“区域”存储,每个区域有表中的子集构成。


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


4、ZooKeeper

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


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

 

5、Sqoop

              Sqoop是一个开源工具,它允许用户将数据从关系型数据库抽取到hadoop中,用以进一步处理。抽取处理的数据可以被mapreduce程序使用,也可以被其他类似于hive的工具使用。一旦形成分析结果,Sqoop便可以将这些结果导回数据库,供其他客户端使用。

 

 

 

 


 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐