大数据-Hive(一)
目录
数据仓库
Hive
Hive安装部署
本章节主要介绍数据仓库以及数仓工具hive,包括hive环境的搭建等。
每天进步一小点,加油鸭~
数据仓库
Hive官方文档 https://cwiki.apache.org/confluence/display/Hive/Home
基本概念
- 数据仓库的英文名称为Data Warehouse,可简写为DW或DWH。
- 数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决策支持的目的而创建。
- 数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。
主要特征
数据仓库是面向主题的(Subject-Oriented)、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )数据集合,用以支持管理决策。
与数据库区别
数据库与数据仓库的主要区别是OLTP 与 OLAP。
OLTP(On-Line Transaction Processing)叫做联机事务处理,也称做面向交易的处理系统,是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理OLTP。
OLAP(On-Line Analytical Processing)叫做联机分析处理,一般针对某些主题的历史数据进行分析,支持管理决策。
数据仓库并不是要取代数据库,从设计方面来说数据库是面向事务的,而数据仓库是面向主题的。从数据角度来说,数据库一般存储业务数据,数据仓库一般存储的是历史数据。从数据表的角度来说,数据库设计尽量避免冗余,数据仓库在设计有意引入冗余,来满足分析需求、分析维度、分析指标进行设计。总的来说,数据库是为了捕获数据设计的,数据仓库是为了分析数据而设计的。
分层架构
数据仓库有不同的数据源,同时提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。按照数据流入流出的过程,数据仓库架构可分为三层——源数据层(ODS)、数据仓库层(DW)、数据应用层(DA或APP)。
- 源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为下一步的数据处理做准备。
- 数据仓库层(DW):也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
- 数据应用层(DA或APP):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extra, 转化Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。
为什么要对数据仓库分层?
- 用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存在大量冗余的数据;不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大。
- 通过数据分层管理可以简化数据清洗的过程,因为把原来一步的工作分到了多个步骤去完成,相当于把一个复杂的工作拆成了多个简单的工作,把一个大的黑盒变成了一个白盒,每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性,当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。
Hive
Hive的概念
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储支持,可以理解为hive是一个将SQL转换为MapReduce任务的工具,甚至可以说hive就是一个MapReduce的客户端。
Hive与数据库的区别
- Hive 具有 SQL 数据库的外表,但应用场景完全不同。
- Hive 只适合用来做海量离线数据统计分析,也就是数据仓库。
Hive的优缺点
优点:
- 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。
- 避免了去写MapReduce,减少开发人员的学习成本。
- Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
缺点:
- Hive 的查询延迟很严重
- Hive 不支持事务
Hive架构原理
用户接口:Client
- CLI(hive shell)
- JDBC/ODBC(java访问hive)
- WEBUI(浏览器访问hive)
元数据:Metastore
- 元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
- 默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore。
Hadoop集群
- 使用HDFS进行存储,使用MapReduce进行计算。
Driver:驱动器
- 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
- 编译器(Physical Plan):将AST编译生成逻辑执行计划。
- 优化器(Query Optimizer):对逻辑执行计划进行优化。
- 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说默认就是mapreduce任务。
Hive安装部署
前置条件
- 搭建好三节点Hadoop集群;
- node03上先安装好MySQL服务;
准备安装包
- 下载hive的安装包 http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.14.2.tar.gz
- 规划安装目录 /hlbdx/install
- 上传安装包到node03服务器中的/hlbdx/soft路径下
- 解压安装包到指定的规划目录/hlbdx/install
修改配置文件
hive-env.sh
- 进入到Hive的安装目录下的conf文件夹中
- 重命名hive-env.sh.template
- 修改hive-env.sh
- 修改此文件中HADOOP_HOME、HIVE_CONF_DIR的值(根据自己机器的实际情况配置)
[hadoop@node03 soft]$ cd /hlbdx/install/hive-1.1.0-cdh5.14.2/conf/
[hadoop@node03 conf]$ mv hive-env.sh.template hive-env.sh
[hadoop@node03 conf]$ vim hive-env.sh
#配置HADOOP_HOME路径
export HADOOP_HOME=/hlbdx/install/hadoop-2.6.0-cdh5.14.2/
#配置HIVE_CONF_DIR路径
export HIVE_CONF_DIR=/hlbdx/install/hive-1.1.0-cdh5.14.2/conf
hive-site.xml
conf目录下默认没有此文件,vim创建即可,文件内容如下:
[hadoop@node03 conf]$ vim hive-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node03:3306/hive?createDatabaseIfNotExist=true&characterEncoding=latin1&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node03</value>
</property>
</configuration>
hive-log4j.properties
- 创建hive日志存储目录
- 重命名生成文件hive-log4j.properties
- 修改此文件的hive.log.dir属性的值
[hadoop@node03 conf]$ mkdir -p /hlbdx/install/hive-1.1.0-cdh5.14.2/logs/
[hadoop@node03 conf]$ pwd
/hlbdx/install/hive-1.1.0-cdh5.14.2/conf
[hadoop@node03 conf]$ mv hive-log4j.properties.template hive-log4j.properties
[hadoop@node03 conf]$ vim hive-log4j.properties # 修改文件
#更改以下内容,设置我们的hive的日志文件存放的路径,便于排查问题
hive.log.dir=/hlbdx/install/hive-1.1.0-cdh5.14.2/logs/
拷贝mysql驱动包
- 上传mysql驱动包,如
mysql-connector-java-5.1.38.jar
到/kkb/soft
目录中 - 由于运行hive时,需要向mysql数据库中读写元数据,所以需要将mysql的驱动包上传到hive的lib目录下。
[hadoop@node03 ~]$ cd /hlbdx/soft/
[hadoop@node03 soft]$ cp mysql-connector-java-5.1.38.jar /hlbdx/install/hive-1.1.0-cdh5.14.2/lib/
配置Hive环境变量
- 切换到root用户下
- 打开
/etc/profile
文件 - 末尾添加如下内容
- 切换回hadoop用户,并source
[hadoop@node03 soft]$ su root
Password:
[root@node03 soft]# vim /etc/profile
export HIVE_HOME=/hlbdx/install/hive-1.1.0-cdh5.14.2
export PATH=$PATH:$HIVE_HOME/bin
[root@node03 soft]# su hadoop
[hadoop@node03 soft]$ source /etc/profile
验证安装
- hadoop集群已启动
- mysql服务已启动
- 在node03上任意目录启动hive cli命令行客户端
[hadoop@node03 ~]$ hive
#查看有哪些数据库
show databases;
- 说明hive安装成功
- 使用quit命令退出cli