Hive数据仓库
了解!!!
大数据解三个问题:(1)海量(PB级以上,EB,ZB,YB等)数据的传输 (2)海量数据的存储(3)海量数据的计算
常识:b—>B—>KB—>MB—>GB—>TB—>PB—>EB—>ZB—>YB等等
Hive:由Facebook开源用于解决海量结构化日志的数据统计
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能
Hive本身不存储数据,他就是提供了一种管理方式
本质是:将HQL转化成Map Reduce程序——>>好处:减少开发人员的学习成本,方便任务的运行,降低开发成本
1)Hive处理的数据存储在HDFS(Hive相当于Hadoop的客户端)
2)Hive分析数据底层的默认实现是Map Reduce(可以修改)
3)执行程序运行在Yarn上(资源调度)
**Hive优点:**Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合使用
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
**Hive缺点:**Hive的HQL表达能力有限
(1)迭代式算法无法表达
(2)数据挖掘方面不擅长
Hive的效率比较低
(1)Hive的自动生成的Map Reduce(吞吐量大,但是速度比较慢)作业,通常情况下不够智能化
(2)Hive调优比窘困难,力度较粗
Hive架构原理
Hive和数据库比较
除了查询语言类似,其他一切关系都没有(不要有什么联想)
HIve是建立在Hadoop之上的,所有的Hive的数据都是存储在HDFS中的,而数据库可以将数据保存在块设备 或者本地文件系统中
Hive一次写入多次读出,在Hive中不建议对数据进行改写,所有的数据都是加载的时候确定好的
数据库更多的是进行实时的增删改查。
Hive(处理数据量大)不能建立索引(计算引擎就是Map Reduce),查询的时候只能取扫描更多的(全盘)数据(比较暴 力),因此访问延迟比较高。数据库MySQL(处理数据量小)的计算引擎是InnoDB
北美大数据Hive笔记
- 掌握Hive数据类型
- 掌握Hive的数据库和表的操作
- 掌握Hive的数据分区
理解Hive的数据分桶,视图(view)
0909,主要学DDL
将结构化的数据文件映射为数据库表
提供类SQL的查询语言HQL
主要是解决海量数据的结构化分析
Hive是Hadoop的客户端,HQL类SQL语法,简化MR开发。
- 提供了简单的优化模型,支持在HDFS和HB上临时查询数据,
- 支持用户自定义函数,格式。
- 成熟的JDBC和ODBC驱动程序,用于ETL和BI(商业智能)
- 稳定可靠(真实生产环境)的批处理,有庞大活跃的社区
工作中 工作效率+开发效率相互权衡。
Hive元数据管理
-
记录数据仓库中模型的定义,各层级的映射关系
-
存储在关系数据库中
默认Derby(单用户单线程),轻量级内嵌SQL数据库
Derby非常适合测试和演示
存储在.metastore_db目录中
实际生产一般存储在MySQL中
修改设置文件hive-site.xml
-
Hcatalog
将Hive元数据共享给其他应用程序
-
启动beeline服务
//用hive也可以 ,就是用这个好看,自动生成表格。
[root@sandbox-hdp ~]# beeline -u 'jdbc:hive2://localhost:10000/default'
//关闭
[root@sandbox-hdp ~]# lill -9
命令行模式:就是上面图片的第三条语句(两条语句使用一下)。不是交互式的
最右面的一整列都可以使用
使用环境
上面的图片有展现工具,Hive的jdbc工具。
CDH的用Hues HDP 适用于Ambari Hiew View
下载HUE界面,有图标界面。
上面加黑加粗为常用重点。(4个)
对于Hive的String类型相当于数据库中的varchar类型,给类型是一个可变的字符串,不过她不能声明其中最能存储多少个字符,理论上它可以存储2GB的字符数。
Hive数据类型 - 复杂数据类型
ARRAY:存储的数据卫星同数据类型
MAP:具有相同类型的键值队
STRUCT:封装了一组字段(结构体,跟业务相关,可以组成对象,取值的时候c.weight=2 c相当于列的名字)
Hive元数据存储结构
数据结构 | 描述 | 逻辑关系 | 物理存储(HDFS) |
---|---|---|---|
Database | 数据库 | 表的结合 | 文件夹 |
Table | 表 | 行数据集合 | 文件夹 |
Partition | 分区 | 用于分割数据 | 文件夹 |
Buckts | 分桶 | 用于分布数据 | 文件 |
Row | 行 | 行记录 | 文件中的行 |
Columns | 列 | 列记录 | 每行中指定的位置 |
Views | 视图 | 逻辑给你按,可跨越多张表 | 不存储数据 |
Index | 索引 | 记录统计数据信息 | 文件夹 |
分区Partition是在表的基础上取优化,
数据库(Database)
表的集合,HDFS中表现为一种文件夹
默认为在hive.metastore.warehouse.dir属性目录下
建库建表
0: jdbc:hive2://localhost:10000/default> create database if not exists myhivebook;
No rows affected (1.405 seconds)
0: jdbc:hive2://localhost:10000/default> show databases;
+----------------+--+
| database_name |
+----------------+--+
| default |
| foodmart |
| myhivebook |
| xademo |
+----------------+--+
4 rows selected (0.546 seconds)
0: jdbc:hive2://localhost:10000/default>
Hive中的注释:–我在你 。。。注释中不要出啊先分号(;)
数据表(内部表/外部表)
免面试题:Hive内部表和外部表概念?区别?最实用的场景?
第四章 DDL数据定义语言(库的增删改查以及表的增删改查)
创建数据库,数据库在HDFS上默认存储路径是/user/hive/warrehouse/*.db
//在hive中存放文件夹的路径 pwd查看根目录
[root@sandbox-hdp ~]# cd /home/hive/
//显示数据库
hive> show databases;
//使用 default 数据库
hive> use default;
//显示 default 数据库中的表
hive> show tables;
//删除已创建的 student 表
hive> drop table student;
//创建 student 表, 并声明文件分隔符’\t’
hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS
TERMINATED
BY '\t';
//加载/opt/module/datas/student.txt 文件到 student 数据库表中。
hive> load data local inpath '/opt/module/datas/student.txt' into table student;
//Hive 查询结果
hive> select * from student;
OK
1001 zhangshan
1002 lishi
1003 zhaoliu
Time taken: 0.266 seconds, Fetched: 3 row(s)
//创建数据库 名字为hive_db,默认路径为/user/hive/下面
hive> create database hive_db;
//创建数据库(要在数据库下面)
create database hive_db;
//指定目录下创建数据库(根目录)location
hive> create database hive_db2 location '/';
//创建一个表,默认路径是根路径下
create table hive_db.test(id int);
//查看所有数据库
hive> show databases;
//标准写法:if not exists,创建数据库的标准写法,防止出现名字相同
hive> create database if not exists hive_db;
OK
Time taken: 0.034 seconds
hive>
//模糊查询:查询数据库的详情
hive> show databases like 'hive*';
OK
hive_db
hive_db2
Time taken: 0.035 seconds, Fetched