hive 优化

原文地址

    Apache Hive是一个类似SQL的软件,与Hadoop一起使用,使用户能够快速高效地使用自己的语言HiveQL执行类似SQL的查询。它还为用户提供了传统SQL结构所不具备的其他查询和分析功能。
    使用Apache Hive,用户可以根据个人需求和偏好使用HiveQL或传统的Mapreduce系统。Hive特别适用于分析大型数据集(PB),还包括各种存储选项。
    Hive充满了独特的工具,允许用户快速有效地执行数据查询和分析。为了充分利用所有这些工具,用户必须使用Hive实施的最佳实践。如果您想知道如何扩展Apache Hive,这里有10种方法可以充分利用Hive性能。

  1. 分区表
    Hive分区是提高较大表的查询性能的有效方法推文。分区允许您将数据存储在表位置下的单独子目录中。它极大地帮助了在分区键上查询的查询。虽然分区键的选择始终是一个敏感的决定,但它应该始终是一个低基数属性,例如,如果您的数据与时间维度相关联,那么date可能是一个好的分区键。同样,如果数据与位置(如国家或州)相关联,则最好使用国家/州等分层分区。

  2. 使数据去标准化
    规范化是一个标准流程,用于使用某些规则对数据表建模,以处理数据和异常的冗余。简单来说,如果规范化数据集,最终会创建多个关系表,这些表可以在运行时连接以生成结果。连接是昂贵且难以执行的操作,并且是性能问题的常见原因之一推文。因此,避免高度规范化的表结构是一个好主意,因为它们需要连接查询来获得所需的指标。

  3. Compress map/reduce output
    压缩技术显着减少了中间数据量,从而减少了映射器和缩减器之间的数据传输量。所有这些通常都发生在网络上。压缩可以单独应用于mapper和reducer输出。请记住,gzip压缩文件不可拆分。这意味着应该谨慎应用。压缩文件大小不应大于几百兆字节推文。否则可能导致工作失衡。压缩编解码器的其他选项可能是snappy,lzo,bzip等。

对于mapper输出压缩,将mapred.compress.map.output设置为true
对于job输出压缩,将mapred.output.compress设置为true

有关更多功能,请查看Hive Cheat Sheet

  1. map join
    如果连接另一侧的表足够小以适应内存,则映射连接非常有效推文。Hive支持一个参数hive.auto.convert.join,当它设置为“true”时,Hive会尝试自动映射连接。使用此参数时,请确保在Hive环境中启用了自动转换。
  1. Bucketing
    如果bucket key 和 join keys是公共的,则Bucketing改进了连接性能。推特上在Hive中设置根据bucket键上的散列结果将数据分布在不同的bucket中。如果进程在相同的键(列)上发生,它还可以减少连接过程中的I/O扫描。
    另外,确保每次在将数据写入bucketed表之前设置bucketing标志(set hive. enforcement .bucketing=true;),这一点很重要。为了在连接操作中利用buckemapjoin操作,我们应该设置hive.optimize.bucketmapjoin=true。这个设置提示Hive在map stage join期间执行bucket level join。它还减少了寻找特定密钥的扫描周期,因为套筒确保了密钥存在于特定的桶中。

  2. 输入格式的选择
    输入格式在Hive性能中起着关键作用。例如,对于数据量非常高的大型生产系统,文本类型的输入格式JSON不是一个好的选择。这些类型的可读格式实际上占用了很多空间,并且有一些解析开销(比如 JSON解析)。为了解决这些问题,Hive提供了诸如RCFile、ORC等列式存储格式。列存储格式允许您通过单独访问每一列来减少分析查询中的读操作。还有一些其他的二进制格式,如Avro、sequence files、Thrift和ProtoBuf,这些在各种用例中也很有用。

  3. 并行执行
    Hadoop可以并行执行MapReduce任务,而在Hive上执行的几个查询会自动使用这种并行性。然而,单个复杂的Hive查询通常被转换为许多MapReduce任务,这些任务在默认顺序下执行。但是,查询的一些MapReduce阶段通常不是相互依赖的,可以并行执行。然后,它们可以利用集群上的空闲容量,提高集群利用率,同时减少整个查询执行时间。在Hive中改变这种行为的配置仅仅是切换一个单独的标志设置Hive .exec.parallel=true。

  4. 向量化
    向量化允许Hive处理一批行,而不是一次处理一行。每个批处理由列向量组成,列向量通常是原始类型的数组。对整个列向量执行操作,从而改进了指令管道和缓存的使用。要启用向量化,请设置此配置参数set hivee .vectorized.execution.enabled=true。

  5. 单元测试
    简单来说,单元测试可以确定代码中最小的可测试部分是否与您期望的完全一致。单元测试提供了一些好处,即尽早检测问题,更容易更改和重构代码,作为一种解释代码如何工作的文档形式,仅举几例。
    在Hive中,您可以对UDF,SerDes,流式脚本,Hive查询等进行单元测试。在很大程度上,可以通过运行快速本地单元测试来验证整个HiveQL查询的正确性,而无需触及Hadoop集群。因为在本地模式下执行HiveQL查询需要几秒钟,相比之下,如果它在Hadoop模式下运行,则分钟,小时或天数肯定会节省大量的开发时间。
    有几种工具可以帮助您测试Hive查询。其中一些你可能想看看HiveRunnerHive_testBeetest

  6. 抽样
    采样允许用户获取数据集的子集并对其进行分析,而无需分析整个数据集。如果使用代表性样本,则查询可以返回有意义的结果,并且可以更快地完成并消耗更少的计算资源。
    Hive提供了一个内置的TABLESAMPLE子句,允许您对表进行采样。TABLESAMPLE可以在不同的粒度级别进行采样 - 它只能返回桶的子集(桶采样)或HDFS块(块采样),或者只返回每个输入拆分的前N个记录。或者,您可以实现自己的UDF,根据您的采样算法过滤掉记录。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容