欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hive面试题

程序员文章站 2022-06-10 10:43:16
...

1、什么是Hive

  是一个基于hadoop的数据仓库工具,可以将结构化数据映射成一张数据表,并提供类SQL的查询功能

2、Hive的意义(最初研发的原因)

  背景:hadoop是个好东西,但是学习难度大,成本高,坡度陡。 意义(目的):降低程序员使用hadoop的难度。降低学习成本。

3、Hive的内部组成模块,作用分别是什么

 用户接口:包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
 元数据存储:通常是存储在关系数据库如mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
 解释器、编译器、优化器、执行器:完成HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce 调用执行。

4、Hive支持的数据格式

    可支持Text, SequenceFile,
    ParquetFile, ORC格式
    RCFILE等

5、进入Hiveshell窗口的方式

  第一种交互方式:Hive交互shell(直接通过bin/hive的方式)
  第二种交互方式:Hive JDBC服务
   1.启动hiveserver2服务
         前台:bin/hive --service hiveserver2
         后台:nohup bin/hive --service hiveserver2  &
     2.beeline连接hiveserver2
       bin/beeline
       beeline> !connect jdbc:hive2://node01.hadoop.com:10000
  第三种交互方式:Hive命令  就是 bin/hive  加上一些参数  e:bin/hive -e "use myhive;select * from test1;"

6、Hive数据库、表在HDFS上存储的路径是什么

        hive的表存放位置模式是由hive-site.xml当中的一个属性指定的
       <name>hive.metastore.warehouse.dir</name>
       <value>/user/hive/warehouse</value>

7、like与rlike的区别

  like不是正则,而是通配符。这个通配符可以看一下SQL的标准,例如%代表任意多个字符。
  rlike是正则,正则的写法与java一样。'\'需要使用'\\',例如'\w'需要使用'\\w'

8、内部表与外部表的区别

  内部表数据由Hive自身管理,外部表数据由HDFS管理;
  删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

9、分区表的优点是,分区字段的要求是

  要求:分区字段绝对不能出现在数据表以有的字段中。
  优点: 将数据按区域划分开,查询时不用扫描无关的数据,加快查询速度

10、分桶表的优点是,分桶字段的要求是

    优点: 1、对于join的需求,能够起到优化加速的作用。(前提是,join字段设置为分桶字段) 2、用于数据取样(获取/提取数据样本
    要求:分桶字段必须是表中的字段

11、数据导入表的方式

 五种方式:   
    1、直接向分区表中插入数据
    insert into table score3 partition(month ='201807') values ('001','002','100');
    2、通过查询插入数据 
     (linux ) load data local inpath '/export/servers/hivedatas/score.csv' overwrite into table score partition(month='201806');
       (HDFS) load data inpath '/export/servers/hivedatas/score.csv' overwrite into table score partition(month='201806');
    3、多插入模式
         from score
         insert overwrite table score_first partition(month='201806') select s_id,c_id
         insert overwrite table score_second partition(month = '201806') select c_id,s_score;
    4、查询语句中创建表并加载数据(as select)
         create table score5 as select * from score;
    5、创建表时通过location指定加载数据路径
         create external table score6 (s_id string,c_id string,s_score int) row format delimited fields terminated by '\t' location '/myscore6'; 

12、数据导出表的方式

    7中方法
        1、将查询的结果导出到本地
        insert overwrite local directory '/export/servers/exporthive/a' select * from score;
        2、将查询的结果格式化导出到本地
        insert overwrite local directory '/export/servers/exporthive' row format delimited fields terminated by '\t' collection items terminated by '#' select * from student;
        3、将查询的结果导出到HDFS上(没有local)
        insert overwrite directory '/export/servers/exporthive' row format delimited fields terminated by '\t' collection items terminated by '#' select * from score;
        4、Hadoop命令导出到本地
        dfs -get /export/servers/exporthive/000000_0 /export/servers/exporthive/local.txt;
        5 、 hive shell 命令导出
        bin/hive -e "select * from yhive.score;" > /export/servers/exporthive/score.txt
        6、export导出到HDFS上(全表导出)
        export table score to '/export/exporthive/score';
        7.sqoop导出

13、order by与sort by的区别

    使用order by会引发全局排序
    使用sort  by会引发局部排序

14、where 与having的区别

 “Where”是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”;
 “Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用“聚合函数”。

15、distribute by何时使用,通常与哪个联合使用

   distribute by是控制在map端如何拆分数据给reduce端的,通常与sort by进行连用

16、Cluster by何时使用

     当 distribute by和sort by的是同一个字段时使用Cluster by

17、distribute by+sort by(相同字段) 与Cluster by的区别

     排序只能是倒序排序,不能指定排序规则为ASC或者DESC。

18、hive -e/-f/-hiveconf分别是什么意思

     -e从命令行执行指定的HQL
     -f 执行HQL脚本  
     -hiveconf 设置hive运行时候的参数配置

19、hive声明参数有哪些方式,优先级是什么

    配置文件<命令行参数<参数声明

20、编写hiveUDF代码,方法名称叫什么

    evaluate

21、企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?

    存储格式是ORC格式,数据压缩格式是snappy

22、hive自定义函数的类型

       自定义函数分为三个类别:
           UDF(User Defined Function):一进一出
           UDAF(User Defined Aggregation Function):聚集函数,多进一出(例如count/max/min)
           UDTF(User Defined Table Generating Function):一进多出,如lateral view explode()