面试考点
分桶表和分区表的区别
(bucket)桶
分区表可以通过load data into table 导入数据,分区表分区后根据分区字段作为where 条件查询效率会提高,分区表是多个文件夹构成,每个文件夹代表一个分区
分桶表通过创建一个与其相似的临时表,将数据导入临时表后,再通过insert into 分桶表 select * from 临时表将数据装载到分桶表
内部表和外部表的区别
内部表在删除的时候,删除的为元数据信息(表结构)和数据一起删除,内部表由hive自身管理
外部表创建时要加external关键字,内部表不用,默认创建表为内部表。外部表删除时只删除元数据信息(表结构)不删除数据,因为外部表是由hdfs管理
如何查看表是内部表还是外部表:
desc formatted tablename;
内部表通常用来存储分析结果
外部表通常用来存储外部导入的数据源
hive和RDBMS区别
hive是基于hadoop的一个数仓工具,可以将HDFS上结构化的数据映射成一张数据表,并且提供完整的sql查询功能,可以将sql语句转换为mapReduce运行,可以通过类sql快速实现简单的mapreduce统计。
hive只支持数据读和添加,不支持事务,hive返回结果延迟高,子查询只能在from中,但是可扩展性高,数据规模大。
HIVE自定义UDF函数的流程
-
写一个类继承(org.apache.hadoop.hive.ql).UDF类
-
覆盖方法evaluate();
-
打jar包
-
通过hive命令将jar包添加到hive的类路径:
add jar 路径 -
注册函数:
create temporary function xxx as ‘XXX’; -
使用函数
Hive架构
用户接口层 有CLI,JDBC/ODBC, WEBUI 访问HIVE
MetaStore 元数据存储,将元数据存储在RDMS,有三种:内嵌式元存储服务器,本地原存储服务器和远程元存储服务器。
Driver 完成对HQL的编译,词义分析语义分析,优化,以及生成查询计划,存在HDFS上,并由MR调用执行
谈谈你对hive的理解
hive是一个基于hadoop用户海量结构化数据的统计的数据仓库,提供类Sql语句查询,HQL。
hive实质上就是把HQL语句转换为MR程序的一个工具
谈谈你对Hbase的理解
Hbase是一个基于hadoop的hdfs存储的一个列族数据库,Hbase主要用于存储非结构化和半结构化的数据,Hbase存储数据类型单一,都是以字符串的形式存数据,而且Hbase的列是稀疏列,就是值为null的实际上不存储,Hbase的一个表由rowKey,时间戳和列族组成,每次更新数据时间戳会更新,所以hbase的数据有多个版本
图的深度搜素思想
遍历一个分支到末端,然后回溯,再遍历其他分支,直到全部遍历完
图的广度搜索思想
以一个点作为顶点,搜索与他相邻的点,再以这些点作为顶点,继续搜索相邻的点,直到遍历