简称DW,Data Houseware。专门存储数据,构建面向分析的集成化数据环境,主要职责是做数据分析以支持决策。
面向主题:数据分析有一定的范围,需要选择一定的主题进行分析
集成性:集成各个其他方面关联的一些数据。比如分析订单购买人的情况,会涉及用户信息
非易失性:数据分析主要是分析过去已经发生的数据,分析的数据都是确定的事实,不会再改变
时变性:随着时间的发展,数据的形态也在发生变化,数据分析的手段也要进行相应的改变
数据库:OLTP,联机事务处理;数据库主要的功能就是用来做事务处理,主要负责频繁的增删改查。
数据仓库:OLAP(On-Line Analytical Processing),联机的分析处理,不需要做事务的保证,主要职责就是针对某些主题的历史数据进行分析,支持管理决策。
数据库的数据,允许增删改;数据仓库的数据,一般不建议不允许增删改;
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
第一层:源数据层,又叫ODS,产生数据的地方
第二层:数据仓库层,又叫DW,主要集中存储数据,面向主题进行分析
第三步:数据应用层,又叫APP层,主要用于展示分析之后的数据结果
数据在这三层之间的一个流动,称之为ETL的过程
ETL:extrat(抽取),transform(转换),load(加载)
数据从源数据层流向数据仓库层再流向APP层
数据仓库分层的目的:使每一层职责更清晰
元数据(Meta Date),定义数据架构,数据的位置,数据的信息,记录的是数据仓库当中的数据如何进行处理的一整套的过程
HIve是基于hadoop的一个数据仓库的处理工具,专门用于数据仓库的数据分析。它将结构化的数据映射成为一张数据库表,并提供类SQL查询功能。本质是将SQL语句转换为MapReduce的任务进行执行。
主要描述了Hive表与HDFS的数据之间的映射关系,包括字段的映射,数据位置的保存。一般都保存在MySQL或者oracle里面等等。数据的存储:用的是HDFS;数据的计算:用的是MapReduce。
用户接口:包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
元数据存储:通常是存储在关系数据库如mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器、执行器:完成HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce 调用执行。
Hive利用HDFS存储数据,利用MapReduce查询分析数据
cd /opt/software tar -zxvf hive-1.1.0-cdh5.14.0.tar.gz -C ../module/
cd ../module/ cd hive-1.1.0-cdh5.14.0/ bin/hive
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;使密码设置生效
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
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驱动包上传到hive的lib目录下
cd /opt/module/hive-1.1.0-cdh5.14.0/lib
将mysql-connector-java-5.1.38.jar 上传到这个目录下
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);
前台启动
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 &
bin/beeline beeline> !connect jdbc:hive2://hadoop103:10000
使用 –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