1、什么是Hive?

  • Hive是基于Hadoop的一个数据仓库工具,能将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能,(能将SQL语句转变成MapReduce任务来执行。)

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

  • 降低程序员使用Hadoop的难度,降低学习成本,

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

  • 元数据:描述数据的数据
  • 内部执行流程:
  • 解析器(解析器SQL语句)、编译器(把SQL语句编译成MapReduce程序)、优化器(优化MapRedue程序)、执行器(将## MapReduce程序运行的结果提交到HDFS)

4、Hive支持的数据格式?

  • TextFile、SequenceFile、RCFile、ParquetFile、ORC

5、进入Hiveshell窗口的方式?

  • 1、Hive命令直接进入HiveShell
  • 2、
    启动 hiveserver2
    进入beeline窗口
    链接:!connect jdbc:hive2://nodex:10000

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

  • 默认在HDFS系统的 /user/hive/warehouse/ 文件夹下

7、like与rlike的区别?

  • like:like的内容不是正则,而是通配符(模糊匹配查询)
  • rlike:rlike的内容可以是正则,正则的写法与java一样。

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

  • 3、删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
    (对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复)

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

  • 优点:

指定分区查询,可以提高查询,分析的效率
分区字段绝对不能出现在数据表以有的字段中。

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

  • 优点:使用join 或 数据取样时能够起到优化的作用
  • 分桶字段必须是表中的字段

11、数据导入表的方式?

  • 1、load加载数据
    (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’);
  • 2、直接向分区表中插入数据
    insert into table score3 partition(month =‘201807’) values (‘001’,‘002’,‘100’);
  • 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 tbname2 as select * from tbname1;
  • 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、数据导出表的方式?

  • 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:全局排序,一个MapReduce
  • sort by:每个分区内进行排序,对全局结果集来说不是排序。

14、where 与having的区别?

  • where 作用在 数据表的字段上
  • having作用在 查询的字段上(结果字段上)

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

  • 当需要根据某个字段进行分区时使用
  • 通常与sort by结合使用(先分区后排序)
  • Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。

16、Cluster by何时使用?

  • 需要按照某个字段分区同时也按照这个字段进行排序时使用cluster by

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

  • distribute by+sort by:可以指定排序规则ASC或DESC。
  • cluster by:只能是正序排序,不能指定排序规则。

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

  • -e:后面跟操作语句(“” ‘’)
  • -f:后面跟文件
  • -hiveconf:hive相关配置属性

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

  • 参数声明 > 命令行参数 > 配置文件参数

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

  • evaluate()

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

  • 常用的数据存储格式是:ParquetFile、ORC
  • 常用的数据压缩格式是:Snappy

22、hive自定义函数的类型?

  • 1、UDF(User-Defined-Function)
    一进一出
  • 2、UDAF(User-Defined Aggregation Function)
    聚合函数,多进一处
  • 3、UDTF(User-Defined Table-Generating Functions)
    一进多出

23、Fetch抓取中设置more有什么效果,设置none有什么效果

  • 简单的查询语句不会转化成为MR程序
  • 设置为none后所有查询语句都要转化成为MR程序

24、本地模式有什么好处

  • 在小数据量的前提下 提高了查询效率

25、当一个key数据过大导致数据倾斜时,如何处理

  • 开启Map端聚合和功能。
  • 开启局部聚合后 hive会创建两个MR 程序 第一个进行数据的局部聚合 第二个进行数据的最终汇总

26、Count(distinct) 的替换语句如何编写

  • 先去重,再求总数量
    SELECT count(DISTINCT id) FROM bigtable;
  • 替换方案
    SELECT count(id) FROM (SELECT id FROM bigtable GROUP BY id) a;

27、如何使用分区剪裁、列剪裁

  • 列剪裁: 只拿需要的列
  • 分区剪裁:只拿需要的分区
  • 要什么 拿什么

28、如何理解动态分区调整

  • 以第一个表的分区规则,来对应第二个表的分区规则,将第一个表的所有分区,全部拷贝到第二个表中来,第二个表在加载数据的时候,不需要指定分区了,直接用第一个表的分区即可

29、数据倾斜时,如何将众多数据写入10个文件

  • 众人拾柴火焰高(将一个大的任务拆分成多个小任务,再次执行)
  • 设置reduce数量10
  • 1:distribute by (字段)
  • 2:distribute by rand()

30、影响map数量的因素

文件很小时候:影响map数量的因素是文件数量
文件很大时候:影响map数量的因素是块的数量

31、reduce数量的计算是什么

  • 公式:
    N=min(参数2,总输入数据量/参数1)
  • 参数1:每个Reduce处理的最大数据量
  • 参数2:每个任务最大Reduce数量

32、并行执行有什么好处

  • 并行执行使得多个没有依赖关系的任务同时执行,起到了提高查询效率的作用

33、严格模式不能执行哪些命令

  • 1、不允许扫描所有分区
  • 2、使用了order by语句查询,要求必须使用limit语句
  • 3、限制笛卡尔积的查询

34、JVM重用有什么好处

  • 允许多个task使用一个jvm
  • 降低了任务启动的开销,提高了任务的执行效率
  • 但是,在整个任务结束前,jvm不释放,长时间占用。导致资源不足时,资源浪费

35、什么是MR本地模式

  • 任务在提交SQL语句的节点上“本地”执行,任务不会分配到集群

36、什么是MR本地计算

  • 数据存储到HDFS后,编写分析代码实现计算程序,程序在进行分发时,优先分发放到这个程序所使用到的数据所在的节点上。

37、先join后过滤的优化方案

  • 1、SELECT a.id FROM ori a LEFT JOIN bigtable b
    ON (b.id <= 10 AND a.id = b.id);
  • 2、SELECT a.id FROM bigtable a RIGHT JOIN (SELECT id FROM ori WHERE id <= 10 ) b ON a.id = b.id;