• Hive常见面试题1.0


    hive 的使用,内外部表的区别,分区作用, UDF 和 Hive 优化

    (1)hive的使用:仓库,工具

    (2)内部表:加载数据到hive所在的hdfs目录,删除时,元数据文件都删除

    外部表:不加载数据到Hive所在的hdfs目录,删除时,只删除表结构

    (3)分区作用:防止数据倾斜

    (4)UDF函数:用户自定义的函数(主要解决格式,计算问题),需要继承UDF类

    class TestUDFHive extends UDF{
    public String evalut(String str){
    try{
    return "hello" + str
    }catch(Exception e){
    return str + "error"
    }
    }
    }

    (5)Hive优化:看做mapreduce处理

    排序优化:sort by效率高于order by

    分区:使用静态分区(statu_date="20160516",location="beijing"),每个分区对应hdfs上的一个目录,减少job和task数量;

    使用表连接操作,解决group by数据倾斜问题

    设置hive.groupby.skewindata=true,那么hive会自动负载均衡,叫文件合并成大文件

    使用UDF或UDAF函数:

    常用数据导入数据库的方法有哪些?导入到什么数据库?

    eg:将Hive统计分析结果导入到MySQL数据库表中——sqoop操作

    可以使用flume/FTP/Kettle/DataX。。。

    业务量有多大?有多少行数据??

    根据业务自行定义。。。。。

    hive跟hbase的区别?

    共同点:

    1.hbase 与 hive 都是架构在hadoop之上的。都是用hadoop作为底层存储

    区别:

    2.Hive是建立在Hadoop之上为了减少MapReduce Jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目

    3.想想你在操作RMDB数据库,如果全表扫描,就用Hive+Hadoop/Spark/flink,如果是索引访问,就用HBase+Hadoop/Spark/Flink

    4.Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。

    5.Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。

    6.hive是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作

    7.hbase是列存储

    8.hdfs作为底层存储,hdfs是存放文件的系统,而Hbase负责组织文件

    9.hive需要到hdfs存储文件,需要用到MapReduce计算框架

    Hive有哪些方式存储元数据,各有哪些有点?

    三种:内存数据库 derby—小,不常用。

    本地mysql/常用远程段Mysql

    Hive内部表与外部表的区别

    Hive创建内部表时,会将数据移动到数据仓库指向的路径,若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据,这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。。

    Hive底层与数据库交互原理

    hive有一套自己的sql解析引擎,称作 metastore ,存储在mysql或者derby数据库中,可以将sql语句转化为mapreducejob任务执行

    Hive如何调优

    1. 底层是MapReduce,所以可以说是MapReduce优化
    2. 小文件合并成大文件
    3. Reduce数据在代码中介于节点数*reduceTask的最大数量的0.95倍到1.75倍
    4. 写一个UDF函数,在建表的时候制定好分区
    5. 配置文件中,打开在 map 端的合并
    6. 在库表设计的时候,尽量考虑rowkey 和 columnfamily的特性
    7. 进行hbase集群的调优(参考hbase调优)

    Hive中德meta store用来做什么的?

    metastore是一套映射工具,将sql语句转换成对应的job任务区进行执行

  • 相关阅读:
    RabbitMQ教程(二) ——linux下安装rabbitmq
    通讯协议序列化解读(二) protostuff详解教程
    头条号【编编成程】开通
    C++静态成员函数访问非静态成员的几种方法
    深入理解QStateMachine与QEventLoop事件循环的联系与区别
    『重构--改善既有代码的设计』读书笔记---Duplicate Observed Data
    GCC选项-Xlinker和-Wl区别
    『重构--改善既有代码的设计』读书笔记----Replace Array with Object
    解决GDB输出Qt内置类型的显示问题
    GDB源代码查找路径
  • 原文地址:https://www.cnblogs.com/shan13936/p/13841667.html
Copyright © 2020-2023  润新知