数据仓库概念

数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。

传统的数据仓库是数据存储产品也是数据处理分析产品,能同事支持数据的存储和处理分析

hive数据仓库剑魔 什么是hive数据仓库_hadoop


传统数据仓库所面临的挑战

  • 无法满足快速增长的海量数据存储需求
  • 无法有效处理不同类型的数据
  • 计算和处理能力不足

构建在Hadoop平台之上的Hive

Hive本身不支持数据存储和处理,为用户提供了一种编程语言HiveQL,用户根据提供HiveQL语句,来运行具体的MapReduce任务,支持类似SQL的接口, 很容易进行移植。Hive是一个可以提供有效合理直观组织和使用数据的分析工具

Hive有两个方面的特性:

  1. 采用批处理方式处理海量数据
    数据仓库存储是静态数据,对静态数据的分析适合采用批处理方式, 不需要快速响应给出结果,而且数据本身也不会频繁发生
  2. Hive提供了适合数据仓库的一系列对数据进行提取、转换、加载(ETL)的工具
    可以存储、查询和分析存储在Hadoop的大规模数据。这些工具能够很好地满足数据仓库各种应用场景

hive数据仓库剑魔 什么是hive数据仓库_Hive_02


Pig和Hive应用场景的区别:

  • Pig主要用于数据仓库的ETL环节
  • Hive主要用于数据仓库海量数据的批处理分析

    Hive在企业中的应用

Hive的系统架构

hive数据仓库剑魔 什么是hive数据仓库_hadoop_03


Hive系统架构中三个核心模块

  1. 用户接口,Hive对外访问接口
  • CLI :一种命令行工具
  • HWI : Hive Web Interface 是一种Web接口
  • JDBC和ODBC:开放数据库连接接口很多应用开发都支持
  • Thrift Server:基于Thrift架构开发的接口,允许外界通过这个接口,实现Hive仓库的RPC掉调用
  1. 驱动模块
    包含编译器、优化器、执行器,负责把Hive QL语句转换为一系列MapReduce作业
  2. 元数据存储模块
    是一个独立的关系型数纪库,通过MySQL数据库来存储HIve的元数据

除了用CLI和HWI工具来访问Hive外,还可以采用以下几种典型外部访问工具:

  • Karmasphere
    Karmasphere是由Karmasphere公司发布的一个商业产品。可以直接访问Hadoop里面结构化和非结构化的数据,可以运用SQL及其他语言,可以用于Ad Hoc查询和进一步的分析;还为开发人员提供了一种图形化环境,可以在里面开发自定义算法,为应用程序和可重复的生产流程创建实用的数据集。
  • Hue是由Cloudera提供的一个开源项目。是运营和开发Hadoop应用的图形化用户界面;Hue程序被整合到一个类似桌面的环境,以web程序的形式发布,对于单独的用户来说不需要额外的安装。
  • Qubole公司提供了“Hive即服务”的方式。托管在AWS平台,这样用户在分析存储在亚马逊S3云中的数据集时,就无需了解Hadoop系统管理;提供的Hadoop服务能够根据用户的工作负载动态调整服务器资源配置,实现随需计算。
Hive的工作原理

SQL语句转换成MapReduce作业的基本原理

连接(join)实现的基本原理

  1. 编写Map处理逻辑
  2. Map处理逻辑输入关系数据库的表
  3. 通过Map进行转换,生产一系列的键值对
  4. hive数据仓库剑魔 什么是hive数据仓库_hadoop_04


在Map阶段,表user中记录(uid,name)映射为键值对(uid,<1,name>),表order中记录(uid, orderid)映射为键值对(uid,<2,orderid >)。1,2是表user和order的标记位。

在Shuffle、Sort阶段,(uid,<1,name>)和(uid,<2, orderid >)按键uid的值进行哈希,然后传送给对应的Reduce机器执行,并在该机器上按表的标记位对这些键值对进行排序。比如,(1,<1,Lily>)、(1,<2,101>)和(1,<2,102>)传送到同一台Reduce机器上,并按该顺序排序。

在Reduce阶段,对同一台Reduce机器上的键值对,根据表标记位对来自不同表的数据进行笛卡尔积连接操作,以生成最终的连接结果。

分组(group by)实现的基本原理

hive数据仓库剑魔 什么是hive数据仓库_hadoop_05


在Map阶段,表score中记录(rank,level)映射为键值对(<rank,level> , count(rank,level)),比如,score表的第一片段中有两条记录,所以键值对为(<A,1> ,2)。

在Shuffle、Sort阶段,(<rank,level> ,count(rank,level))按键<rank,level>的值进行哈希,然后传送给对应的Reduce机器执行,并在该机器上按<rank,level>的值对这些键值对进行排序。比如,(<A,1>,2)和(<A,1>,1)传送到同一台Reduce机器上,按到达顺序排序

在Reduce阶段,对Reduce机器上的这些键值对,把具有相同<rank,level>键的所有count(rank,level)值进行累加,生成最终结果。

Hive种SQL查询转换成MapReduce作业的过程

当用户向Hive输入一段命令或查询时,Hive需要与Hadoop交互工作来完成该操作。

首先,驱动模块接收该命令或查询编译器。接着,对该命令或查询进行解析编译。然后,由优化器对该命令或查询进行优化计算。最后该命令或查询通过执行器进行执行

hive数据仓库剑魔 什么是hive数据仓库_hadoop_06


具体可分为以下7步:

  1. 由Hive驱动模块中的编译器对用户输入的SQL语言进行词法和语法解析,将SQL语句转化为抽象语法树的形式,这种语法树无法直接进行MapReduce任务的
  2. 抽象语法树的结构仍然很复杂,不方面直接翻译为MapReduce算法程序,因此,需要把抽象语法树转化为查询块
  3. 把查询块转换成逻辑查询计划,里面包含了许多逻辑操作符
  4. 重写逻辑查询计划,进行优化合并多余操作,减少MapReduce任务数量
  5. 将第四步中的逻辑操作符转换成需要执行的具体MapReduce任务
  6. 对生成的MapReduce任务进行优化生成最终的MapReduce任务执行计划
  7. 由Hive驱动模块中的执行器对最终的MapReduce任务进行执行输出
    当启动MapReduce程序时,Hive本身是不会生成MapReduce算法程序的。需要通过一个表示“job执行计划”的XML文件驱动执行内置的、原生的Mapper和Reducer模块。
    Hive通过和JobTracker通信来初始化MapReduce任务,不必直接部署在JobTracker所在的管理节点上执行。
    通常在大型集群上,会有专门的网关机来部署Hive工具。网关机的作用主要是远程操作和管理节点上的JobTracker通信,来执行任务。
    数据文件通常存储在HDFS上,HDFS由NameNode节点管理
Hive的基本操作

Hive的安装

hive数据仓库剑魔 什么是hive数据仓库_hadoop_07

  1. create:创建数据库、表、视图
  • 创建数据库 create database hive; create database if not exists hive;
  • 创建表 use hive; create table if not exists usr(id bigint, name string, age int) location '/usr/local/hive/warehouse/hive/sur';
  • 创建视图 create view little_usr as select id, age from usr;
  1. show: 查看数据库、表、视图
  • 查看数据库:show database; show database like 'h.*';
  • 查看所有的表和视图:use hive; show tables show tables in hive like 'u.*';
  1. 向表中装载数据
  • 把对用目录下的数据文件中的数据装载进usr表并覆盖原有数据 load data local inpath 'usr/local/data' overwrite into table ust;
  • 把对应目录下的数据文件中的数据装载进usr表不覆盖原有数据 load data local inpath '/usr/local/data' into table usr
  • 把分布式文件系统的数据文件数据装载进usr表并覆盖原有数据 load data inpath 'hdfs://master_server/usr/local/data' overwrite into table usr;
  1. 向表中插入数据或从表中导出数据
  • 向表usr中插入来自usr1表中的数据并覆盖原有的数据 insert overwrite table usr select * from usr1 where age=10;
  • 向表usr中插入来自usr1表总的数据并追加到原来的数据后面 insert into table usr select * from usr where age=10;
Hive应用实例之WordCount
  1. 创建Input目录,在本地创建input目录 mkdir input
  2. 在input目录下创建两个测试文件file1.txt和file2.txt echo "hello world ">file1.txtexho "hello hadoop">file2.txt
  3. 进入hive命令行界面,编写HiveQL语句实现WordCount算法
    create table docs(line string);load data inpath 'input' overwrite into table docs;create table word_count as select word, count(1) as count from (select explode(split(line,'')) as word from docs) w group by word order by word;

WordCount算法在MapReduce中的编程实现和Hive中的编程实现的不同点:

  • Hive的代码量少
  • MaoReduce需要事先编译生成jar文件来执行算法