Hive面试题

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()
  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值