数仓概念
数据仓库(Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。
数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)
基于以上数仓的分析功能,可用于分析的问题有很多,比如投资类,已经拓宽产品销售渠道等
数仓专注分析
数据仓库本身并不“生产”任何数据,其数据来源于不同外部系统;
同时数据仓库本身也不需要“消费”任何的数据,其结果开放给各个外部应用使用;
这也是为什么叫“仓库”,而不叫“工厂”的原因。
数据仓库为何而来,解决什么问题
数据仓库为了分析数据而来,分析结果给企业决策提供支持。
由于数据库存在性能瓶颈,所以无法做到随之处理,故使用数仓起到数据分析作用
数据库的构建
如数仓定义所说,数仓是一个用于存储、分析、报告的数据系统,目的是构建面向分析的集成化数据环境。我们把这种面向分析、支持分析的系统称之为OLAP(练级分析处理)系统。当然,数据仓库是OLAP'系统的一种实现。
中国人寿保险公司就可以基于分析决策需求,构建数仓平台。
数据仓库的主要特征
面向主题性:Subject-Oriented主题是一个抽象的概念,是较高层次上数据综合、归类并进行分析利用的抽象
集成性:Instegrated主题相关的数据通常会分布在多个操作系统中,彼此分散、独立、异构。需要集成到数仓主题下。
非易失性:Non-Volatile也叫非易变形。数据仓库是分析数据的平台,而不是创建数据的平台。
时变性:Time-variant数据仓库的数据需要随着时间更新,以适应决策的需要
面向主题性(Subject-Oriented)
主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析的抽象。在逻辑意义上,它是对应企业中某以宏观分析领域所设计的分析对象。
传统OLTP系统对数据的划分并不适用于决策分析。而基于主题组织的数据则不同,他们被划分成为各自独立的领域,每个领域有各自的逻辑内涵但互不交叉,在抽象层次上对数据进行完整,一致和精确的描述。
集成性(Integrated)
主题相关的数据通常会分布在多个操作系统中,彼此分散、独立、异构。
因此在数据进入数仓之前,必然要经过统一与综合,对数据进行抽取、清理、转换和汇总,这一步是数据仓库建设中最关键、最复杂的一步,索要完成的工作有:
要统一数据中所有矛盾之处;
如字段的同名异议、异名同义、单位不同意、字长不一致等等。
进行数据综合和计算。
数据仓库中的数据综合工作可以在原有数据抽取数据是产生,但在许多是在数据仓库内部生成的,即进入数据建库以后进行综合生成的。
下图说明了保险公司综合数据的简单处理过程,其中数据仓库与“承保”主题有关的数据来自于多个不同的操作型系统。
这些系统内部数据的命名可能不同,数据格式也可能不同。把不同来源的数据存储到数据仓库之前,需要去除这些不一致
非易失性、非异变性(Non-Volatile)
我们是通过数仓去分析数据中的规律,而不是去创造修改其平台。我们是通过数仓去分析数据中的规律,而不是去创造修改其中的规律。因此数据进入数据仓库后,它便稳定且不会改变。
数据仓库的数据反映的是一段相当长的时间内历史数据的内容,数据仓库的用户对数据的操作大多是数据查询或比
较复杂的挖掘,一旦数据进入数据仓库以后,一般情况下被较长时间保留。
数据仓库中一般有大量的查询操作,但修改和删除操作很少。
时变性(Time-Variant)
数据仓库包含各种粒度的历史数据,数据可能与某个特定日期、星期、月份、季度或者年份有关。
当业务变化后会失去时效性。因此数据仓库的数据需要随着时间更新,以适应决策的需要。
从这个角度讲,数据仓库建设是一个项目,更是一个过程。
什么是Hive
Apache Hive是一款简历在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、板结构化数据文件映射为一张数据表,基于表提供了一种类似SQL的查询模型,成为Hive查讯语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
Hive核心是将HQL转换为MapReduce程序,然后将程序提交给Hadoop集群进行处理与执行。
Hive有Facebook实现并开源
为什么使用Hive
使用Hadoop MapReduce直接处理数据将面临的问题:
人员学习成本过高,需要掌握Java语言
MapReduce实现复杂的查询逻辑开发难度太大
使用Hive处理数据的好处
操作接口采用类SQL语法,提供快速开发的能力(简单、易上手)
避免直接写MapReduce,减少开发人员学习成本
支持自定义函数,功能扩展很方便
背靠Hadoop,擅长存储分析海量数据集
Hive与Hadoop之间的关系
从功能来说,数据仓库软件,至少需要具备以下两种能力:
存储数据的能力、分析数据的能力
Apache Hive作为一款大数据时代的数仓软件,当然也具备上述两种能力,只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
Hive利用HDFS存储数据,利用MapReduce查询分析数据。
这样突然发现Hive好像没什么用,只是Hadoop MapReduce套壳罢了;设则不然,Hive的魅力在于用户专注于编写HQL,Hive直接将其转换为MapReduce程序完成哦对数据的分析。
Hive架构
在Hive架构主要包括以下组件
用户接口:
包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许
外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。
元数据存储
通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
执行引擎
Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark3种执行引擎。
Apache Hive部署
什么是元数据
元数据(MetaData),又称中介数据,中继数据,是形容数据的数据(data about data),用于支持如只是存储位置、历史数据、资源查询、文件记录等记录。
Hive Metadata
Hive Metadata即Hive的元数据
包含用Hive创建database、table、表的位置、类型、属性,字段顺序类型等元数据。
元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等
Hive Metastore
Metastore即元数据服务。Metastone服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。
有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore服务即可。某种程度上也保证了HIve元数据的安全。
MetaStore配置方法
MetaStore服务配置有3种模式:内嵌模式、本地模式、远程模式。
区分三种配置方式的关键是弄清两个问题:
Metastore服务是否需要单独配置、单独启动?
Metadata是存储在内置的derby中,还是第三方RDBMS,比如MySQL。
推荐使用远程模式部署
部署Hive
安装MySQL5.7
由于使用远程模式,所以我们需要提前准备MySQL环境来支持Hive的远程模式
卸载CentOS7自带的mariadb
rpm -qa | grep mariadb
rpm -e mariadb-libs-5.5.68-1.el7.x86_64
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps
rpm -qa | grep mariadb
安装MySQL
#创建MySQL数据目录
mkdir -p /export/software/mysql
#解压安装包
tar xf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
#安装相关依赖
yum install libaio -y
#安装mysql软件
rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm mysql-community-libs-5.7.29-1.el7.x86_64.rpm mysql-community-client-5.7.29-1.el7.x86_64.rpm mysql-community-server-5.7.29-1.el7.x86_64.rpm
warning: mysql-community-common-5.7.29-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-common-5.7.29-1.e################################# [ 25%]
2:mysql-community-libs-5.7.29-1.el7################################# [ 50%]
3:mysql-community-client-5.7.29-1.e################################# [ 75%]
4:mysql-community-server-5.7.29-1.e################ ( 49%)
初始化Mysql
#初始化
mysqld --initialize
#更改所属组
chown mysql:mysql /var/lib/mysql -R
#启动mysql
systemctl start mysqld.service
#查看生成的临时root密码
cat /var/log/mysqld.log
[Note] A temporary password is generated for root@localhost: o+TU+KDOm004
修改root用户密码,授权允许远程登录,设置开机自启动
[root@node2 ~]# mysql -u root -p
Enter password: #这里输入在日志中生成的临时密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.29
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
#更新root密码 设置为hadoop
mysql> alter user user() identified by "hadoop";
Query OK, 0 rows affected (0.00 sec)
#授权
mysql> use mysql;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'hadoop' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
#mysql的启动和关闭 状态查看 (这几个命令必须记住)
systemctl stop mysqld
systemctl status mysqld
systemctl start mysqld
#建议设置为开机自启动服务
[root@node2 ~]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
#查看是否已经设置自启动成功
[root@node2 ~]# systemctl list-unit-files | grep mysqld
mysqld.service enabled
Hive的安装
上传安装包并解压
tar xf apache-hive-3.1.2-bin.tar.gz
解决Hive与Hadoop之间guava版本差异
cd /export/server/apache-hive-3.1.2-bin/
rm -rf lib/guava-19.0.jar
cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
修改配置文件
hive-env.sh
cd /export/server/apache-hive-3.1.2-bin/conf
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
export HADOOP_HOME=/export/server/hadoop-3.3.0
export HIVE_CONF_DIR=/export/server/apache-hive-3.1.2-bin/conf
export HIVE_AUX_JARS_PATH=/export/server/apache-hive-3.1.2-bin/lib
hive-site.xml
vim hive-site.xml
<configuration>
<!-- 存储元数据mysql相关配置 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive3?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</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>hadoop</value>
</property>
<!-- H2S运行绑定host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node1</value>
</property>
<!-- 远程模式部署metastore metastore地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083</value>
</property>
<!-- 关闭元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>
上传mysql jdbc驱动到hive安装包lib下
mysql-connector-java-5.1.32.jar
初始化元数据
cd /export/server/apache-hive-3.1.2-bin/
bin/schematool -initSchema -dbType mysql -verbos
#初始化成功会在mysql中创建74张表
在hdfs创建hive存储目录(如存在则不用操作)
hadoop fs -mkdir /tmp
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
启动hive
1、启动metastore服务
#前台启动 关闭ctrl+c
/export/server/apache-hive-3.1.2-bin/bin/hive --service metastore
#前台启动开启debug日志
/export/server/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console
#后台启动 进程挂起 关闭使用jps+ kill -9
nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &
2、启动hiveserver2服务
nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &
#注意 启动hiveserver2需要一定的时间 不要启动之后立即beeline连接 可能连接不上
3、beeline客户端连接
拷贝node1安装包到beeline客户端机器上(node3)
scp -r /export/server/apache-hive-3.1.2-bin/ node3:/export/server/
连接访问
/export/server/apache-hive-3.1.2-bin/bin/beeline
beeline> ! connect jdbc:hive2://node1:10000
beeline> root
beeline> 直接回车
部署第三方Hive可视化工具
DataGrip
DateGrip是由JetBrains公司推出的数据库管理软件,DataGrip支持几乎所有主流的关系型数据库产品,如DB2、Derby、MySQL、Oracle、SQL、Server等,也支持几乎所有主流的大数据生态圈SQL软件,并且提供了简单易用的界面,便于上手
至此环境部署完成