美文网首页
HIVE与HDFS映射关系

HIVE与HDFS映射关系

作者: Eqo | 来源:发表于2022-08-17 20:18 被阅读0次

问题1:Hive一条Select语句,底层是如何读取HDFS文件的?

  • 基本流程

    • step1:根据表名到Hive元数据中,找到这个表对应的HDFS地址
    • step2:将对应的HDFS地址目录中所有数据进行读取处理
  • ==举个栗子1:普通表查询==

    select * from tb_emp;
    
    • a. Hive会在MySQL元数据库中找到一张TBLS的表:这张表存储了Hive中每张表的信息

    • b. Hive会根据表名找到这张Hive表对应的SD_ID

      [图片上传失败...(image-1be2f0-1658200618304)]

    • c. Hive会在MySQL元数据库中找到一张SDS的表:这张表存储了Hive表与HDFS的对应关系

    • d. Hive会根据表名对应的SD_ID在SDS中表中找到表对应的HDFS地址

      [图片上传失败...(image-c16d96-1658200618304)]

    • e. Hive会读取这个目录下的所有文件

  • ==举个栗子2:分区表查询==

    select * from tb_emp_part where dept = 10; -- dept是分区字段
    
    • a. Hive会在MySQL元数据库中找到一张TBLS的表:这张表存储了Hive中每张表的信息

    • b. Hive发现这张表为分区表,并且做了分区过滤,就先从TBLS中读取表的TBL_ID

      [图片上传失败...(image-848c94-1658200618304)]

    • c. Hive会在MySQL元数据库中找到一张PARTITIONS的表:这张表存储了Hive中每个表的每个分区的信息

    • d. Hive会根据TBL_ID,找到这张表的所有分区的信息

      [图片上传失败...(image-391470-1658200618304)]

    • e. Hive根据这个表每个分区的名称进行过滤,获取需要过滤的分区的SD_ID

    • f. Hive根据这个SD_ID到SDS表中,获取这个分区在HDFS中对应的地址

      [图片上传失败...(image-ea865a-1658200618304)]

问题2:有一张Hive表db_test.tb_test1,是一张普通表

  • 表在HDFS中的目录

    /user/hive/warehouse/db_test.db/tb_test1
    
  • 如果我通过hdfs命令手动往这个表的目录中放一个文件

    hdfs dfs -put 1.txt /user/hive/warehouse/db_test.db/tb_test1
    
  • 请问表中select是否能读到这个文件的数据?

    可以,根据Hive映射原理,Hive会直接读取这个表对应的HDFS目录,只要是目录下的文件都会被读取
    

问题3:有一张Hive表db_test.tb_test2,是一张分区表

  • 表在HDFS中的目录结构

    /user/hive/warehouse/db_test.db/tb_test2/daystr=2022-01-01/20220101.txt
                                            /daystr=2022-01-02/20220102.txt 
                                            ……
    
  • 问题:如果手动在HDFS的这个目录中创建一个分区的目录,然后将数据放入这个分区目录中

    hdfs dfs -mkdir /user/hive/warehouse/db_test.db/tb_test2/daystr=2022-03-28
    hdfs dfs -put 20220328.txt /user/hive/warehouse/db_test.db/tb_test2/daystr=2022-03-28
    
  • 请问Hive中能否读到这个分区?

    不能,因为根据分区表的元数据映射,这个分区目录必须在元数据中有才能被读到,而这个分区目录是用户自己创建的,Hive中没有对应的元数据所以,读取不到的
    
  • 解决:手动添加这个分区的元数据

    alter table tb_test2 add if not exists partition (daystr=2022-03-28);
    

相关文章

  • HIVE与HDFS映射关系

    问题1:Hive一条Select语句,底层是如何读取HDFS文件的? 基本流程step1:根据表名到Hive元数据...

  • hive之路(1)

    hive简介 hive是什么? hive是基于hadoop的数据仓库工具,他可以将结构化的数据(HDFS)映射成一...

  • 09.Hive

    Hive 一、Hive概述 1). MapReducer的不足 HDFS上的文件并没有schema的概念(比如关系...

  • Hive学习-Hive基本操作(建库、建表、分区表、写数据)

    hive简单认识 Hive是建立在HDFS之上的数据仓库,所以Hive的数据全部存储在HDFS上。Hive的数据分...

  • sparkMlib_doc_1.0

    模型输入输出对应关系 输入表(hive)——模型参数——输出模型(hdfs)DecisionTreeGBTCLog...

  • Hive入门

    hive的表是hdfs中的目录,hive的数据是hdfs中的文件。 杜峰

  • java读取hive的orc文件

    hive API2hive udf 读取HDFS的orc文件

  • HBase 与Hive的集成

    HBase与Hive的对比 Hive 数据仓库Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做...

  • Hive

    基于hdfs存储数据,基于mr分析数据所以hive是基于hadoop 数据仓库工具 将结构化数据文件映射为数据表,...

  • Presto + Ambari Hive 问题

    环境 Ambari HDFS,Hive, RangerPresto Hive 表中数据库为tableautest,...

网友评论

      本文标题:HIVE与HDFS映射关系

      本文链接:https://www.haomeiwen.com/subject/pmijirtx.html