内容大纲:
1. Hadoop的HA模式介绍
//如何完整主备切换?
//如何避免脑裂?
2. 数据仓库的相关概述.
什么是数据仓库 //Data WareHouse, 简称: DW, DWH, 数仓
数据仓库的特征
数据仓库 和 数据库的区别 //OLAP 和 OLTP的区别
数据的分层架构 //ODS(源数据层), DW(数据仓库层), DA(数据应用层)
美团数仓项目赏析 //153张 => 3张表
3. Hive环境搭建及初体验
Hive简介
Hive的架构模型
Hive的三种部署方式详解 //内嵌模式, 本地模式, 远程模式
Hive的环境搭建-远程模式
Hive的启动 //第1代客户端hive(底层是Linux Shell写的), 第2代客户端beeline(底层Java写的)
Hive的初体验
-
Hadoop HA模式--如何完成主备切换
//ZK集群的 watch监听机制 + 临时节点 -
Hadoop HA模式--如何避免脑裂
//通过 Journal Node集群实现 -
数仓相关概述--数仓简介
背景:
随着互联网的发展, 各个公司都积累了大量的数据, 这些数据可以更好的帮助企业决策者做决策或者提供数据支持,
但是, 问题是, 如何从海量的数据中提取出来有效的价值信息呢? 这个时候, 数仓(数据仓库)就应运而生了.概述:
数据仓库简称数仓, 英文名叫: Data WareHouse, 简称: DW, DWH, 主要是面向 主题 的, 一般都是 分析性的操作,
大多数分析的都是 离线(历史数据, 固定的, 不变的数据)数据.
//数仓仅仅是存储数据的仓库, 本身不消耗数据, 也不生产数据.粮仓:
存储粮食的仓库, 粮仓本身不消耗粮食, 也不会生产粮食, 仅仅是存储粮食.实际开发中, 数据的2个主要作用是什么:
1. 操作性记录的保存. //OLTP
2. 分析性决策的指定. //OLAP总结:
1. 实际开发中, 我们是 基于业务数据开展数据分析, 基于分析结果提供决策支撑(支持).
2. 数仓仅仅是一种思路, 或者说理论, 因为它是存储数据的, 所以我们学过的各种数据库都可以用来充当数仓. 例如: MySQL, Oracle...
课程中, 我们用 MySQL充当"数仓"
3. 我们马上要学习的Hive就是一种数仓架构, 可以通过写 HiveSQL的方式, 对数仓中的数据做分析, 从而获取最终结论. -
数仓相关概述--数仓的重要特征
- 面向主题.
//数仓都是面向主题开展数据分析的, 一般都是 查询操作居多. - 集成性.
//数据可以来源于各个渠道, 例如: 业务性数据库, 第三方数据, 日志文件, 爬虫数据等... - 非易失性(不可更新).
//数仓分析的大都是离线(历史)数据, 数据一般是不会变化的. - 时变性.
//随着业务的发展和推动, 数据量, 数据结构(字段)也是不断变换的, 我们的数仓内容也要不断调整和优化.
- 面向主题.
-
数仓相关概述--数据仓库和数据库的区别
数据库: //OLTP, On Line Transaction Processing, 联机事务处理.
面向业务的, 一般处理的是实时数据, 主要是支撑业务的, 且大多数都是 CURD(增删改查)的操作.
对数据的时效性要求较高.数据仓库: //OLAP, On Line Analytical Processing, 联机分析处理.
面向主题的, 一般处理的是离线数据, 主要是给企业决策者提供数据支持的, 且大多数都是 查 的操作.
对数据的时效性要求一般不高, 主要是 数据量.结论:
1. 数据仓库是面向分析而生的, 绝对不是 "大型数据库".
2. 数据仓库也不是用来替代数据库的, 而是一种思维, 主要是分析业务数据得到结论, 给企业决策者提供数据支持 或者 分析性报告的. -
数仓相关概述--数仓分层架构详解
概述:
数仓的分层主要分为3层, 分别是: ODS(源数据层), DW(数据仓库层), DA(数据应用层)扩展, 一个完整的Java业务体系图:
1. 需求调研.
2. 编写调研文档.
3. 设计静态页面.
4. 技术选型, 框架选定, 统一工具.
5. 数据库建模, 数据表设计.
6. 程序开发.
7. 测试, 部署, 运维...数据分析项目的步骤:
1. 明确分析的目的和思路.
2. 数据采集.
3. 数据预处理.
4. 数据分析.
5. 数据展示.
6. 撰写分析性报告.
//详见图解. -
数仓相关概述--ETL 和 ELT的区别
//Extract(抽取), Transfer(转换), Load(装载)
ETL: //旧的的数仓架构
指的是先抽取, 然后转换, 最后在存储到数仓中. //ODS => DW => DAELT: //新的的数仓架构
指的是先抽取, 然后直接存储数仓中(DW), 直接在数仓中对数据做转换, 分析等操作, 即: 基本上没有ODS层的概念了. //DW => DA -
Apache Hive--Hive简介
概述:
Hive是一种强依赖于Hadoop的数仓工具, 可以通过写HiveSQL的方式, 对HDFS 文件中的数据做操作.为什么要学习Hive?
1. 直接学习MR, 学习成本太高.
2. 如果要开发复杂的需求, MR难度系数稍高
3. SQL更通用, 程序员多多少少, 基本上都会点SQL语句.细节:
1. Hive的本质是: 把HDFS文件中的数据 映射成1张Hive表, 然后通过写HiveSQL的方式(底层会转成MR程序)对表中的数据做分析.
2. Hive是强依赖于Hadoop的, 所以启动Hive之前, 必须先启动Hadoop集群. -
Apache Hive--Hive架构图
流程:
Hive Client => Hive Driver => Metastore => RDBMSHive Driver驱动器各部分解释:
解析器:
编译器:
优化器:
执行器://详见图片
-
Apache Hive--MetaStore(元数据服务)和元数据(MetaData)的区别
Hive的元数据:
指的是数据库, 数据表, 字段等信息. 元数据本身指的就是 用来描述数据的数据.MetaStore: 元数据服务
它是用来管理Hive中的元数据的, 主要作用有2个, 分别是:
1. 用来支持多个客户端连接Hive的.
2. 用来保证 存储Hive元数据的那个数据库的 账号和密码的安全性的. -
Apache Hive--Hive部署的3种方式
Hive的部署方式主要有3种, 分别是:
方式1: 内嵌模式
方式2: 本地模式
方式3: 远程模式
//细节: 上述3中部署方式的区别主要是2点, 1.需不需要单独开启元数据服务(metastore) 2.能不能共享数据库中的元数据.
//见图片 -
Apache Hive--Hive的远程部署方式详解
细节:
1. Hive的本质是把HiveSQL转成MR程序来执行, 所以我们不用三台机子都装Hive, 只要在1台机器安装即可, 这里我是装到了node1中.
2. 但是为了更好的演示Hive的多客户端连接, 且演示 metastore可以防止 存储Hive元数据的那个数据库的 账号密码泄露问题,
我会在node2中也装一下Hive, 只不过这里的Hive配置文件, 没有MySQL的账号密码等信息.具体的安装步骤: //因为Hive依赖: JDK, MySQL, ZK, Hadoop 所以装Hive之前, 先把这些装好.
1. 上传, 解压.
2. 保证 Hive的 Guava.jar 和 Hadoop的 guava.jar版本一致.
//hive的Guava.jar版本是19, Hadoop Guava.jar版本是27, 所以: 我们删除Hive的这个包, 然后从Hadoop中拷贝过来.
//Hadoop的在: /export/server/hadoop-3.3.0/share/hadoop/common/lib
3. 修改配置文件.
hive-env.sh
hive-site.xml
4. 因为Hive要连接MySQL, 所以把MySQL的驱动包 拷贝到 hive/lib 下.
day08_Hive入门\软件\hive 3.1.2\mysql 5.7.29\mysql-connector-java-5.1.32.jar
5. 在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
6. 初始化Hive, 注意: 只需要初始化1次即可, 后续不用做了.
cd /export/server/apache-hive-3.1.2-bin/
bin/schematool -initSchema -dbType mysql -verbos
//细节: 初始化成功后, 会在MySQL中创建一个hive3数据库, 该库有74张数据表.//更多详细步骤, 请参考: \day08_Hive入门\软件\hive 3.1.2\Hive3安装.md
-
Apache Hive--Hive的启动_第1代客户端
-
必须先启动ZK, Hadoop集群.
cd /export/onkey
./startZk.shstart-all.sh
-
因为我们是通过远程方式部署的Hive, 所以必须手动先开启 metastore元数据服务.
cd /export/server/apache-hive-3.1.2-bin/bin
./hive --service metastore //前台启动.
nohup ./hive --service metastore & //后台启动. -
通过Hive的第一代客户端 hive(底层是Shell写的)连接Hive.
cd /export/server/apache-hive-3.1.2-bin/bin
./hive -
恭喜各位, Hive已经连接上了, 可以在这里写HiveSQL了.
show databases; //测试的, 查看所有数据库.
create databases hg; //创建hg数据库.
-
-
Apache Hive--Hive的启动_第2代客户端
需求1: 先演示第2代客户端连接Hive.
1. 因为 第2代客户端beeline, 底层是Java写的, 它连接 metastore是通过 hiveserver2服务实现的, 所以我们先开启 hiveserver2 服务.
cd /export/server/apache-hive-3.1.2-bin/bin
./hive --service hiveserver2 //前台启动.
nohup ./hive --service hiveserver2 & //后台启动.2. 上述命令执行后, 等待2分钟左右, 因为Hive要初始化一些信息, 然后再通过 第2代客户端beeline 连接. ./beeline !connect jdbc:hive2://node1:10000 //敲回车 输入账号: root 输入密码: 不用写, 直接敲回车. 3. 恭喜各位, Hive已经连接上了, 可以在这里写HiveSQL了. show databases; //测试的, 查看所有数据库.
需求2: 演示第2代客户端连接Hive, 多客户端连接.
1. 从node1中 远程分发 hive给node2
cd /export/server
scp -r apache-hive-3.1.2-bin/ node2:$PWD2. 到node2中, 找到 hive/conf/hive-site.xml文件, 删除其中的数据库账号密码等信息, 只保留如下的一组配置即可. <configuration> <!-- 远程模式部署metastore metastore地址 --> <property> <name>hive.metastore.uris</name> <value>thrift://node1:9083</value> </property> </configuration> 3. 在node2中尝试连接Hive, 如果连接成功, 说明: 我们实现了多客户端连接, 且MetaStore可以 保证存储Hive元数据的数据库的 账号和密码的安全问题. ./beeline !connect jdbc:hive2://node1:10000 //敲回车 输入账号: root 输入密码: 不用写, 直接敲回车.
-
Apache Hive--Hive的初体验
//已知: Hive的本质是 把HDFS文件映射成一张Hive表, 然后通过写HiveSQL的方式就可以操作表中的数据, 我们来模拟下.-
数据源文件, 假设在 Linux的 /root路径下, stu.txt
1,刘亦菲,33
2,赵丽颖,31
3,高圆圆,35
4,贾静雯,39 -
在hive的hg数据库下(你随便哪个库), 创建 student表, 用来映射上述文件中的数据.
create databases hg;use hg;
create table student(
sid int,
name string,
age int
);select * from student; //查看表数据, 没有任何数据, 因为还没有上传HDFS文件呢.
-
从Linux中上传 stu.txt文件 到 上述的表的路径下.
cd /root
hadoop fs -put ./stu.txt /user/hive/warehouse/hg.db/student -
重新回到CRT中查询表数据.
select * from student; //查看表数据, 有数据, 但是不是我们要的数据, 是一堆 NULL思考:
为什么没有数据呢?
答案:
因为我们在建hive表的时候, 没有指定 行格式字段分隔符, hive就会用默认的分隔符'\001', 但是我们源文件中数据是通过,分割的,所以没有数据. -
删除刚才的数据表, 重新创建Hive数据表, 指定: 行格式字段分隔符为 ,(逗号)
create table student(
sid int,
name string,
age int
) row format delimited fields terminated by ','; -
重新 从Linux中上传 stu.txt文件 到 上述的表的路径下.
cd /root
hadoop fs -put ./stu.txt /user/hive/warehouse/hg.db/student -
重新回到CRT中查询表数据.
select * from student; //查看表数据, 有数据了, 至此, Hive初体验完毕.
//即: 把HDFS文件映射成一张Hive表, 然后通过写HiveSQL的方式就可以操作表中的数据 -
细节: 上述的HiveSQL语句在CRT中执行的时候, 建议顶行写, 不然某些同学的电脑会报错.
-