• 欢迎光临~

1_hive入门

开发技术 开发技术 2022-10-18 次浏览

内容大纲:
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的初体验

  1. Hadoop HA模式--如何完成主备切换
    //ZK集群的 watch监听机制 + 临时节点

  2. Hadoop HA模式--如何避免脑裂
    //通过 Journal Node集群实现

  3. 数仓相关概述--数仓简介
    背景:
    随着互联网的发展, 各个公司都积累了大量的数据, 这些数据可以更好的帮助企业决策者做决策或者提供数据支持,
    但是, 问题是, 如何从海量的数据中提取出来有效的价值信息呢? 这个时候, 数仓(数据仓库)就应运而生了.

    概述:
    数据仓库简称数仓, 英文名叫: Data WareHouse, 简称: DW, DWH, 主要是面向 主题 的, 一般都是 分析性的操作,
    大多数分析的都是 离线(历史数据, 固定的, 不变的数据)数据.
    //数仓仅仅是存储数据的仓库, 本身不消耗数据, 也不生产数据.

    粮仓:
    存储粮食的仓库, 粮仓本身不消耗粮食, 也不会生产粮食, 仅仅是存储粮食.

    实际开发中, 数据的2个主要作用是什么:
    1. 操作性记录的保存. //OLTP
    2. 分析性决策的指定. //OLAP

    总结:
    1. 实际开发中, 我们是 基于业务数据开展数据分析, 基于分析结果提供决策支撑(支持).
    2. 数仓仅仅是一种思路, 或者说理论, 因为它是存储数据的, 所以我们学过的各种数据库都可以用来充当数仓. 例如: MySQL, Oracle...
    课程中, 我们用 MySQL充当"数仓"
    3. 我们马上要学习的Hive就是一种数仓架构, 可以通过写 HiveSQL的方式, 对数仓中的数据做分析, 从而获取最终结论.

  4. 数仓相关概述--数仓的重要特征

    1. 面向主题.
      //数仓都是面向主题开展数据分析的, 一般都是 查询操作居多.
    2. 集成性.
      //数据可以来源于各个渠道, 例如: 业务性数据库, 第三方数据, 日志文件, 爬虫数据等...
    3. 非易失性(不可更新).
      //数仓分析的大都是离线(历史)数据, 数据一般是不会变化的.
    4. 时变性.
      //随着业务的发展和推动, 数据量, 数据结构(字段)也是不断变换的, 我们的数仓内容也要不断调整和优化.
  5. 数仓相关概述--数据仓库和数据库的区别
    数据库: //OLTP, On Line Transaction Processing, 联机事务处理.
    面向业务的, 一般处理的是实时数据, 主要是支撑业务的, 且大多数都是 CURD(增删改查)的操作.
    对数据的时效性要求较高.

    数据仓库: //OLAP, On Line Analytical Processing, 联机分析处理.
    面向主题的, 一般处理的是离线数据, 主要是给企业决策者提供数据支持的, 且大多数都是 查 的操作.
    对数据的时效性要求一般不高, 主要是 数据量.

    结论:
    1. 数据仓库是面向分析而生的, 绝对不是 "大型数据库".
    2. 数据仓库也不是用来替代数据库的, 而是一种思维, 主要是分析业务数据得到结论, 给企业决策者提供数据支持 或者 分析性报告的.

  6. 数仓相关概述--数仓分层架构详解
    概述:
    数仓的分层主要分为3层, 分别是: ODS(源数据层), DW(数据仓库层), DA(数据应用层)

    扩展, 一个完整的Java业务体系图:
    1. 需求调研.
    2. 编写调研文档.
    3. 设计静态页面.
    4. 技术选型, 框架选定, 统一工具.
    5. 数据库建模, 数据表设计.
    6. 程序开发.
    7. 测试, 部署, 运维...

    数据分析项目的步骤:
    1. 明确分析的目的和思路.
    2. 数据采集.
    3. 数据预处理.
    4. 数据分析.
    5. 数据展示.
    6. 撰写分析性报告.
    //详见图解.

  7. 数仓相关概述--ETL 和 ELT的区别
    //Extract(抽取), Transfer(转换), Load(装载)
    ETL: //旧的的数仓架构
    指的是先抽取, 然后转换, 最后在存储到数仓中. //ODS => DW => DA

    ELT: //新的的数仓架构
    指的是先抽取, 然后直接存储数仓中(DW), 直接在数仓中对数据做转换, 分析等操作, 即: 基本上没有ODS层的概念了. //DW => DA

  8. 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集群.

  9. Apache Hive--Hive架构图
    流程:
    Hive Client => Hive Driver => Metastore => RDBMS

    Hive Driver驱动器各部分解释:
    解析器:
    编译器:
    优化器:
    执行器:

    //详见图片

  10. Apache Hive--MetaStore(元数据服务)和元数据(MetaData)的区别
    Hive的元数据:
    指的是数据库, 数据表, 字段等信息. 元数据本身指的就是 用来描述数据的数据.

    MetaStore: 元数据服务
    它是用来管理Hive中的元数据的, 主要作用有2个, 分别是:
    1. 用来支持多个客户端连接Hive的.
    2. 用来保证 存储Hive元数据的那个数据库的 账号和密码的安全性的.

  11. Apache Hive--Hive部署的3种方式
    Hive的部署方式主要有3种, 分别是:
    方式1: 内嵌模式
    方式2: 本地模式
    方式3: 远程模式
    //细节: 上述3中部署方式的区别主要是2点, 1.需不需要单独开启元数据服务(metastore) 2.能不能共享数据库中的元数据.
    //见图片

  12. 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.2mysql 5.7.29mysql-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.2Hive3安装.md
    
  13. Apache Hive--Hive的启动_第1代客户端

    1. 必须先启动ZK, Hadoop集群.
      cd /export/onkey
      ./startZk.sh

      start-all.sh

    2. 因为我们是通过远程方式部署的Hive, 所以必须手动先开启 metastore元数据服务.
      cd /export/server/apache-hive-3.1.2-bin/bin
      ./hive --service metastore //前台启动.
      nohup ./hive --service metastore & //后台启动.

    3. 通过Hive的第一代客户端 hive(底层是Shell写的)连接Hive.
      cd /export/server/apache-hive-3.1.2-bin/bin
      ./hive

    4. 恭喜各位, Hive已经连接上了, 可以在这里写HiveSQL了.
      show databases; //测试的, 查看所有数据库.
      create databases hg; //创建hg数据库.

  14. 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:$PWD

    2. 到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
    	输入密码: 不用写, 直接敲回车.
    
  15. Apache Hive--Hive的初体验
    //已知: Hive的本质是 把HDFS文件映射成一张Hive表, 然后通过写HiveSQL的方式就可以操作表中的数据, 我们来模拟下.

    1. 数据源文件, 假设在 Linux的 /root路径下, stu.txt
      1,刘亦菲,33
      2,赵丽颖,31
      3,高圆圆,35
      4,贾静雯,39

    2. 在hive的hg数据库下(你随便哪个库), 创建 student表, 用来映射上述文件中的数据.
      create databases hg;

      use hg;

      create table student(
      sid int,
      name string,
      age int
      );

      select * from student; //查看表数据, 没有任何数据, 因为还没有上传HDFS文件呢.

    3. 从Linux中上传 stu.txt文件 到 上述的表的路径下.
      cd /root
      hadoop fs -put ./stu.txt /user/hive/warehouse/hg.db/student

    4. 重新回到CRT中查询表数据.
      select * from student; //查看表数据, 有数据, 但是不是我们要的数据, 是一堆 NULL

      思考:
      为什么没有数据呢?
      答案:
      因为我们在建hive表的时候, 没有指定 行格式字段分隔符, hive就会用默认的分隔符'01', 但是我们源文件中数据是通过,分割的,所以没有数据.

    5. 删除刚才的数据表, 重新创建Hive数据表, 指定: 行格式字段分隔符为 ,(逗号)
      create table student(
      sid int,
      name string,
      age int
      ) row format delimited fields terminated by ',';

    6. 重新 从Linux中上传 stu.txt文件 到 上述的表的路径下.
      cd /root
      hadoop fs -put ./stu.txt /user/hive/warehouse/hg.db/student

    7. 重新回到CRT中查询表数据.
      select * from student; //查看表数据, 有数据了, 至此, Hive初体验完毕.
      //即: 把HDFS文件映射成一张Hive表, 然后通过写HiveSQL的方式就可以操作表中的数据

    8. 细节: 上述的HiveSQL语句在CRT中执行的时候, 建议顶行写, 不然某些同学的电脑会报错.

程序员灯塔
转载请注明原文链接:1_hive入门
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com