背景和概念
Hive是一个依赖于分布式存储的查询和管理大型数据集的数据仓库。传统的非大数据行业一般都是基于表进行数据存储和管理的,如果由于业务扩张或者其他原因迁移到HDFS平台上,那么需要将传统的SQL查询语句全部翻译成Map-reduce的程序实现,这个工作量是相当庞大的。好在SQL具有严谨和良好的模板式语法结构,因此Hive就应运而生了,它负责将SQL语句模板化成Map-reduce任务。对上层屏蔽了将SQL任务转化为Map-reduce任务的繁杂性。上层开发者仅仅需要像往常使用SQL语句操作传统关系型数据库一样操作HDFS就可以了。所以Hive更准确讲是一个几月HDFS的数据处理框架,隐藏了底层的复杂性。具体的过程如下:
1-接收来自上层的请求:create table tab_order(id int,name string ,money double) path hdfs://order_log
2-Hive拿到砂锅面的请求之后创建一个元数据表,并且声称相应的Map-reduce程序—编译—打成jar包—运行
原理图
架构图
Hive和HDFS的关系
Hive本身也需要存储元数据,这部分数据存放在Hive自带的数据库中()或者我们可以给Hive配置一个数据库。
Hive只是一个工具而已,不用想Hadoop其他组件那样分布式部署,只需要部署在一个节点上面就可以了。即便部署多个,他们之间也是相互独立的,没有任何关系。
HDFS不支持随机修改和插入某一行数据,所以Hive也不支持随机插入和修改,只支持数据的查询,也就是说数据必须已经存在HDFS上面,Hive只是提供了HDFS的SQL访问方式。那么如何将HDFS中的数据和Hive中的元数据信息映射起来,有下面两种方式:
1-建表的时候就和HDFS上面的文件数据绑定;
2-数据导入;