hive
- 数据仓库
- 数据仓库的主要特征
- 数据仓库与数据库的区别
- 数据仓库分层架构
- 数据仓库元数据管理
- hive基本概念
- hive基本概念
- hive架构
- hive的数据存储
- hive安装
- derby版hive直接使用
- 使用mysql共享hive元数据
- 安装mysql (使用yum源进行安装)
- 修改hive的配置文件
- hive三种交互方式
- Hive交互shell
- Hive JDBC服务
- Hive命令行交互
数据仓库
数据仓库,Data Warehouse,可简写为DW或DWH。
据仓库的目的是构建面向分析的集成化数据环境。
数据仓库不“生产”,也不“消费”数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。
数据仓库的主要特征
数据仓库是面向主题的(Subject-Oriented )、集成的(Integrated)、非易失的(Non-Volatile)和时变的(Time-Variant )数据集合,用以支持管理决策。
- 面向主题:数据分析有一定的范围,需要选取一定的主题进行分析
- 集成性:集成各个其他方面关联的一些数据,比如分析订单购买人的情况,就涉及到牵连用户信息的情况
- 非易失性:数据分析主要是分析过去已经发生的数据 ,分析的东西都是既成的事实
- 时变性:随着时间的发展,数据的形态也在发生变化,数据分析的手段也要相应的进行改变
数据仓库与数据库的区别
数据库
事务处理 联机事务处理(On-Line Transaction Processing,OLTP) 数据库主要的功能就是用来做事务处理的,主要负责频繁的增删改查
数据仓库
分析处理 联机的分析处理(On-Line Analytical Processing,OLAP) 不需要做事务的保证 主要职责就是做数据的分析,面向分析的。数据仓库的产生是因为有大量的数据库的存在,需要对数据进一步的决策分析,然后才产生数据仓库的概念。
数据库的数据,允许增删改
数据仓库的数据,一般不允许增删改
数据仓库分层架构
数据仓库一般分为三层,目的使每一层职责清晰:
- 第一层:源数据层 又叫ODS 我们产生数据的地方
- 第二层:数据仓库层 又叫DW 主要集中存储数据 面向主题进行分析
- 第三步:数据应用层 又叫app层 主要用于展示我们分析之后的数据结果
数据在这三层之间的一个流动,称之为ETL的过程
ETL:extrat(抽取) transform(转换) load(加载)
数据从源数据层流向数据仓库层再流向app层
数据仓库元数据管理
元数据(Meta Date),主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL的任务运行状态。
元数据可分为技术元数据和业务元数据。
数据仓库的元数据管理
hive基本概念
hive基本概念
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储。hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说hive就是一个MapReduce的客户端
数据的存储:用的是HDFS
数据的计算:用的是MR
元数据信息:hive与hdfs上面数据的映射关系,一般都保存在mysql或者oracle里面等等
hive的特点
- 可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。 - 延展性
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。 - 容错
良好的容错性,节点出现问题SQL仍可完成执行。
hive架构
基本组成
- 用户接口:提供写sql的地方
- 元数据存储:记录hive的表与数据之间的映射关系
- 解释器:解析我们的sql语句,转换成mr的任务提交,准备执行
- 编译器、优化器、执行器:编译、优化以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce 调用执行。
hive的数据存储
- Hive中所有的数据都存储在 HDFS 中,一定是结构化数据,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE等)
SequenceFile是hadoop中的一种文件格式:
文件内容是以序列化的key value对象来组织的,二进制文件 - 只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
- Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。
db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
table:在hdfs中表现所属db目录下一个文件夹
external table:与table类似,不过其数据存放位置可以在任意指定路径
partition:在hdfs中表现为table目录下的子目录
bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件
hive安装
hive不需要安装多台,就是一个客户端。
derby版hive直接使用
- 解压hive
cd /export/softwares
tar -zxvf hive-1.1.0-cdh5.14.0.tar.gz -C …/servers/ - 直接启动 bin/hive
cd …/servers/
cd hive-1.1.0-cdh5.14.0/
bin/hive
hive> create database mytest;
缺点:多个地方安装hive后,每一个hive是拥有一套自己的元数据,大家的库、表就不统一;
使用mysql共享hive元数据
安装mysql (使用yum源进行安装)
第一步:在线安装mysql相关的软件包
yum install mysql mysql-server mysql-devel
第二步:启动mysql的服务
/etc/init.d/mysqld start
查看mysql进程:ps -ef | grep mysql
第三步:通过mysql安装自带脚本进行设置
/usr/bin/mysql_secure_installation
第四步:进入mysql的客户端然后进行授权
进入mysql的客户端
mysql -uroot -p
mysql的远程连接授权语句:
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
刷新权限表
flush privileges;
退出
exit;
符号 | 含义 |
*. * | 第一个星表示数据库名称 第二个星表示数据库下面的哪个表 |
‘root’@’%’ | root:表示mysql的用户 %表示我们的ip地址 可以从哪台机器使用哪个用户来连接我们的数据库服务器 |
例如:root@node01 表示node01这台机器可以用root用户远程登录 | |
all privileges | 所有的权限 这里还可以写 insert update delete select |
identified by | 远程连接的时候的密码,与我们mysql的root用户密码无关 |
修改hive的配置文件
修改hive-env.sh
添加我们的hadoop的环境变量
cd /export/servers/hive-1.1.0-cdh5.14.0/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
#Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/export/servers/hive-1.1.0-cdh5.14.0/conf
修改hive-site.xml
cd /export/servers/hive-1.1.0-cdh5.14.0/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.hadoop.com:3306/hive?createDatabaseIfNotExist=true</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.hadoop.com</value>
</property>
<!--
<property>
<name>hive.metastore.uris</name>
<value>thrift://node03.hadoop.com:9083</value>
</property>
-->
</configuration>
上传mysql的lib驱动包
将mysql的lib驱动包上传到hive的lib目录下
cd /export/servers/hive-1.1.0-cdh5.14.0/lib
将mysql-connector-java-5.1.38.jar 上传到这个目录下
hive三种交互方式
Hive交互shell
cd /export/servers/hive-1.1.0-cdh5.14.0
bin/hive
查看所有的数据库
hive (default)> show databases;
创建一个数据库
hive (default)> create database myhive;
使用该数据库并创建数据库表
hive (default)> use myhive;
hive (myhive)> create table test(id int,name string);
Hive JDBC服务
启动hiveserver2服务
前台启动
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 &
启动后再另一个窗口可以beeline连接hiveserver2
bin/beeline
beeline> !connect jdbc:hive2://node03.hadoop.com:10000
用户名和密码随便输出,但是用户名一定要有权限去操作hdfs的数据
Hive命令行交互
bin/hive -e 不进入hvie的客户端直接执行hql语句
bin/hive -e “use myhive;select * from test;”bin/hive -f hive.sql 不进入hive的客户端,直接执行hive的脚本文件
vim hive.sql
use myhive;select * from test;
bin/hive -f hive.sql
hive参数含义