什么是hive:Hive是基于hadoop的一个数据仓库工具,实质就是一款基于hdfs的MapReduce计算框架,对存储在HDFS中的数据进行分析和管理。
hive的工作方式:把存放在hive中的数据都抽象成一张二维表格,提供了一个类似于sql语句的操作方式,这些sql语句最终被hive的底层翻译成为MapReduce程序,最终在hadoop集群上运行,结果也会输出在hdfs之中。(必须是结构化的数据)。在存储的时候hive对数据不做校验,在读取的时候校验。
hive的的优点:极大的简化了分布式的计算程序的编程。使不会分布式编程的,其他工作人员都可以进行海量数据的统计分析。
hive的的缺点(3点):
延迟高,事务,增删改
1.不支持行级别的增删改操作
2.hive的查询延迟很严重
3.hive中不支持事务,主要用于做OLAP(联机分析处理)。
hive的的适用场景:hive数据仓库中的数据,主要是存储,在进行ETL(数据清洗、抽取、转换、装载)操作之后的具有结构化的数据。但是数据的存储的格式没有特殊要求,可以使普通文件,也可以是溢写压缩文件等等。
hive创建分区分桶表语句
set hive.enforce.bucketing=true;
CREATE Table rating_table_p_b
(userid STRING,
movieid STRING,
rating STRING
)
partitioned by(datetime STRING)
clustered by (userid) sorted by (movieid)
INTO 4 buckets
row format delimited
fields terminated by ‘\t’
hive的的与关系型数据库的对比:
1.查询语言不同:hive是hql语言,mysql是sql语句;
2.数据存储位置不同:hive是把数据存储在hdfs上,而mysql数据是存储在自己的系统中;
3.数据格式:hive数据格式可以用户自定义(textfile,sequencefile,rcfile,orcfile),mysql有自己的系统定义格式;
4.数据更新:hive不建议数据更新,只可以读,不可以写,而sql支持数据更新;
5.索引:hive只有简单索引,因此查询数据的时候是通过mapreduce很暴力的把数据都查询一遍,也造成了hive查询数据速度很慢的原因,而mysql有索引;
6.延迟性:hive延迟性高,原因就是上边一点所说的,而mysql延迟性低;
7.数据规模:hive存储的数据量超级大,而mysql只是存储一些少量的业务数据;
8.底层执行原理:hive底层是用的mapreduce,而mysql是excutor执行器;
9.可扩展性:hive高,数据库小
10、hive读时模式(Hive对数据的验证并在不加载数据时进行,而在查询时进行),传统数据库写时模式(数据库对数据的验证在加载数据时进行,加载不符合模式,拒绝加载,加载可以对列建立索引压缩但这样也会花费更多的加载时间。)
在传统数据库里,表的模式是在数据加载时强制确定的。如果在加载时发现数据不符合模式,则被拒绝加载数据。因为数据是在写入数据库是对照模式进行检查,因此这一设计有时被称为“写时模式”(schema on write)。
在另外一方面,Hive对数据的验证并在不加载数据时进行,而在查询时进行。这称为“读时模式”(schema on read)。
用户需要在这两种方法之间权衡。读时模式可以使得数据加载非常迅速。这是因为它不需要读取数据,进行“解析”,再进行序列化以数据库内部格式存入磁盘。数据加载仅仅是文件的复制和移动。这一方法也更为灵活:试想,针对不同的分析任务,同一个数据可能会有两个模式。Hive使用‘’外部表’时,这种情况是可能发生的。
写时模式有利于提升查询性能。因为数据库可以对列进行索引,并对数据进行压缩。但是作为权衡,此时加载数据会花更多时间。此外没在很多加载时模式未知的情况下,因为查询尚未确定,因此不能决定使用何种索引。这些情况真是Hive“长袖善舞”的地方!
Hive是一个基于hdfs分布式文件系统的数据仓库工具,它是一个类SQL的HQL解释器,会将HQL语句解释成基于底层的MapReduce或Spark程序,执行的程序运行在Yarn资源调度系统之上,它将数据存储在hdfs上,会将hdfs上的文件解析成一张张结构表,利用hive独特的HQL语法操作,降低了编程人员的学习成本,非常适合用于对数据仓库进行分析