【问题标题】:Few Hive Interview Questions几个 Hive 面试问题
【发布时间】:2016-01-27 22:31:51
【问题描述】:

我最近在面试一家公司时遇到了一些问题。由于我是 Hadoop 的新手,谁能告诉我正确的答案?

问题:

  1. Hive 中“排序依据”和“分组依据”之间的区别。它们是如何工作的?
  2. 如果我们在 Hive 的任何 SQL 查询中使用“限制 1”,Reducer 是否工作。
  3. 如何优化 Hive 性能?
  4. “内表”和“外表”的区别
  5. Hive 和 SQL 的主要区别是什么

请给我一些有用的资源,以便我能以更好的方式学习。谢谢

【问题讨论】:

    标签: hadoop hive hiveql hadoop2 hadoop-streaming


    【解决方案1】:

    PFB 答案:

    1。 Hive 中“排序依据”和“分组依据”之间的区别。它们是如何工作的?

    回答。 SORT BY 对每个 reducer 的数据进行排序,它提供了 reducer 内行的排序。如果有多个 reducer,“排序依据”可能会给出部分排序的最终结果。 而 GROUP BY 按指定列聚合记录,允许您对非分组列(例如 SUM、COUNT、AVG 等)执行聚合函数。

    2。如果我们在 Hive 的任何 SQL 查询中使用“限制 1”,Reducer 是否工作。

    回答。我认为 Reducer 会起作用,因为根据 Hive 文档—— limit 表示要返回的行数。返回的行是随机选择的。以下查询从 t1 随机返回 5 行。

    SELECT * FROM t1 LIMIT 5
    

    要随机选择,必须有Reducer完整的结果输出。

    - 如何优化 Hive 性能?

    回答。这些链接应该回答这个问题

    - “内表”和“外表”的区别

    回答。 “内部表”也称为托管表,是由 Hive 管理的表。当您将 HDFS 中的数据指向此类表时,数据将移动到 Hive 默认位置 /ust/hive/warehouse/。并且,如果这样的内部表被删除,数据也会被删除。

    另一方面,“外部表”是用户管理的,加载后数据不会移动到配置单元默认目录,即可以指定任何自定义位置。连续删除此类表时,不会删除任何数据,仅删除表架构。

    - Hive 和 SQL 的主要区别是什么

    回答。 Hive 是 hadoop 之上的数据仓库层,它为用户提供类似 SQL 的行表接口,用于分析底层数据。为此,它采用了基于 SQL-92 标准的 HiveQL (HQL) 语言。

    SQL 是一种用于访问和操作数据库的标准 RDBMS 语言。

    【讨论】:

    【解决方案2】:

    我也是 Hadoop 和 Hive 的新手,所以我不能给你一个完整的答案。

    从我在“Hadoop The Definitive Guide”一书中读到的内容,Hive 和 SQL 之间的主要区别在于 Hive (HiveQL) 是在考虑 MapReduce 的情况下创建的。 Hive 的 SQL 方言应该可以让人们更轻松地与 Hadoop 交互,而无需了解太多关于 Java 的知识(无论如何,SQL 为数据专业人士所熟知)。

    随着时间的推移,Hive 越来越符合 SQL 标准。它将 MySQL 和 Oracle 的 SQL 方言与 SQL-92 混合在一起。

    主要区别

    根据我的阅读,最大的不同是 RDBMS 的模式通常是写时模式。这意味着当您将数据加载到数据库中时,数据需要符合架构。在 Hive 中,它使用 schema on read,因为它不会在加载数据时验证数据。

    Hadoop The Definitive Guide 获得的信息

    非常好的书,很好地概述了所涉及的所有技术。

    编辑:

    对于外部和内部表,请查看以下回复:

    Difference between Hive internal tables and external tables?

    有关排序依据和分组依据的信息

    排序方式:

    Hive 使用 SORT BY 中的列对行进行排序,然后再将行提供给 reducer。排序顺序将取决于列类型。如果列是数字类型,那么排序顺序也是数字顺序。如果该列是字符串类型,那么排序顺序将是字典顺序。

    排序依据和排序依据的区别

    (取自提供的链接,这可能有助于区分 Group By 和 Sort By)

    Hive 支持 SORT BY 对每个 reducer 的数据进行排序。 “order by”和“sort by”之间的区别在于前者保证输出中的总顺序,而后者只保证reducer中行的排序。如果有多个 reducer,“排序依据”可能会给出部分排序的最终结果。

    注意:对于单列 SORT BY 和 CLUSTER BY 之间的区别,可能会造成混淆。不同之处在于 CLUSTER BY 按字段分区,而 SORT BY 如果有多个 reducer 随机分区,以便在 reducer 之间均匀分布数据(和负载)。

    基本上每个reducer中的数据都会按照用户指定的顺序进行排序。

    分组方式:

    Group By 是使用聚合完成的。它与您通常在任何其他 SQL 方言中所做的几乎相同。

        INSERT OVERWRITE TABLE pv_gender_sum
        SELECT pv_users.gender, count (DISTINCT pv_users.userid)
        FROM pv_users
        GROUP BY pv_users.gender;
    

    此查询选择 pv_users.gender 并计算 users 表中不同的 user_id。为了按性别计算用户,您首先必须将所有具有特定性别的用户分组在一起。 (通过下面的链接从组中获取的查询)

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+GroupBy

    关于优化 Hive 性能的信息

    http://hortonworks.com/blog/5-ways-make-hive-queries-run-faster/

    优化联接

    https://www.facebook.com/notes/facebook-engineering/join-optimization-in-apache-hive/470667928919/

    一般 Hive 性能提示

    https://streever.atlassian.net/wiki/display/HADOOP/Hive+Performance+Tips

    一些额外的资源

    SQL 到 Hive 备忘单

    http://hortonworks.com/wp-content/uploads/downloads/2013/08/Hortonworks.CheatSheet.SQLtoHive.pdf

    Hive LIMIT 文档

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select#LanguageManualSelect-LIMITClause

    祝你面试顺利!

    【讨论】:

    • 感谢@k.Boy。但你能告诉我 2 个问题的答案吗.. 将不胜感激
    • 我不太确定 LIMIT 1 问题,但是我编辑了我的帖子并相信我触及了所有内容。
    【解决方案3】:

    从 Hive 0.10.0 开始,简单的 select 语句,例如 select column_name from table name LIMIT n,如果设置了任务对话 hive.fetch.task.conversion=more,则可以避免 map reduce

    【讨论】:

      【解决方案4】:

      1. Hive 中“排序依据”和“分组依据”之间的区别。它们是如何工作的?

      • SORT BY : 它在为 Map reduce 作业定义的每个 reducer 中对结果进行排序。输出不一定是有序的,但来自每个减速器的输出是有序的。检查下面的例子!我在 11 节点集群中运行它。

      • GROUP BY : 它有助于聚合数据。 sum() , count() , avg() , max() , min() , collect_list() , collect_set() 都使用 group by。这就像基于相同特征的结果。示例:有一个 state 列和 population 列,我们基于 states 进行聚合,那么 sum(population) 将有 29 个不同的值。

      2。如果我们在 Hive 的任何 SQL 查询中使用“限制 1”,Reducer 是否工作。

      • select * from db.table limit 1 : statement never include reducers ,你可以使用 explain 语句检查。

      • select * from db.table order by column : 使用 reducer 或在有聚合时使用。检查下面的截图。

      3。如何优化 Hive 性能?

      • 使用 Tez 会话

      • 使用分桶和分区

      • 使用 Orc 文件格式

      • 使用矢量化

      • 使用 CBO 4。 “内表”和“外表”的区别

      • 内部表:存储在配置单元中的元数据和数据。如果删除表,整个架构和数据将被自动删除。

      • 外部表:只有元数据由 hive 处理。数据由用户处理。如果删除表,只会删除模式,数据保持不变。外部表的创建需要在create语句中使用external关键字,还需要指定数据的存放位置。

      5. Hive 和 SQL 的主要区别是什么

      • Hive 是一种数据仓库工具,旨在处理 hadoop 上的结构化数据,而 SQL 用于处理 RDBMS 上的结构化数据。

      【讨论】:

        【解决方案5】:

        如果我们在 select 子句中使用 limit,Reducer 将不会运行。

        select * from table_name limit 5;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-30
          • 2015-01-03
          • 2010-10-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多