• Hive面试汇总(2022)


    Hive面试汇总(2021)

    1. 简述Hive主要架构及解析成MR的过程
      Hive元数据默认存储在derby数据库,不支持多客户端访问,所以需要将元数据存储在MySQL中,才支持多客户端访问。主要架构如下:

    Hive解析成MR的过程:

       Hive通过给用户提供一系列交互接口,接收到用户的指令(sql语句),结合元数据(metastore),经过Driver内的解析器,编译器,优化器,执行器转换成mapreduce(将sql转换成抽象语法树AST的解析器,将AST编译成逻辑执行计划的编译器,在对逻辑执行计划进行优化的优化器,最后将逻辑执行计划转换成mapreduce),提交给hadoop中执行,最后将执行返回的结果输出到用户交互接口。
    
    • 1
    1. Hive与传统数据库的区别
      Hive和数据库除了拥有类型的查询语言外,无其他相似

    存储位置:Hive数据存储在HDFS上。数据库保存在块设备或本地文件系统
    数据更新:Hive不建议对数据改写。数据库通常需要经常修改
    执行引擎:Hive通过MapReduce来实现。数据库用自己的执行引擎
    执行速度:Hive执行延迟高,但它数据规模远超过数据库处理能力时,Hive的并行计算能力就体现优势了。数据库执行延迟较低
    数据规模:hive大规模的数据计算。数据库能支持的数据规模较小
    扩展性:Hive建立在Hadoop上,随Hadoop的扩展性。数据库由于ACID语义[wh1] 的严格限制,扩展有限
    3. Hive内部表和外部表的区别
    存储:外部表数据由HDFS管理;内部表数据由hive自身管理
    存储:外部表数据存储位置由自己指定(没有指定location则在默认地址下新建);内部表数据存储在hive.metastore.warehouse.dir(默认在/uer/hive/warehouse)
    创建:被external修饰的就是外部表;没被修饰是内部表
    删除:删除外部表仅仅删除元数据;删除内部表会删除元数据和存储数据
    4. Hive中order by,sort by,distribute by和cluster by的区别
    order by:对数据进行全局排序,只有一个reduce工作
    sort by:每个mapreduce中进行排序,一般和distribute by使用,且distribute by写在sort by前面。当mapred.reduce.tasks=1时,效果和order by一样
    distribute by:类似MR的Partition,对key进行分区,结合sort by实现分区排序
    cluster by:当distribute by和sort by的字段相同时,可以使用cluster by代替,但cluster by只能是升序,不能指定排序规则
    在生产环境中order by使用的少,容易造成内存溢出(OOM)

    生产环境中distribute by和sort by用的多

    1. row_number(),rank()和dense_rank()的区别
      都有对数据进行排序的功能

    row_number():根据查询结果的顺序计算排序,多用于分页查询

    rank():排序相同时序号重复,总序数不变

    dense_rank():排序相同时序号重复时,总序数减少

    select name,subject,score
    row_number() over(partition by subject order by score desc) rn,
    rank() over(partition by subject order by score desc) r,
    dense_rank() over(partition by subject order by score desc) dr
    from student_score;
    name

    subject

    score

    rn

    r

    dr

    Zhang

    English

    84

    1

    1

    1

    Qian

    English

    84

    2

    1

    1

    Shun

    English

    78

    3

    3

    2

    Li

    English

    69

    4

    4

    3

    Math

    1. Hive中常用的系统函数有哪些
      date_add(str,n)、date_sub(str,n) 加减时间
      next_day(to_date(str),’MO’) 周指标相关,获取str下周一日期
      date_format(str,’yyyy’) 根据格式整理日期
      last_day(to_date(str)) 求当月最后一天日期
      collect_set(col) 收集数据返回一个以逗号分割的字符串数组
      get_json_object(jsondata,’ . o b j e c t ’ ) 解析 j s o n ,使 用 ′ .object’) 解析json,使用' .object)解析json,使. object’获取对象值
      NVL(str,replace) 空字段赋值,str为空返回replace值;两个都为空则返回null
    2. Hive如何实现分区
      建表:create table tablename(col1 string) partitioned by(col2 string);
      添加分区:alter table tablename add partition(col2=’202101’);
      删除分区:alter table tablename drop partition(col2=’202101’);
    3. Hive导入数据的五种方式
      1. Load方式,可以从本地或HDFS上导入,本地是copy,HDFS是移动

    本地:load data local inpath ‘/root/student.txt’ into table student;
    HDFS:load data inpath ‘/user/hive/data/student.txt’ into table student;

      2. Insert方式,往表里插入
    
    • 1

    insert into table student values(1,’zhanshan’);

      3. As select方式,根据查询结果创建表并插入数据
    
    • 1

    create table if not exists stu1 as select id,name from student;

      4. Location方式,创建表并指定数据的路径
    
    • 1

    create external if not exists stu2 like student location ‘/user/hive/warehouse/student/student.txt’;

      5. Import方式,先从hive上使用export导出在导入
    
    • 1

    import table stu3 from ‘/user/export/student’;

    1. Hive导出数据的五种方式
      hive学习和习题集
      hive

    0星
    超过10%的资源
    44KB

    下载
    1. Insert方式,查询结果导出到本地或HDFS

    Insert overwrite local directory ‘/root/insert/student’ select id,name from student;
    Insert overwrite directory ‘/user/ insert /student’ select id,name from student;

      2. Hadoop命令导出本地
    
    • 1

    hive>dfs -get /user/hive/warehouse/student/ 000000_0 /root/hadoop/student.txt

      3. hive Shell命令导出
    
    • 1

    ]$ bin/hive -e ‘select id,name from student;’ > /root/hadoop/student.txt

      4. Export导出到HDFS
    
    • 1

    hive> export table student to ‘/user/export/student’;

      5. Sqoop导出
    
    • 1
    1. Hive的窗口函数有哪些
      在SQL处理中,窗口函数都是最后一步执行,仅位于order by之前

    over():指定分析函数工作的数据窗口大小随行变化(跟在聚合函数 [wh2]后面,只对聚合函数有效)

       current row 当前行
    
       n preceding 往前n行数据
    
       n following 往后n行数据
    
       unbounded:
    
              unbounded preceding 从前面开始 |————>
    
              unbounded following 直到终点     ————>|
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    java面试题
    docx

    0星
    超过10%的资源
    377KB

    下载
    lag(col,n) 往前第n行数据

       lead(col,n) 往后第n行数据
    
       ntile(n) 把有序分区中的行分化到n个数据组中,各组的编号从1开始,ntile会返回每行所属的组编号(n为int类型)
    
    • 1
    • 2
    • 3

    举例说明:

    select name,orderdate,cost,
    sum(cost) over() as sp1, --所有行相加
    sum(cost) over(partition by name) as sp2, --按名字分组,组内相加
    sum(cost) over(partition by name order by orderdate) as sp3, --按名字分组并按时间排序
    sum(cost) over(partition by name order by orderdate
    rows between unbounded preceding and current row)as sp4,–由起点到当前行的聚合
    sum(cost) over(partition by name order by orderdate
    rows between 1 preceding and current row)as sp5, --由当前一行到当前行的聚合
    sum(cost) over(partition by name order by orderdate
    rows between 1 preceding and 1 following)as sp6, --由当前行到前后一行的聚合
    sum(cost) over(partition by name order by orderdate
    rows between current row and unbouded following)as sp7–由当前行到后面所有行的聚合
    from business;

    *注:sp3和sp4结果一样,因为根据order by升序逐渐依次增加

    查看顾客上次和下次的购买时间

    select name,orderdate,cost,
    lag(orderdate,1) over(distribute by name sort by orderdate)as sp1,–上次购买时间
    lead(orderdate,1) over(distribute by name sort by orderdate)as sp2–下次购买时间
    from business;

    查询前20%时间的订单信息

    select * from (
    select name,orderdate,cost, ntile(5) over(order by orderdate) sorted
    from business
    ) t
    where sorted = 1;

    1. 如何自定义UDF,UDTF函数
      用UDF函数解析公共字段,用UDTF函数解析事件字段

    自定义UDF:继承UDF,重写evaluate方法

    自定义UDTF:继承GenericUDTF,重写3个方法,initialize(自定义输出的列名和类型),process(将结果返回forward(result)),close

    [wh1]A(atomicity)原子性:事务操作要么全部做完,要么不做

    C(consistency)一致性:事务运行期间,数据对象依然完整性

    I(isolation)独立性:并发事务之间不会相互影响

    D(durability)持久性:一旦事务提交后,修改将永久保存在数据库上

    [wh2]聚合函数:count,sum,avg,min,max

    ————————————————
    版权声明:本文为CSDN博主「「已注销」」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wushuoyouting/article/details/113120237

  • 相关阅读:
    思腾云计算
    如何将硬盘克隆到固态硬盘,固态硬盘系统克隆怎么弄
    认识CSS颜色
    Docker Compose初使用
    拯救者Legion Y9000K 2021H(82K6)原厂oem预装Win11系统镜像
    MySQL:02-增删改查
    西山居 游戏研发工程师实习生 面经
    socket实现进程间通信
    记一次调试YOLOv5+DeepSort车辆跟踪项目的经过
    基于Springboot外卖系统11:菜品新增类别+类别信息分页查询
  • 原文地址:https://blog.csdn.net/lz_N_one/article/details/126054161