数据仓库概念
数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。
传统的数据仓库是数据存储产品也是数据处理分析产品,能同事支持数据的存储和处理分析
传统数据仓库所面临的挑战
无法满足快速增长的海量数据存储需求无法有效处理不同类型的数据计算和处理能力不足
构建在Hadoop平台之上的Hive
Hive本身不支持数据存储和处理,为用户提供了一种编程语言HiveQL,用户根据提供HiveQL语句,来运行具体的MapReduce任务,支持类似SQL的接口, 很容易进行移植。Hive是一个可以提供有效合理直观组织和使用数据的分析工具
Hive有两个方面的特性:
采用批处理方式处理海量数据
数据仓库存储是静态数据,对静态数据的分析适合采用批处理方式, 不需要快速响应给出结果,而且数据本身也不会频繁发生Hive提供了适合数据仓库的一系列对数据进行提取、转换、加载(ETL)的工具
可以存储、查询和分析存储在Hadoop的大规模数据。这些工具能够很好地满足数据仓库各种应用场景
Pig和Hive应用场景的区别:
Pig主要用于数据仓库的ETL环节Hive主要用于数据仓库海量数据的批处理分析
Hive在企业中的应用
Hive的系统架构
Hive系统架构中三个核心模块
用户接口,Hive对外访问接口 CLI:一种命令行工具HWI : Hive Web Interface 是一种Web接口JDBC和ODBC:开放数据库连接接口很多应用开发都支持ThriftServer:基于Thrift架构开发的接口,允许外界通过这个接口,实现Hive仓库的RPC掉调用 驱动模块
包含编译器、优化器、执行器,负责把Hive QL语句转换为一系列MapReduce作业元数据存储模块
是一个独立的关系型数纪库,通过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)实现的基本原理
编写Map处理逻辑Map处理逻辑输入关系数据库的表通过Map进行转换,生产一系列的键值对在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)实现的基本原理
在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交互工作来完成该操作。
首先,驱动模块接收该命令或查询编译器。接着,对该命令或查询进行解析编译。然后,由优化器对该命令或查询进行优化计算。最后该命令或查询通过执行器进行执行。
具体可分为以下7步:
由Hive驱动模块中的编译器对用户输入的SQL语言进行词法和语法解析,将SQL语句转化为抽象语法树的形式,这种语法树无法直接进行MapReduce任务的抽象语法树的结构仍然很复杂,不方面直接翻译为MapReduce算法程序,因此,需要把抽象语法树转化为查询块把查询块转换成逻辑查询计划,里面包含了许多逻辑操作符重写逻辑查询计划,进行优化合并多余操作,减少MapReduce任务数量将第四步中的逻辑操作符转换成需要执行的具体MapReduce任务对生成的MapReduce任务进行优化生成最终的MapReduce任务执行计划由Hive驱动模块中的执行器对最终的MapReduce任务进行执行输出
当启动MapReduce程序时,Hive本身是不会生成MapReduce算法程序的。需要通过一个表示“job执行计划”的XML文件驱动执行内置的、原生的Mapper和Reducer模块。
Hive通过和JobTracker通信来初始化MapReduce任务,不必直接部署在JobTracker所在的管理节点上执行。
通常在大型集群上,会有专门的网关机来部署Hive工具。网关机的作用主要是远程操作和管理节点上的JobTracker通信,来执行任务。
数据文件通常存储在HDFS上,HDFS由NameNode节点管理
Hive的基本操作
Hive的安装
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;
show: 查看数据库、表、视图 查看数据库:show database;
show database like 'h.*';
查看所有的表和视图:use hive;
show tables
show tables in hive like 'u.*';
向表中装载数据 把对用目录下的数据文件中的数据装载进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;
向表中插入数据或从表中导出数据 向表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
创建Input目录,在本地创建input目录mkdir input
在input目录下创建两个测试文件file1.txt和file2.txtecho "hello world ">file1.txt
,exho "hello hadoop">file2.txt
进入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文件来执行算法
如果觉得《大数据学习之数据仓库Hive》对你有帮助,请点赞、收藏,并留下你的观点哦!