数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决策支持目的而创建。
数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。
数据库与数据仓库的区别实际讲的是 OLTP 与 OLAP 的区别。
操作型处理,叫联机事务处理 OLTP(On-Line Transaction Processing,),也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。
分析型处理,叫联机分析处理 OLAP(On-Line Analytical Processing)一般针对某些主题的历史数据进行分析,支持管理决策。
首先要明白,数据仓库的出现,并不是要取代数据库。
以银行业务为例。数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下来,这里,可以简单地理解为用数据库记账。数据仓库是分析系统的数据平台,它从事务系统获取数据,并做汇总、加工,为决策者提供决策的依据。比如,某银行某分行一个月发生多少交易,该分行当前存款余额是多少。如果存款又多,消费交易又多,那么该地区就有必要设立ATM了。
显然,银行的交易量是巨大的,通常以百万甚至千万次来计算。事务系统是实时的,这就要求时效性,客户存一笔钱需要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。而分析系统是事后的,它要提供关注时间段内所有的有效数据。这些数据是海量的,汇总计算起来也要慢一些,但是,只要能够提供有效的分析数据就达到目的了。
数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”。
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
元数据(Meta Date),主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL的任务运行状态。一般会通过元数据资料库(Metadata Repository)来统一地存储和管理元数据,其主要目的是使数据仓库的设计、部署、操作和管理能达成协同和一致。
元数据是数据仓库管理系统的重要组成部分,元数据管理是企业级数据仓库中的关键组件,贯穿数据仓库构建的整个过程,直接影响着数据仓库的构建、使用和维护。
元数据可分为技术元数据和业务元数据。技术元数据为开发和管理数据仓库的IT 人员使用,它描述了与数据仓库开发、管理和维护相关的数据,包括数据源信息、数据转换描述、数据仓库模型、数据清洗与更新规则、数据映射和访问权限等。而业务元数据为管理层和业务分析人员服务,从业务角度描述数据,包括商务术语、数据仓库中有什么数据、数据的位置和数据的可用性等,帮助业务人员更好地理解数据仓库中哪些数据是可用的以及如何使用。
由上可见,元数据不仅定义了数据仓库中数据的模式、来源、抽取和转换规则等,而且是整个数据仓库系统运行的基础,元数据把数据仓库系统中各个松散的组件联系起来,组成了一个有机的整体。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说hive就是一个MapReduce的客户端
可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
延展性
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
容错
良好的容错性,节点出现问题SQL仍可完成执行。
Hive利用HDFS存储数据,利用MapReduce查询分析数据。
tar -zxvf hive-1.1.0-cdh5.14.0.tar.gz -C /export/servers
;vi /etc/profile
编辑模式下,在profile中插入以下内容
export HIVE_HOME=/export/servers/hive-1.1.0-cdh5.14.0
export PATH=:$PATH:$HIVE_HOME/bin
rpm -qa|grep mysql #查看本机有无自带mysql
rpm -e mysql软件的文件名 --nodeps #卸载系统自带的mysql
yum -y install mysql mysql-server mysql-devel
/etc/init.d/mysqld start
/usr/bin/mysql_secure_installation
,设置如下:mysql -uroot -p
# 在mysql命令行输入
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
mysql> flush privileges;
all privileges
,开启所有命令的权限,也可以指定开启insert、update、delete、selelct中某个或某几个命令的权限。*.*
,第一个*
表示所有数据库,第二个*
所有表。'root'@'%'
,表示将指定用户名的用户开放给哪些计算机,,“root”表示开放的是root用户,“%”表示所有可以访问到本机的计算机,可以简单理解为局域网里的计算机。identified by '123456'
,表示远程登录时用的密码,可以随便设置,与mysql本身的登录密码无关,但是最好设置成一致的或者简单好记的。flush privileges
,刷新,启用授权变更。# 在linux命令行输入
chkconfig --add mysqld
chkconfig mysqld on
cd /export/servers/hive-1.1.0-cdh5.14.0/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
<configuration>
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://node03.hadoop.com:3306/hive?createDatabaseIfNotExist=truevalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>rootvalue>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>123456value>
property>
<property>
<name>hive.cli.print.current.dbname>
<value>truevalue>
property>
<property>
<name>hive.cli.print.headername>
<value>truevalue>
property>
<property>
<name>hive.server2.thrift.bind.hostname>
<value>node03.hadoop.comvalue>
property>
configuration>
由于之前配置过hive的环境变量,所以只需要在任意位置,使用hive即可,无需bin/hive了,这种方式已经过时,不推荐。
kill -9
来关闭服务。前台启动
cd /export/servers/hive-1.1.0-cdh5.14.0
bin/hive --service hiveserver2
后台启动
cd /export/servers/hive-1.1.0-cdh5.14.0
nohup bin/hive --service hiveserver2 2&>1 &
在配置了环境变量情况下,可以直接用hiveserver2。
2. 使用beeline连接JDBC服务
注意,这里的用户名和密码并不是mysql的用户名和密码,而是需要一个能够操作hdfs和mapreduce的Hadoop的用户名和密码,由于之前hadoop是在root用户下搭建和使用的,所以登录的是root用户,但并非mysql的root用户,mysql的登录方式在hive-site.xml已经设置过了。
bin/hive -e "use myhive;select * from test;"
vim hive.sql
use myhive;select * from test;
bin/hive -f hive.sql
使用sql语句或sql脚本与hive进行交互,直接通过bin/hive来执行hql语句或hql脚本中的语句,运行结束直接返回结果并退出hive,通过-f使用脚本的方式可以说是最实用的hive交互方式。