Hive考核面试题

1、什么是Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)。

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 调用执行。

解释器 -> 编译器 -> 优化器 -> 执行器
解析sql语句
编译sql成mp程序
对程序进行优化
提交程序

4、Hive支持的数据格式
可支持Text,
SequenceFile,
ParquetFile,
ORC格式
RCFILE等

5、进入Hiveshell窗口的方式
1、在Hive客户端,配置hive到环境变量的前提下,在节点的任意位置 直接数据hive + 回车
2、启动hiveserver2 服务
在另一个节点进入beelin的shell窗口
连接hiveserver2服务
!connect jdbc:hive2://node01:10000
6、Hive数据库、表在HDFS上存储的路径时什么
/user/hive/warehouse

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

8、内部表与外部表的区别
在删除内部表时:内部表删除将表的元数据和数据同时删除。
在删除外部表时:外部表的元数据被删除,数据本身不删除。

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

10、分桶表的优点是,分桶字段的要求是
要求:分桶字段必须是表中的字段。
优点:1、对于join的需求,能够起到优化加速的作用。(前提是,join字段设置为分桶字段)
2、用于数据取样(获取/提取数据样本)
将数据编号作为分桶字段。这样每个桶内各种“级别”的数据都有。

11、数据导入表的方式
1、直接向分区表中插入数据
2、通过查询插入数据
3、多插入模式
4、查询语句中创建表并加载数据(as select)
5、创建表时通过location指定加载数据路径

12、数据导出表的方式
1、将查询的结果导出到本地
2、将查询的结果格式化导出到本地
3、将查询的结果导出到HDFS上(没有local)
4、Hadoop命令导出到本地
5 、Hive shell 命令导出
6、export导出到HDFS上(全表导出)
7、SQOOP导出(后面再学)

13、order by与sort by的区别
1、使用order by会引发全局排序
2、sort by会对每组数据进行局部排序。

14、where 与having的区别
where 作用在 分组(group by)和聚集(sum等)计算之前
having作用在 分组(group by)之后,对分组后计算的数据进行过滤

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

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

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

18、hive -e/-f/-hiveconf分别是什么意思
-e:从命令行执行指定的 HQL
-f:执行 HQL 脚本
-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、reduce数量的计算是什么
公式: N=min(参数2,总输入数据量/参数1)
参数1:每个Reduce处理的最大数据量
参数2:每个任务最大Reduce数量

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

32、严格模式不能执行哪些命令
1、不允许扫描所有分区
2、使用了order by语句查询,要求必须使用limit语句
3、限制笛卡尔积的查询

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

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

35、先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;

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

37什么是MR本地模式
任务在提交SQL语句的节点上“本地”执行,任务不会分配到集群。
作用或好处:在小数据量的前提下,提高查询效率

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.上传tar包 2.解压 tar -zxvf hive-1.2.1.tar.gz 3.安装mysql数据库 推荐yum 在线安装 4.配置hive (a)配置HIVE_HOME环境变量 vi conf/hive-env.sh 配置其的$hadoop_home (b)配置元数据库信息 vi hive-site.xml 添加如下内容: javax.jdo.option.ConnectionURL jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true JDBC connect string for a JDBC metastore javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver Driver class name for a JDBC metastore javax.jdo.option.ConnectionUserName root username to use against metastore database javax.jdo.option.ConnectionPassword hadoop password to use against metastore database 5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下 如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行) mysql -uroot -p #(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接) GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES; 6. Jline包版本不一致的问题,需要拷贝hive的lib目录jline.2.12.jar的jar包替换掉hadoop的 /home/hadoop/app/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar 启动hive bin/hive ---------------------------------------------------------------------------------------------------- Hive几种使用方式: 1.Hive交互shell bin/hive 2.Hive JDBC服务(参考java jdbc连接mysql) 3.hive启动为一个服务器,来对外提供服务 bin/hiveserver2 nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err & 启动成功后,可以在别的节点上用beeline去连接 bin/beeline -u jdbc:hive2://mini1:10000 -n root 或者 bin/beeline ! connect jdbc:hive2://mini1:10000 4.Hive命令 hive -e ‘sql’ bin/hive -e 'select * from t_test'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值