一、 数据仓库
1. 数据仓库的基本概念
简称DW,Data Houseware。专门存储数据,构建面向分析的集成化数据环境,主要职责是做数据分析以支持决策。
2.数据分析的特征:
面向主题:数据分析有一定的范围,需要选择一定的主题进行分析
集成性:集成各个其他方面关联的一些数据。比如分析订单购买人的情况,会涉及用户信息
非易失性:数据分析主要是分析过去已经发生的数据,分析的数据都是确定的事实,不会再改变
时变性:随着时间的发展,数据的形态也在发生变化,数据分析的手段也要进行相应的改变
3. 数据仓库与数据库区别
数据库:OLTP,联机事务处理;数据库主要的功能就是用来做事务处理,主要负责频繁的增删改查。
数据仓库:OLAP(On-Line Analytical Processing),联机的分析处理,不需要做事务的保证,主要职责就是针对某些主题的历史数据进行分析,支持管理决策。
数据库的数据,允许增删改;数据仓库的数据,一般不建议不允许增删改;
4、数据仓库分层架构
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
第一层:源数据层,又叫ODS,产生数据的地方
第二层:数据仓库层,又叫DW,主要集中存储数据,面向主题进行分析
第三步:数据应用层,又叫APP层,主要用于展示分析之后的数据结果
数据在这三层之间的一个流动,称之为ETL的过程
ETL:extrat(抽取),transform(转换),load(加载)
数据从源数据层流向数据仓库层再流向APP层
数据仓库分层的目的:使每一层职责更清晰
5、数据仓库元数据管理
元数据(Meta Date),定义数据架构,数据的位置,数据的信息,记录的是数据仓库当中的数据如何进行处理的一整套的过程
二、Hive基本概念
1.什么是Hive
HIve是基于hadoop的一个数据仓库的处理工具,专门用于数据仓库的数据分析。它将结构化的数据映射成为一张数据库表,并提供类SQL查询功能。本质是将SQL语句转换为MapReduce的任务进行执行。
2.Hive当中的元数据信息
主要描述了Hive表与HDFS的数据之间的映射关系,包括字段的映射,数据位置的保存。一般都保存在MySQL或者oracle里面等等。数据的存储:用的是HDFS;数据的计算:用的是MapReduce。
3.Hive架构
用户接口:包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
元数据存储:通常是存储在关系数据库如mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器、执行器:完成HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce 调用执行。
4.Hive与Hadoop的关系
Hive利用HDFS存储数据,利用MapReduce查询分析数据
三.HIVE的安装部署
-
1.解压hive
cd /opt/software
tar -zxvf hive-1.1.0-cdh5.14.0.tar.gz -C ../module/
2.直接启动 bin/hive
cd ../module/
cd hive-1.1.0-cdh5.14.0/
bin/hive
3.Linux-MySQL安装
1.新建文件夹/opt/mysql,并cd进去
2.运行wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar,下载mysql安装包
PS:centos7.6自带的类mysql数据库是mariadb,会跟mysql冲突,要先删除。
3.运行tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
4.运行rpm -qa|grep mari,查询mariadb相关安装包
5.运行rpm -e --nodeps mariadb-libs,卸载
6.然后开始真正安装mysql,依次运行以下几条
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
7. 运行systemctl start mysqld.service,启动mysql
8.然后开始设置root用户密码
Mysql自动给root用户设置随机密码,运行grep "password" /var/log/mysqld.log可看到当前密码
9.运行mysql -u root -p,用root用户登录,提示输入密码可用上述的,可以成功登陆进入mysql命令行
10.设置root密码,对于个人开发环境,如果要设比较简单的密码(生产环境服务器要设复杂密码),可以运行set global validate_password_policy=0;提示密码设置策略(validate_password_policy默认值1,)
11.set password for 'root'@'localhost' =password('12345678');
12.授权MySQL允许远程连接
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
13.运行flush privileges;使密码设置生效
4.修改hive的配置文件
- 修改hive-env.sh
cd /opt/module/hive-1.1.0-cdh5.14.0/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
HADOOP_HOME=/opt/module/hadoop-2.6.0-cdh5.14.0
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/opt/module/hive-1.1.0-cdh5.14.0/conf
- 修改hive-site.xml
cd /opt/module/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://hadoop104: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>12345678</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 /opt/module/hive-1.1.0-cdh5.14.0/lib
将mysql-connector-java-5.1.38.jar 上传到这个目录下
四.使用方式
第一种交互方式:Hive交互shell
cd /opt/module/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 /opt/module/hive-1.1.0-cdh5.14.0 bin/hive --service hiveserver2
- 后台启动
cd /opt/module/hive-1.1.0-cdh5.14.0 nohup bin/hive --service hiveserver2>&1 &
- beeline连接hiveserver2
bin/beeline beeline> !connect jdbc:hive2://hadoop103:10000
第三种交互方式:Hive命令
使用 –e 参数来直接执行hql的语句
bin/hive -e "use myhive;select * from test;"
使用 –f 参数通过指定文本文件来执行hql的语句
vim hive.sql use myhive;select * from test; bin/hive -f hive.sql