首页 > 其他分享 >1_hive入门

1_hive入门

时间:2022-10-19 01:12:02浏览次数:63  
标签:数仓 入门 -- 数据库 Hive hive 数据

内容大纲:
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.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
    
  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就会用默认的分隔符'\001', 但是我们源文件中数据是通过,分割的,所以没有数据.

    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中执行的时候, 建议顶行写, 不然某些同学的电脑会报错.

标签:数仓,入门,--,数据库,Hive,hive,数据
From: https://www.cnblogs.com/nanguyhz/p/16804786.html

相关文章

  • HiveSQL(一)
    内容大纲:1.掌握HQLDDL数据定义语言 //针对表的数据类型SerDe序列化机制分隔符语法内部表、外部表数据存储路径分区表分桶表alter修改表2.掌握HQLDML数据......
  • hive导出到mysql的报错情况
    1.java.lang.RuntimeException:Can'tparseinputdata:'119.131.143.179  这种报错大概率是你的hive数据库中有空格或者换行导致的,无法把数据导出到mysql中,网上搜......
  • Java云原生崛起微服务框架Quarkus入门实践
    @目录概述定义GraalVM简介为何使用特性官方性能实战入门示例步骤安装GraalVM创建quarkus工程Idea导入项目Idea运行和调试打包成普通的Jar打包成依赖GraalVM二进制文件打包......
  • JDBC快速入门
    JDBC快速入门创建工程,导入驱动jar包注册驱动获取连接定义SQL语句获取执行SQL对象执行SQL处理返回结果释放资源 packagecom.it.jdbc;importcom.mysql.jdbc......
  • 大数据关键技术:自然语言处理入门篇
    分词与词向量自然语言处理简介自然语言处理概况什么是自然语言处理?自然语言处理(NaturalLanguageProcessing,NLP)是计算机科学领域与人工智能领域中的一个重要方向......
  • Go 语言入门很简单:Go 语言的错误处理
    本文将介绍Go中的错误处理,以及为什么我们需要错误处理。什么是错误处理异常处理是任何语言都不能绕不开的话题。Go语言没有提供传统的​​try...catch​​语句来处理异......
  • Hive大数据测试
    Result文件数据说明:Ip:106.39.41.166,(城市)Date:10/Nov/2016:00:01:02+0800,(日期)Day:10,(天数)Traffic:54,(流量)Type:video,(类型:视频video或文章article)Id:8701(视频或......
  • python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件)
    python网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件)requests是一个Python第三方库,用于向URL地址发起请求bs4全名BeautifulSoup4,是编写python爬虫常用库之......
  • Python class:定义类(入门必读)
    前面章节中已经提到,类仅仅充当图纸的作用,本身并不能直接拿来用,而只有根据图纸造出的实际物品(对象)才能直接使用。因此,Python 程序中类的使用顺序是这样的:创建(定义)类,也就是......
  • python基础入门之模块
    python基础入门之模块索引取值与迭代取值的差异l1=[11,22,33,44,55]1.索引取值print(l1[2])#33 可以任意位置任意次数取值,不支持无序类型的数据取值。2.迭......