一,数据仓库的来源和概念
数仓概念
数据仓库(英语:Data Warehouse,简称数仓、Dw ),是一个用于存储、分析、报告的数据系统数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持( Decision Support)
本身并不“生产”任何数据,也不需要“消费”任何的数据,其结果开放给各个外部应用使用
联机事务处理系统(OLTP)其主要任务是执行联机事务处理。其基本特征是前台接收的用户数据可以立即传送到后台进行处理,并在很短的时间内给出处理结果。
个人理解:传统的OLTP是为了利用数据库库对数据进行存储的,原则上可以对数据通过对数据读的方式进行一些简单的分析,但是由于数据库中的读写的压力特别大,利用读进行数据分析会导致数据库的压力增大,并且数据分散在不同系统不同表中,字段类型属性不统一
数据仓库面世
当分析所涉及数据规模较小的时候,在业务低峰期时可以在0LTP系统上开展直接分析但为了更好的进行各种规模的数据分析,同时也不影响OLTP系统运行,此时需要构建一个集成统一的数据分析平台该平台的目的很简单:面向分析,支持分析,并且和OLTP系统解耦合。
基于这种需求,数据仓库的雏形开始在企业中出现了。
数据仓库是OLAP系统的一种实现
二,数据仓库主要特征
1.面向主题
主题:比如我们读文章要概括主题思想,就需要综合归类一定的数据
主题是一个抽象的概念,是较高层次上数据综合、归类并进行分析利用的抽象
比如下图中的客户主题
2.集成性
主题相关的数据通常会分布在多个操作型系统中,彼此分散、独立、异构。需要集成到数仓主题下。
要统一源数据中所有矛盾之处,如字段的同名异义、异名同义、单位不统一、字长不一致等等
进行数据综合和计算,数据仓库中的数据综合工作可以在从原有数据库抽取数据时生成,但许多是在数据仓库内部生成的,即进入数据仓库以后进行综合生成的。
3.非易失性
也叫非易变性。数据仓库是分析数据的平台,而不是创造数据的平台。
也就是说,很少对数据进行修改
4.时变性
数据仓库的数据需要随着时间更新,以适应决策的需要。(如每一周分析上一天的数据)
三,数据开发的主流语言SQL
学习过,这里了解复习
SQL语言介绍
结构化查询语言(Structured uery Language )简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理数据。
SQL语言使我们有能力访问数据库,并且SQL是一种ANSI(美国国家标准化组织)的标准计算机语言,各大数据库商在生产数据库软件的时候,几乎都会去支持SQL的语法,以使得用户在使用软件时更加容易上手,以及在不同商软件之间进行切换时更加适应,因为大家的SQL语法都差不多SQL语言功能很强,十分简洁,核心功能只用了9个动词。语法接近英语口语,所以,用户很容易学习和使用。
结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理
SQI语法分类
SQL主要语法分为两个部分: 数据定义语言 (DDL)和数据操纵语言 (DML)DDL语法使我们有能力创建或删除表,以及数据库、索引等各种对象,但是不涉及表中具体数据操作:CREATE DATABASE- 创建新数据库
CREATE TABLE-创建新表
DML语法是我们有能力针对表中的数据进行插入、更新、删除、查询操作:
SELECT-从数据库表中获取数据
UPDATE- 更新数据库表中的数据
DELETE从数据库表中删除数据
INSERT向数据库表中插入数据
四,Apache Hive和hadoop的关系
1.什么是hive
Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HAL),用于访问和分析存储在Hadoop文件中的大型数据集。
Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行。
2.为什么使用hive,使用hive的好处
使用Hadoop MapReduce直接处理数据所面临的问题人员学习成本太高 需要掌握java语言MapReduce实现复杂查询逻辑开发难度太大
使用Hive处理数据的好处
操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手 避免直接写MapReduce,减少开发人员的学习成本支持自定义函数,功能扩展很方便背靠Hadoop,擅长存储分析海量数据集
3.Hive和Hadoop关系
从功能来说,数据仓库软件,至少需要具备下述两种能力:存储数据的能力、分析数据的能力
Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
Hive利用HDFS存储数据,利用MapReduce查询分析数据这样突然发现Hive没啥用,不过是套壳Hadoop罢了。其实不然,Hive的最大的魅力在于用户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析。
五,场景分析hive的功能的底层实现
Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表。
如下图所示,元数据为记录注入带处理文件每一行如何分割,分割后的每一个字段的含义等数据,系统可以根据这些,将结构化文件或半结构化文件映射成表可以这么理解,元数据是数据的数据
六,Hive的架构图和各个组件
元数据存储
通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
七,HIVE的安装和部署
1.什么是元数据
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据( data about data)主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
Hive Metadata
Hive Metadata即Hive的元数据
包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息元数据存储在关系型数据库中。
如hive内置的Derby、或者第三方如MySQL等
2.Hive Metastore
Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。
有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore服务即可。某种程度上也保证了hive元数据的安全。
3.hive的配置
metastore配置方式
metastore服务配置有3种模式:内嵌模式本地模式、远程模式区分3种配置方式的关键是弄清楚两个问题:Metastore服务是否需要单独配置、单独启动 。
Metadata是存储在内置的derby中,还是第三方RDBMS,比如MySQL。
在以下的配置过程中,metastore单独配置使用,Mysql存储,因此是远程模式。
4.配置HIVE
由于Apache Hive是一款基于Hadoop的数据仓库软件,通常部署运行在Linux系统之上。因此不管使用何种方式配置Hive Metastore,必须要先保证服务器的基础环境正常,Hadogp集群健康可用。
服务器基础环境集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装Hadoop集群健康可用启动Hive之前必须先启动Hadoop集群。特别要注意,需等待HDFS安全模式关闭之后再启动运行Hive。Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。
(1)整合hadoop与HIVE的整合
因为Hive需要把数据存储在HDFS上,并且通过MapReduce作为执行引擎处理数据因此需要在Hadoop中添加相关配置属性,以满足Hive在Hadoop上运行
修改Hadoop中core-site.xml,并且Hadoop集群同步配置文件,重启生效
<!-- 整合hive -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
(2)MySql的安装
MySQL只需要在一台机器安装并且需要授权远程访问
<1>卸载centos7自带的mariadb
rpm -qa|grep mariad
-qa:查看系统中已安装的所有RPM软件包列表
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps
-e删除软件 --nodeps不检测依赖
rpm -qa|grep mariadb
<2>将mysql的安装包上传,解压到/opt/modules/mysql
<3>安装libaio
yum -y install libaio
<4>到mysql所在的目录下安装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
<5>将mysql初始化
mysqld --initialize
<6>更改所属组
chown mysql:mysql /var/lib/mysql -R
<7>启动mysql
systemctl start mysqld.service
<8>读取/var/log/mysqld.log,查看其中生成的临时密码
<9>修改密码,方便登录
输入mysql -u root -p
进入到mysql的命令行下,修改密码
alter user user() identified by “hadoop”;
<10>授权
use mysql;
GRANT ALL PRIVILEGES ON . TO ‘root’@'%'IDENTIFIED BY ‘hadoop’ WITH GRANT OPTION;
FLUSH PRIVILEGES;刷新权限
<11>其他要记忆的命令
systemctl start mysqld启动mysqld
systemctl stop mysqld停止mysqld
systemctl status mysqld查看服务的状态
<11>开始HIVE的安装,不用每一台机器都安装
将hive传输到机器,并且解压
<12>解决hadoop和hive之间的guava版本差异问题
进入到/opt/modules/hive3.1.2/bin/目录下删除自带的guava
之后拷贝hadoop的guava到hive的lib文件夹下
cp /opt/modules/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /opt/modules/hive3.1.2/lib/
<13>修改hive的配置文件
进入到hive的conf目录下
里面有配置文件的模板,我们直接利用模板写即可,先对其修改名字
mv hive-env.sh.template hive-env.sh
然后写入
vim hive-env.sh
写如内容如下
export HADOOP_HOME=/opt/modules/hadoop
export HIVE_CONF_DIR=/opt/modules/hive3.1.2/conf
export HIVE_AUX_JARS_PATH=/opt/modules/hive3.1.2/lib
修改hive-site.xml
vim hive-site.xml这个文件没有,vim后创建一个新的空的
存储元数据mysql相关配置
javax.jdo.option.ConnectionURL
jdbc:mysql://hadoop01:3306/hive3?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8
–这里是我们远程连接数据库时使用的用户名
javax.jdo.option.ConnectionUserName
root
–这里是连接数据库时使用的密码
javax.jdo.option.ConnectionPassword
hadoop
H2S运行绑定host
hive.server2.thrift.bind.host
hadoop01
远程模式部署metastore metastore地址
hive.metastore.uris
thrift://hadoop01:9083
关闭元数据存储授权
hive.metastore.event.db.notification.api.auth
false
<14>将数据库的驱动上传到安装包下lib
<15>初始化元数据这一步成功说明,安装成功
bin/schematool -initSchema -dbType mysql -verbos
血泪教训,第一回安装的过程中,失败了,让后就搜索网上怎么卸载数据库,以便于重新安装,出现了如下错误
在这一位网友的帮助下,定位到了错误
https://blog.youkuaiyun.com/qq_34382260/article/details/129318557
学习的过程中有人提供一定的代码,一定要看看都是写的什么,给予符合自己机器环境的适当修改,血泪教训
还有,记得初始化的时候启动hadoop集群
<16>创建文件夹: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
<17>启动hive,有多种启动方式
前台启动:
/opt/modules/hive3.1.2/bin/hive --service metastore
会一直占用命令行,ctrl+c结束
后台启动,日志打印到当前目录的一个文件中
/opt/modules/hive3.1.2/bin/hive --service metastore &
使用kill -9 +进程号删除进程
八,Hive的客户端使用
Hive有两代客户端,新客户端和老客户端
由上图可以知道,如果我们要使用老客户端,只需要启动Metastore服务就可。如果要使用新客户端,HiveServer2和Meatstore都要启动。
在之前先启动HiveServer2和Meatstore
命令如下(一定要先启动metastore,再启动hiveserver2,两者有依赖关系)
/opt/modules/hive3.1.2/bin/hive --service metastore &
/opt/modules/hive3.1.2/bin/hive --service hiveserver2 &
启动成后,我们jps查看后台的命令,发现有两个RunJar进程就行了
1.使用第一代客户端,在命令行输入
/opt/modules/hive3.1.2/bin/hive
如下图表示连接成功
2.使用第二代客户端连接
HiveServer2支持多客户端的并发和身份认证,旨在为开放API客户端如JDBC、0DBC提供更好的支持。
/opt/modules/hive3.1.2/bin/beeline
之后我们还有输入!connect jdbc:hive2://hadoop01:10000
需要输入hive运行所在机器的一些信息,root登录,密码直接按回车键解决如图,连接成功
九,Datagrip连接Hive
1.下载,安装和破解
网上找,一大堆
2.创建新的项目后
点击加号选择数据源
3.点击drive选择驱动(建议将原来的驱动删除,添加自己找的)
4.输入host,user等信息,并且测试信息
有如下绿色,代表成功
十,SQL语法
与我学习的数据库很像
1.数据库的建库,切换库等操作
SQL中DDL语法的作用
数据定义语言(Data Definition Language,DL),是SQL语言集中对数据库内部的对象结构进行创建,删除,修改等的操作语言,这些数据库对象包括database、table等
DDL核心语法由CREATE(创建)、ALTER(修改)与DROP(删除)三个所组成。DDL并不涉及表内部数据的操作
基于Hive的设计、使用特点,HQL中create语法(尤其createtable)将是学习掌握Hive DDL语法的重中之重建表是否成功直接影响数据文件是否映射成功,进而影响后续是否可以基于SQL分析数据。
<1>建立数据库
create database [数据库名]
COMMENT:数据库的注释说明语句
LOCATION:指定数据库在HDFS存储位置默认为/ser/hive/warehouse/dbname.db(一般不指定)
WITH DBPROPERTIES:用于指定一些数据库的属性配置。
<2>数据库的切换
use database [数据库名]
使用这个命令后,以后建表一类的操作,都是针对这个数据库的
<3>删除数据库
drop database [数据库名][RESTRICT|CASCADE]
默认行为是RESTRICT,这意味着仅在数据库为空时才删除它。
要删除带有表的数据库(不为空的数据库),我们可以使用CASCADE。
2.数据库的建表操作(重点)
CREATE TABLE [IF NOT EXISTS][db name].table name
(
col name data type[COMMENT col comment],
)
[COMMENT table comment]
[ROW FORMAT DELIMITED …]
;
黄色部分为必须写的字段
[ROW FORMAT DELIMITED …]意思为解析文本的字段的分割符。
(例如,一个txt文档中,一行有几个字符,由‘\t’分割,我们就写[ROW FORMAT DELIMITED “\t”],这样上传文件在解析的时候,就会按照’\t’将字段分割,得到数据库的表)
ROW FORMAT DELIMITED
[FIELDS TERMINATED BY char] 字段之间分隔符
[COLLECTION ITEMS TERMINATED BY char] 集合元素之间分隔符
[MAP KEYS TERMINATED BY char] Map映射kv之间分隔符
[LINES TERMINATED BY char]行数据之间分隔符
案例,(重点是理解字段分割符)
我们按照如下要求创建一张表
写如下sql语句
将archer.txt上传到创建的数据库文件夹下
之后使用select查询得到结果。
row format delimited fields terminated by可以不写,会有默认
默认分割符的使用如下
Hive默认分隔符
Hive建表时如果没有row format语法指定分隔符,则采用默认分隔符;
默认的分割符是’\001’,是一种特殊的字符,使用的是ASCII编码的值,键盘是打不出来的。
案例:使用默认分隔符建立表,如下图需求
不指定分隔符建立表
将文件上传,之后查询表,使用默认的分割符建表成功
3.hive的show语法
<1>.显示所有数据库
show databases或者
show schemas
<2>.显示当前数据库所有表
show tables;或者
show tables in [指定数据库];
<3>.查询显示一张表的元数据信息
desc formatted [指定的表];
4.comment注释乱码的问题
这是由于mysql中默认的字符不支持显示中文,因此需要修改成Utf-8编码
alter table hive3.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table hive3.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table hive3.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table hive3.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table hive3.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; .