数据仓库Hive
一: 数据仓库
-
基本概念: Data Warehouse ,数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。
-
主要特征:
1. 面向主题
2. 集成性
3. 非易失性
4. 时变性 -
数据库(OLTP) 与 数据仓库(OLAP) 的区别
1. 数据库是面向事务的设计,数据仓库是面向主题设计的。
2. 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
3. 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,
记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计
是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
4. 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。 -
数据仓库的分层架构
分为三层: 源数据,数据仓库,数据应用
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取
Extra, 转化Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也可以认为是数据仓库的
血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精
力就是保持ETL的正常和稳定.
二: Hive的基本概念
1. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
2. Hive架构
1. 用户接口
2. 元数据存储
3. 解释器,编译器,优化器,执行器
三: Hive 的安装
步骤1: 上传并解压安装包
将我们的hive的安装包上传到第三台服务器的/export/so?wares路径下,然后进行解压
cd /export/softwares/
tar -zxvf apache-hive-2.1.1-bin.tar.gz -C …/servers/
步骤2: 安装mysql
步骤3: 修改hive的配置文件
修改hive-env.sh
cd /export/servers/apache-hive-2.1.1-bin/conf
cp hive-env.sh.template hive-env.sh
HADOOP_HOME=/export/servers/hadoop-2.7.5 ==> hadoop的路径
export HIVE_CONF_DIR=/export/servers/apache-hive-2.1.1-bin/conf ==> hive中conf的路径
在conf目录下新增hive-site.xml文件
cd /export/servers/apache-hive-2.1.1-bin/conf
vim hive-site.xml
步骤4: 添加mysql的连接驱动包到hive的lib目录下
步骤5: 配置hive的环境变量
vim /etc/profile
export HIVE_HOME=/export/servers/apache-hive-2.1.1-bin
export PATH=:$HIVE_HOME/bin:$PATH
步骤6: 第一种交互方式(登录) ==> hive
第二种交互方式:
不进入hive的客户端直接执行hive的hql语句
hive -e ‘create databases if not exsits mytest’
四: Hive的操作
1. 数据库的操作
创建数据库
create database (if not exsits ) 数据库名称;
use 数据库名称; ==> 使用数据库
hive的表存放位置模式是由hive-site.xml当中的一个属性指定的
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
-
创建数据库并指定位置
create database myhive2 location ‘/myhive2’; -
设置数据库键值对信息
数据库可以有一些描述性的键值对信息,在创建时添加:(关键字:dbproperties)
reate database foo with dbproperties (‘owner’=‘itcast’,‘date’=‘20190120’);
查看数据库的键值对信息
describe database extended foo;
修改数据库的键值对信息:
alter database foo set dbproperties (‘owner’=‘itheima’); -
查看数据库更多详细信息
desc database extended myhive2; -
删除数据库
删除一个空数据库: drop database myhive2;
强制删除数据库,包含数据库下面的表一起删除: drop database myhive2 cascade; -
数据库表的操作
1. 创建表的语法 ==> []表示根据需要添加
create [external] table [if not exsits] table_name(
列名1 列类型1 [comment ‘注释信息’],
列名2 列类型2 [comment ‘注释信息’],
)[comment ‘表的注释’]
[partitioned by (分区字段)]
[cluster by (列名)]
[sorted by (col_name [asc|desc],…) into num_buckets buckets]
[row format row_format]
[storted as …]
[location ‘指定表的路径’]
说明:
1. create table 创建一个指定名字的表。
2. external 可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径
3. comment 表示注释,默认不能使用中文
4. partitioned by 表示使用表分区,一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下 .
5. clustered by 对于每一个表分文件, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。
6. sorted by 指定排序字段和排序规则
7. row format指定表文件字段分隔符
8. storted as指定表文件的存储格式, 常用格式:SEQUENCEFILE, TEXTFILE, RCFILE,如果文件
数据是纯文本,可以使用 STORED AS TEXTFILE。
9. location 指定表文件的存储路径 -
内部表的操作
创建表时,如果没有使用external关键字,则该表是内部表(managed table)创建表时,如果没有使用external关键字,则该表是内部表(managed table)建表入门 create table stu(id int , name string); ==> 创建表 insert into stu values(1,"zhangsan"); ==> 插入数据 select * from stu; ==> 查询表中所有信息 创建表并指定字段之间的分隔符 create table if not exsits stu2 (id int, name string) row format delimited fields terminated by '\t'; 创建表并指定表文件的存放路径 create table if not exsits stu3(id int, name string) row format delimited fields terminated '\t' location '/user/stu2'; 根据查询结果创建表(复制表) create table stu4 as select * from stu3; 复制表 create table stu5 like stu; 查询表的详细信息 desc formatted stu2; 删除表 drop table stu4;
-
外部表的操作
外部表被删除,数据依然保存着
1. 创建外部表
create external table teacher (t_id string,t_name string) row format delimited fields terminated by ‘\t’;
2. 加载数据
从linux中加载:
load data local inpath ‘/export/servers/hivedatas/student.csv’ into table student;
加载数据并覆盖已有数据
load data local inpath ‘/export/servers/hivedatas/student.csv’ overwrite into table student;
从hdfs文件系统向表中加载数据(需要提前将数据上传到hdfs文件系统)
cd /export/servers/hivedatas
hdfs dfs -mkdir -p /hivedatas
hdfs dfs -put techer.csv /hivedatas/
load data inpath ‘/hivedatas/techer.csv’ into table teacher;
五: 使用beeline工具连接hive
优点: 表格更清晰
步骤1: 修改hadoop的hdfs-site.xml文件
在该文件中添加以下内容,开启HDFS的REST接口功能:
dfs.webhdfs.enabled
true
步骤2: 修改hadoop的core-site.xml文件
在文件中添加以下内容,设置代理用户:
hadoop.proxyuser.root.hosts
hadoop.proxyuser.root.groups
步骤3: 重启Hadoop集群
步骤4: 启动hiveserver2服务
前台启动(一般不推荐使用)
cd /export/servers/apache-hive-2.1.1-bin/
bin/hive --service hiveserver2
后台启动
nohup bin/hive --service hiveserver2 > /dev/null 2>&1 &
步骤5: 使用beeline连接hiveserver2
bin/beeline
!connect jdbc:hive2://node03:10000
输入用户名和密码,用户名必须为root,密码任意.
hive启动:
后台启动hive元数据和hive2
cd /export/servers/hive
nohup bin/hive --service metastore &
nohup bin/hive --service hiveserver2 &
开启hive本地数据库的运行可以缩短运行时间:(hive中操作)
set hive.exec.mode.local.auto=true;
1、可以在hive命令行执行以下语句显示当前数据库:
select current_database();
2、可以设置hive属性在命令行显示当前数据库:
set hive.cli.print.current.db=true;