目录

  • 1. 数据仓库概念
  • 2. Hive简介
    • 2.1 简介
    • 2.2 特性
    • 2.3 生态系统
  • 3. Hive系统架构
  • 4. HQL转成MapReduce作业的原理
    • 4.1 join的实现原理
    • 4.2 group by的实现原理
  • 5. 实验练习
    • 5.1 环境配置
      • 5.1.1 HIVE
      • 5.1.2 MYSQL
      • 5.1.3 配置MySql为hive元数据存储数据库
    • 5.2 Shell进行实验内容
      • 5.2.1 新建一个数据库;
      • 5.2.2 新建表
      • 5.2.3 添加分区
      • 5.2.4 导入grade_zqc
      • 5.2.5 统计男、女生人数
      • 5.2.6 统计每个学生所有科目的总分以及平均分
      • 5.2.7 统计每个科目有多少人以及每个科目平均成绩
      • 5.2.8 查询chinese科目得分排前两名学生学号和分数;
      • 5.2.9 创建一个新表rank_zqc保存CS系每个学生信息和科目总分,按成绩降序排序,并查询结果;
      • 5.2.10 统计每个系所有科目平均成绩在所有系中的占比。
      • 5.2.11 统计每个系每个科目考试不合格学生的占比。
      • 5.2.12 删除分区,删除表,删除库,退出Hive。(删除操作请谨慎!)
    • 5.3 JavaApi进行实验内容
  • 最后

1. 数据仓库概念

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。

  • 数据仓库与传统数据库本质区别

数据仓库中的数据相对稳定,大部分情况下不会发变更,存储大量历史数据;
传统数据库一般只存储某一时刻状态信息,不保存历史数据。

2. Hive简介

2.1 简介

  • Hive是一个构建于Hadoop顶层的数据仓库工具
  • 依赖分布式文件系统HDFS存储数据,依赖分布式并行计算模型MapReduce处理数据,本身不存储和处理数据(区别:传统数据仓库支持数据存储和处理分析)
  • 支持大规模数据存储、分析,具有良好的可扩展性
  • 定义了简单的类似SQL 的查询语言——HiveQL/HQL
  • 用户可以通过编写的HQL语句运行MapReduce任务
  • 可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上
  • 是一个可以提供有效、合理、直观组织和使用数据的分析工具

2.2 特性

  • 采用批处理方式处理海量数据
  1. Hive需要把HiveQL语句转换成MapReduce任务进行运行
  2. 数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化
  • 提供适合数据仓库操作的工具
  1. Hive本身提供了一系列对数据进行提取、转换、加载(ETL)的工具,可以存储、查询和分析存储在Hadoop中的大规模数据
  2. 这些工具能够很好地满足数据仓库各种应用场景

2.3 生态系统

  • Hive依赖于HDFS 存储数据、
  • Hive依赖于MapReduce 处理数据
  • 在某些场景下Pig可以作为Hive的替代工具
  • HBase 提供数据的实时访问
  • Pig主要用于数据仓库的ETL环节
  • Hive主要用于数据仓库海量数据的批处理分析

3. Hive系统架构

  • 用户接口模块。包括CLI、HWI、JDBC、ODBC、Thrift Server
  • 驱动模块(Driver)。包括编译器、优化器、执行器等,负责把HiveQL语句转换成一系列MapReduce作业
  • 元数据存储模块(Metastore)。是一个独立的关系型数据库(自带derby数据库,或MySQL数据库)

4. HQL转成MapReduce作业的原理

4.1 join的实现原理

select name, orderid from user join order on user.uid=order.uid;

4.2 group by的实现原理

存在一个分组(Group By)操作,其功能是把表Score的不同片段按照rank和level的组合值进行合并,计算不同rank和level的组合值分别有几条记录:

select rank, level ,count(*) as value from score group by rank, level

5. 实验练习

5.1 环境配置

5.1.1 HIVE


将Hive解压到/usr/local中

更改名字

更改hive目录所有者和所在用户组

环境配置


使环境生效

5.1.2 MYSQL

更新软件源

安装mysql-server

安装成功

确定mysql服务是否打开

启动和关闭mysql服务

  • 关闭
service mysql stop
  • 启动
 service mysql start

5.1.3 配置MySql为hive元数据存储数据库

进入mysql shell

sudo mysql 或 sudo mysql –u root –p 命令,回车后会提示输入密码,前者输入当前系统用户密码,后者是输入 mysql root 用户密码一般为空,回车进入 mysql 命令行。这里 root是 mysql 安装时默认创建的用户,不是 Ubuntu 系统的 root 用户。

新建一个数据库用来保存hive元数据(hive_metadata_zqc)

  1. 配置mysql允许hive接入

    将所有数据库的所有表的所有权限赋给新建的hive_zqc用户,hive_zqc、'hive’是后续操作中要对 hive-site.xml 文件配置的连接到 MySQL 数据库的用户名、密码,由你自己定义;

    刷新mysql系统权限关系表

    exit 退出

  2. 配置hive

    下载mysql jdbc包https://dev.mysql.com/downloads/connector/j/ ;



    解压jdbc包后,将其中的jar包拷贝至hive安装目录下lib文件夹中

    进入/usr/local/hive/conf 目录。将hive-default.xml.template 重命名为hive-default.xml 保存着各个配置参数的默认值。

    新建一个hive-site.xml 配置文件,并添加如下内容,该文件内容会覆盖原默认值

    箭头标记处说明:hive_metadata_zqc 是前面步骤 MySQL 里新建的 database、hive_zqc和 hive 是连接数据库的用户名以及密码;

<configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive_metadata_zqc?createDatabaseIfNotExist=true</value><description>JDBC connect string for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value><description>Driver class name for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionUserName</name><value>hive_zqc</value><description>username to use against metastore database</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>hive</value><description>password to use against metastore database</description></property></configuration>
  1. 初始化元数据库,启动 Hive,进入 Hive 运行时环境

    初始化元数据库,不然有可能会报错。

    可能出现错误

    原因:com.google.common.base.Preconditions.checkArgument 这是因为 hive 内依赖的 guava.jar 和hadoop内的版本不一致造成的。

    解决方法:查看hadoop安装目录下 share/hadoop/common/lib 内 guava.jar 版本,查看 hive安装目录下lib内guava.jar的版本,如果两者不一致,删除版本低的,并拷贝高版本的。

    两个版本一样了

    在进行一次初始化元数据库

    成功了!

  2. 启动Hive

    启动hive 之前,请先启动hadoop集群(start-dfs.sh)和确保MySQL服务正常运行。“hive”命令启动 hive。
    启动hadoop集群


    启动mysql

    启动hive

5.2 Shell进行实验内容

表1 student_zqc:

Name Sex Birth Dept Uid
Liuyi F 2002/11/26 CS 180301
Chener F 2001/6/11 CS 180302
Zhangsan M 2002/9/21 CS 180303
Lisi F 2001/1/26 SE 180201

表2 grade_zqc:

Uid Course Grade
180301 Chinese 90
180301 Math 58
180301 English 39
180302 Chinese 91
180302 Math 95
180302 English 75
180303 Chinese 60
180303 Math 58
180303 English 53
180201 Chinese 62
180201 Math 43
180201 English 74

5.2.1 新建一个数据库;

新建一个数据库db_xxx,添加扩展参数:日期、学号、姓名;使用该数据库做后续操作;设置命令行显示当前使用的数据库,请保证后续操作都能显示。

创建的时候添加了日期,学号,姓名,以及存放路径


5.2.2 新建表

新建student_xxx分区表(分区字段Dept)和grade_xxx内部表,分别查看表结构和存储路径;(字段类型自定义)


5.2.3 添加分区

在表student_zqc中添加两个分区Dept=’CS’和Dept=’SE’,从本地导入数据到student_xxx表的两个分区中,分别查看两个分区所有记录,查看表数据存储目录;


从文件中加载数据,load data
语法 :

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename

首先在本地主目录下创建数据文件 input.txt,并上传到 HDFS 中。
注意分隔符要跟你表设置一致。

  1. 本地创建两个文件
    input1.txt

    input.txt
  2. 将两个文件上传到HDFS
  3. 在hive中加载
  4. 查看是否加载成功

5.2.4 导入grade_zqc

从HDFS导入数据到grade_xxx表中,查看grade_xxx表所有记录,查看表数据存储目录;

本地创建表 input3.txt

上传到hdfs

加载到hive中

5.2.5 统计男、女生人数

select sex,count(1) from student_zqc group by sex;

5.2.6 统计每个学生所有科目的总分以及平均分

select uid,avg(grade) from grade_zqc group by uid;

5.2.7 统计每个科目有多少人以及每个科目平均成绩

5.2.8 查询chinese科目得分排前两名学生学号和分数;

5.2.9 创建一个新表rank_zqc保存CS系每个学生信息和科目总分,按成绩降序排序,并查询结果;









5.2.10 统计每个系所有科目平均成绩在所有系中的占比。

例如CS系Chinese科目平均成绩在所有系的比例是1.06。






5.2.11 统计每个系每个科目考试不合格学生的占比。


5.2.12 删除分区,删除表,删除库,退出Hive。(删除操作请谨慎!)

查看表分区

删除分区

删除表

删除库

退出

5.3 JavaApi进行实验内容

编写一个UDF,函数名UDFXxx,查询学生(输入字段:student_xxx.Birth)出生天数。给出定义和使用UDF的完整流程和截图。

添加包


import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class UDFzqc extends UDF{public final static DateTimeFormatter DEFAULT_DATE_FORMATTER = DateTimeFormat.forPattern("yyyy/MM/dd");private Text result = new Text();public Text evaluate(Text birthday) throws ParseException{DateTime dateTime = null;try {dateTime = DateTime.parse(birthday.toString(), DEFAULT_DATE_FORMATTER);}catch(Exception e) {return null;}return evaluate(dateTime.toDate());}public Text evaluate(Date birthday) throws ParseException{DateTime dateTime = new DateTime(birthday);return evaluate(new IntWritable(dateTime.getYear()), new IntWritable(dateTime.getMonthOfYear()),new IntWritable(dateTime.getDayOfMonth()));}public Text evaluate(IntWritable year, IntWritable month,IntWritable day) throws ParseException{result.set(getDays(year.get(), month.get(), day.get()));return result;}private String getDays(int year, int month, int day) throws ParseException{String s = year + "/" + month + "/" + day;SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");Date d = sdf.parse(s);long birthTime = d.getTime();long nowTime = new Date().getTime();return (nowTime - birthTime)/1000/3600/24 + " days";}public static void main(String[] args) throws ParseException{UDFzqc test = new UDFzqc();System.out.println(test.evaluate(new Text("2021/06/01")));}
}

最后

小生凡一,期待你的关注

【大数据基础实践】(六)数据仓库Hive的基本操作相关推荐

  1. 【小白视角】大数据基础实践(五) MapReduce编程基础操作

    目录 1. MapReduce 简介 1.1 起源 1.2 模型简介 1.3 MRv1体系结构 1.4 YARN 1.4.1 YARN体系结构 1.4.2 YARN工作流程 2. MapReduce ...

  2. 打怪升级之小白的大数据之旅(六十七)<Hive旅程第八站:Hive的函数>

    打怪升级之小白的大数据之旅(六十七) Hive旅程第八站:Hive的函数 上次回顾 上一章,我们学习了如何对数据进行拆分–分区表与分桶表,使用分区表与分桶表,可以加快我们的查询效率..本章节是Hive ...

  3. 打怪升级之小白的大数据之旅(六十一)<Hive旅程第二站:Hive安装>

    打怪升级之小白的大数据之旅(六十一) Hive旅程第二站:Hive安装 上次回顾 上一章我们学习了Hive的概念以及框架原理,本章节是对Hive的安装进行分享,因为它有些需要自己配置的点,所以我单独开 ...

  4. 读书笔记丨《数据产品经理修炼手册:从零基础到大数据产品实践》丨DAY4

    日期:2022年7月24日 内容:第四章数据仓库理论与应用(p77-p104) 4.1 了解大数据基础Hadoop 一.Hadoop及三驾马车 01.什么是hadoop? Hadoop是一个分布式系统 ...

  5. 数据产品经理修炼手册(从零基础到大数据产品实践)

    一.初识数据产品经理 大数据4V特性 ①体量巨大(Volume)②处理速度快(Velocity)③类型多种多样(Variety)④价值大(Value) 数据产品分类 ①企业内部使用的产品,如BI数据分 ...

  6. 提升60%基础资源利用率!中国联通的容器化大数据平台实践

    中国联通数据中心总经理王志军在Rancher举办的ECIC大会上的演讲实录,分享了中国联通为何开始进行平台容器化并如何运用Kubernetes对9000台的服务器数据节点进行最大化利用和合理调度,进而 ...

  7. 大数据基础教程丨TiDB数据库从入门到实践

    TiDB 是一款定位于联机事务处理/联机分析处理( HTAP: Hybrid Transactional/Analytical Processing)的融合型数据库产品,实现了一键水平伸缩,强一致性的 ...

  8. 大数据基础之Hive(四)—— 常用函数和压缩存储

    作者:duktig 博客:https://duktig.cn (文章首发) 优秀还努力.愿你付出甘之如饴,所得归于欢喜. 更多文章参看github知识库:https://github.com/dukt ...

  9. 大数据技术之大数据基础阶段考试题(二)

    文章目录 一 .Zookeeper 1 请简述ZooKeeper的选举机制 假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这 ...

最新文章

  1. 主角用计算机控制身体,国漫段子手:绝技,用计算机控制挖掘机炒菜
  2. python可以提高程序执行速度N倍你知道吗?
  3. Java8 LinkedHashMap 源码阅读
  4. whether logo retrieval will block the application
  5. Java面试题及答案,mysql可视化工具
  6. 从单片机步入Linux之文件系统的构建
  7. 大数据技术之 Kafka (第 4 章 Kafka API ) Producer API
  8. 95-080-044-源码-启动-jobmanager.sh
  9. 一机三屏台式计算机,三屏系统重现江湖:背后一台完整主机
  10. Python爬虫(一)抓取指定的页面
  11. 设计模式之GOF23迭代器模式
  12. vivoy55可以升级到android9,Vivo Y55刷机教程_Vivo Y55升级更新官方系统包
  13. Yii2.0 视频教程
  14. .Net core web api 上传图片代码 。 AutoMapper映射注入。sql suger数据库依赖注入
  15. 开机预读快还是不预读快_启用预读为网页浏览提速
  16. 10:1,AlphaStar横空出世,碾压星际争霸2人类职业玩家 TLO 和 MaNa
  17. 免流解密之SAOML二开
  18. python链接sql报错_python3.7连接sqlserver数据库失败报错20002, DB-Lib error message 20002
  19. idea 2018.1破解激活方法,有效期至2099年
  20. idea2018破解有效期至2100年

热门文章

  1. 按键精灵手机助手连接安卓模拟器
  2. IEC 61000系列标准及其对应国标
  3. win11展开右键菜单(还原为win10状态)的方法
  4. Charles(青花瓷)抓包教程
  5. 使用Apache Traffic Server搭建CDN服务器
  6. laravel身份证验证_简单的Laravel登录身份验证
  7. mac上安装windows系统
  8. 先有鸡还是先有蛋,程序员怎么看
  9. MATLAB imref2d函数的理解与使用
  10. 单片机c语言编程规则,单片机C语言编程规则