Apache Hive实战基础

本节目标

  • 了解Hive的作用和优势
  • 了解Hive的基本架构
  • 了解Hive的数据类型
  • 了解Hive的数据库和表操作
  • 理解Hive的数据分区
  • 理解Hive的数据分桶
4.1 数据仓库 4.1.1 为什么要有数据仓库 在引入数据仓库之前,我们先来聊聊为什么回产生数据仓库?

数据的作用有两个:操作型记录的保存和分析型决策的制定
  • 操作型记录的保存意味着企业通常不必维护历史数据,只需要修改数据以反映最新的状态;
  • 分析型决策意味着企业需要保存历史的数据,从而可以更精准的来评估现有状况进行决策;
基于后者分析型决策的优化,需要高性能地完成用户的查询,因此引出了数据仓库的概念 。
4.1.2 数据仓库概念 数据仓库是一个面向主题、集成的、非易失的、随时间变化的、用来支持管理人员决策的数据集合,数据仓库中包含了粒度化的企业数据 。
数据仓库的主要特征是: 主题性 、 集成性 、 非易失性 、 时变性。
数据仓库处理数据的流程:分析需求确认数据源ETL处理汇总/整合数据建模分析展现

4.1.3 数据仓库的体系结构 数据仓库的体系结构通常包含4个层次:数据源、数据存储和管理、数据服务以及数据应用 。

  • 数据源: 数据仓库的数据来源,包括外部数据、现有业务系统和文档资料等 。
  • 数据存储和管理: 为数据提供的存储和管理,包括数据仓库、数据集市、数据仓库监视、运行与维护工具和元数据管理等 。
  • 数据服务: 为前端工具和应用提供数据服务,包括直接从数据仓库中获取数据提供给前端使用,或者通过OLAP服务器为前端应用提供更为复杂的数据服务 。
  • 数据应用: 直接面向最终用户,包括数据工具、自由报表工具、数据分析工具、数据挖掘工具和各类应用系统 。
4.1.4 数据仓库解决的问题
  1. 为业务部门提供准确及时的报表
  2. 为管理人员提供更强的分析能力
  3. 为数据挖掘和知识发现奠定基础
4.1.5 面临的挑战 随着大数据时代的全面到来,传统数据仓库也面临了如下挑战:
  • 无法满足快速增长的海量数据存储需求
  • 无法有效处理不同类型的数据
  • 计算和处理能力不足
4.2 Hive基本概念
4.2.1 概述 Hive是建立在Hadoop之上的一种数仓工具 。该工具的功能是将结构化、半结构化的数据文件映射为一张数据库表,基于数据库表,提供了一种类似SQL 的查询模型(HQL),它具有最小的学习曲线,用于访问和分析存储在Hadoop文件中的大型数据集 。
Hive本身并不具备存储功能,其核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop集群中执行 。
特点:
  1. 提供简单和优化的模型,编码少于MR(提供了类似SQL的查询语言HiveQL,两者都是基于SQL92标准,底层会自动转化为MapReduce),使得精通SQL却不了解Java编程的人也能很好地进行大数据分析;
  2. 灵活性高,可以自定义用户函数(UDF)和存储格式;
  3. Hive支持在不同的计算框架上运行:mapreduce,tez(比MapReduce的性能快了50倍),有超大的数据设计的计算和存储能力,集群扩展容易;
  4. Hive支持在HDFS和HBase上进行临时查询数据 。
  5. 用于ETL和BI工具的成熟JDBC和ODBC驱动程序;
  6. 统一的元数据管理,可以presto/impala/sparksql等共享数据;
  7. 执行延迟高,不适合做数据的实时处理,但适合做海量数据的离线处理;
4.2.2 产生背景
Hive的产生背景主要有两个:
- 使用成本高: 使用MapReduce直接处理数据时,需要掌握Java等编程语言,学习成本较高,而且使用MapReduce不容易实现复杂查询;
- 建立分析型数仓的需求:Hive支持类SQL的查询以及支持自定义函数,可以作为数据仓库的工具 。
Hive利用 HDFS存储数据,使用MapReduce查询分析数据 。将SQL转换为MapReduce程序,从而完成对数据的分析决策 。
4.2.3 当前Hive的主流版本 选择任何技术的版本要考虑哪些方面:功能,稳定性,可维护性,兼容性
  • 策略:靠考虑不新不九的稳定版本
  • 当前Hive的主流版本有两个
    • hive-1.x 其中使用比较多的是hive-1.2.x的版本,最后一个稳定版本是hive-1.2.2,如果使用这个版本,你的hive将来没法集成spark.
    • hive-2.x 现行主流的hive使用版本,现行稳定的hive-2.x版本中,我们选择使用hive-2.3.6
    • HDP(商业版大数据环境)2.6.3内置的hive为1.2.1
4.2.5 Hive 元数据管理
  • 为了支持schema和数据分区等功能,Hive将元数据保存在关系型数据库中 。
  • 默认情况下,hive将元数据保存在关系型数据库中 。
    • 基于缺省Derby的非常适合测试
    • 用户之间不共享架构,因为每个用户都有自己的嵌入式Derby实例
    • 存储在metastore_db目录中,该目录位于启动配置单元的目录中
  • 可以轻松切换另一个sql安装,如MySQL,Oracle 。
  • 作为Hive的一部分的HCatalog将Hive元数据暴露给其他生态系统 。
  • Hive3.0以上的版本,元数据是默认保存在Hbase里面,解决了HA的问题 。
4.2.6 Hive体系架构
Note:解释一下经常遇到的hiveServer1hiveServer2?早期版本的hiveServer(即hiveServer1)因使用Thrift接口的限制,不能处理多于一个客户端的并发请求,在hive-0.11.0版本中重写了hiveServer代码(hiveServer2),支持了多客户端的并发和认证,并且为开放API客户端如JDBCODBC提供了更好的支持 。
  • 用户结构主要有三个:CLI(command line interface)命令行JDBCWeb UI,CLI是开发过程中常用的接口,在hive server2 提供新的命令beeline,使用sqlline语法
  • metaStore:hive的元数据结构描述信息库,可选用不同的关系型数据库来存储,通过配置文件修改、查看数据库配置信息 。
  • Driver:解释器、编译器、优化器完成HQL查询语句从语法分析、词法分析、编译、优化以及查询计划的生成 。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行 。
  • Hive的数据存储在HDFS中,大部分的查询,计算由MapReduce完成
    • select * from emp;->操作不会执行mapreduce
    • select count(*) from emp; -> 执行mapreduce操作
Hive Interface - CLI 和 Beeline模式的区别
  • 有两种工具:Beeline和命令行(CLI)
  • 有两种模式:命令行模式和交互模式
purpose(作用)HiveServer2 BeelineHiveServer1 CLIServer Connectionbeeline -u -n -phive -h -phelpbeeline -h or beeline --helphive -HRun Querybeeline -e beeline -fhive -e hive -fDefine Variablebeeline --hivevar key=valuehive --hivevar key=valueEnter ModebeelinehiveConnect!connectN/AList Tables!tableshow tables;List Columns!columndesc table_name;Run QuerySave Result!record !recordN/ARun Shell CMD!sh ls!ls;Run DFS CMDdfs -lsdfs -ls;Run SQL File!runsource;Check Version!dbinfo!hive --version;Quit Mode!quitquit;Purpose HiveServer2 Beeline HiveServer1 CLI
熟悉HDP-Hive环境
Hive Interface – 其他使用环境Hive Web Interface (As part of Apache Hive)--进入Hive clihive -e :执行指定的SQL语句hive -f :执行指定的SQL脚本hive -e "show databases”echo "show databases" > demo.sql && hive -f demo.sql && rm -f demo.sql--进入hive beelinehive --service hiveserver2 开启服务beeline -u jdbc:hive2://hadoop5:10000/db10 -n root -- 使用beeline连接hiveCopy to clipboardErrorCopied Hive Interface - 其他使用环境
  • Hive Web Interface(As part of Apache Hive)
  • Hue(Cloudera)
  • Ambari Hive View(hortonworks)
  • Zeppelin - Hive
  • JDBC/ODBC (ETL工具,商业智能工具,集成开发环境)
【Apache Hive实战基础】