Hive初步认识,理解Hive(一)
用了有一段时间的Hive了,之前一直以为hive是个数据库,类似Mysql、Oracle等数据库一样,其实不然.
Hive是实现Hadoop 的MapReduce的一种方式(Hive是一种MapReduce,优化的时候不能以sql的方式进行优化)
Hive表分类:内部表 外部表 分区表 分桶表 (创建表的时候需要指定行数据的分隔符 以及字段的分隔符)
内部表与外部表
删除表时内部表表数据表结构都删除
删除表时外部表只删除表结构
内部表与外部表的使用规则:
当前表数据如果有多个使用者 那就使用外部表 避免删除的时候影响到其他用户使用
如果只有一个用户使用就定义为内部表就好了
分区表与分通表
分区表用户自己定义 每个区存储在不同文件
分桶表由程序计算而来 针对某个字段通过哈希函数求出分桶散列信息
Hive的数据存储:(元数据+表数据)
hive的元数据存储在数据库里(mysql/derby) :元数据表示表的定义语句
hive表数据存储在hdfs文件上:每个表对应一个目录(可能会有分区、分桶表 所以是对应目录 而不是文件)
hive元数据存储位置
数据库信息 DBS表中
表信息 TBLS表中
数据列信息 COLUMNS_V2 表中 列字段有顺序 会记录下来
创建视图的时候 仅仅表示创建sql语句的快捷方式,但是没有物化视图(没有执行sql)
Hadoop简介
mapreduce主要做数据的加工计算
hdfs主要是存储数据分布式文件系统
yarn 主要负责作业调度 集群资源管理
map主要处理输入数据,reduce将整理好的数据进一步加工,然后存入hdfs分布式文件系统中。
MapReduce计算步骤:
1.hdfs 将文件拆分 切片
2.mapper将任务拆分 对应启动进程
3.shuffle将数据写入磁盘
4.reducer通过shuffle从磁盘读取数据
5.reducer进程进行数据聚合,将最后的结果存入磁盘