付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Hive 性能调校-提高 Hive 总体性能的若干技巧2012-12-20主要就如何提高 Hive 执行的总体性能进行了调研,下面以分条的形式列举出来。设置 hive.map.aggr=true,提高 HiveQL 聚合的执行性能。1.这个设置可以将顶层的聚合操作放在Map 阶段执行,从而减轻阶段数据传输和Reduce 阶段的执行时间,总体性能。缺点:该设置会消耗的内存。注:顶层的聚合操作(top-level aggregation operation),是指在 group by 语句之前执行的聚合操作。例如,hive SET hive.map.aggr=true;hive SELECT co
2、unt(*), avg(salary) FROM employees group by * having max()1显示数据时,使用“local mode”可避免启动 MapReduce,显著性能。2.当执行“select * from table”时,Hive 会简单地仅仅从表中数据并将格式化的数据输出到控制端,这个过程不会生成 MapReduce 程序。而对于其它类型的查询,比如指定字段或者包含表关联的查询等,Hive 会使用MapReduce 执行这些查询。若想避免这些查询的 MapReduce 执行,可以设置 hive.exec.mocal.auto=true; 这样的话,Hive
3、会尝试在本地执行相关查询并将数据显示出来。注:这种情况下,Hive 查询的数据可能不全,只是一个结点上的数据,可供测试查询使用。(陷阱)浮点数的比较hive SELECT name, salary, deductionsFederal TaxesFROM employees WHERE deductionsFederal Taxes 0.2;其中 deductionsFederal Taxes为 Double 类型数据。3.查出的数据实际上是=0.2 的。原因:IEEE 的浮点数表示,它影响几乎所有的程序!简单来说就是,对于 0.2 这个数值的在计算机中的 Float 表示为 0.200000
4、1,Double 值为0.200000000001,都比 0.2 略大。解决方法:使用cast 函数。WHERE deductionsFederal Taxes cast(0.2 AS FLOAT);Hive 中进行表的关联查询时,尽可能将较大的表放在Join 之后。4.Hive 在处理表的关联查询时,会默认对最后一执行 streaming 操作,也就是将其它的表缓存起来,将最后一与其它的表进行关联,这个操作只会读一遍这张最大的表,反之,该表会多次,特别是包含多时。另外,由于 Join 之前的表会默认缓存,如果大表放面的位置,也会造成内存的消耗。但可以通过指令改变这种默认行为:SELECT /
5、*+ STREAMTABLE(s) */ s.ymd, s.symbol, s.price_close, d.dividend FROM stocks s JOIN dividends d ON s.ymd = d.ymd AND s.symbol = d.symbol WHERE s.symbol = AAPL;STREAMTABLE 会告诉 Hive 的查询优化器将制定的表作为最大的表来处理。在 where 语句中添加分区过滤条件可加速查询的执行。5.避免积!6.SELECTS * FROM stocks JOIN dividends; /没有指定 ON 条件,Hive 会对两积连结!SE
6、LECT * FROM stocks JOIN dividends执行WHERE stock.symbol = dividends.symbol and stock.symbol=AAPL;/ 在 Hive 中,连结操作会在 where 条件之前执行,所以这条语句与上一条语句执行时间相当!SELECT * FROM stocks JOIN dividends ON stock.symbol = dividends.symbol;/这样才能真正执行 Inner Join 而不是积!ap 端连结7.Map-side JoSELECT /*+ MAPJOIN(d) */ s.ymd, s.symbo
7、l, s.price_close, d.dividendFROM stocks s JOIN dividends d ON s.ymd = d.ymd AND s.symbol = d.symbol WHERE s.symbol = AAPL;在 Hive v0.7 之前,MAPJOIN()会将指定的表,一般是较小的表,加载到内存中,这样整个连结过程会在 Map 段完成。这样可以避免产生冗余的中间数据(连结产生的中间表)同时也可以免除相应的 Reduce 操作,进而提高整体性能。在 Hive v0.7 之后,需要设置 hive.auto.convert.jorue,开启MapJoin 功能。注
8、:另外也可以进行 bucketMapJoin 的优化,具体理解,待调研。8.Order by vs. Sort by vs. Distribute By vs. Cluster By这四个语句都和排序相关,但底层的执行细节不同。Order By:会将所有的数据在一个 reducer 上执行,得到的结果是整体有序的。但是由于不能并发执行,所以效率比较低。Sort By:排序操作在多个 reducer 上执行,得到的结果是局部有序(一个 reducer 内)的,但是整体数据不一定是严格有序的。另外,这个语句还可能造成数据的和丢失。由于 MapReduce 是采用 Hash 的方式来组织数据的,所以
9、当使用 Sort By 时,一个 reducer的输出会覆盖另一个 reducer 的数据。Distribute By:为 Sort By 而生!它可以修正 Sort By 带来的作用,避免数据的覆盖和丢失。Distribute By 将保证具有相同的指定关键字的进入到同一个 reducer 进行处理,这样就可以避免 reducer 在输出数据时将不同 reducer 的数据的覆盖!SELECT s.ymd, s.symbol, s.price_close FROM stocks sDISTRIBUTE BY s.symbolSORT BYs.symbol ASC, s.ymd ASC;放到同
10、一个位置,从而造成Cluster By = Distribute By + Sort By!但是除了 Order By 之外产生的所有排序结果默认情况下(除非修改 mapred.reduce.tasks的值)都不能做到结果的整体有序。9.抽样查询对于大量的数据,有时会需要查看数据的状态,比如是否有,其中的某个字段是否有值,但是若对整查询可能会比较耗时,另外得出的结果也不具有随机性。Hive 支持抽样查询TableSle例一numbers,其中包含一个列 numberhive SELECT * from numbers TABLES24UCKET 3 OUT OF 10 ON rand() s;
11、rand()返回一个随机值,这里对应结果的条数。hive SELECT * from numbers TABLES2UCKET 3 OUT OF 10 ON number) s;如果不用 rand()而是特定的列名,那么在多次运行中,返回的结果是确定的。在 Bucket 语句中,分母(eg. 10)代表数据会被散列到的桶的数目,分子代表被选中的桶的。除了按桶抽样,也可以按块进行抽样:SELECT * FROM numbersflat TABLESLE(0.1 PERCENT) s;注:按块抽样的最小抽样单元是一个HDFS 的块,默认情况下,如果表的大小小于128MB,那么所有的列将会被抽出,无
12、论设置的百分比是多少!UNION ALL 同时返回多的查询结果10.SELECT log.ymd, log.level, log.messageFROM (SELECT l1.ymd, l1.level, l1.message, Log1 AS sourceFROM log1 l1 UNION ALLSELECT l2.ymd, l2.level, l2.message, Log2 AS sourceFROM log1 l2) logSORT BY log.ymd ASC;注:要求两个表查询结果的字段的个数和类型必须一致!(技巧)EXPLAIN/EXPLAIN EXTENDED 展开查询计划树
13、,可以作为优化查询的工具。Limit 优化 hive.limit.optimize.enable=true11.12.可以避免查询中对整的 query,它受一下两个条件的约束:hive.limit.row.max.size100000When trying a smaller subset of data for simple LIMIT,how much size we need to guarantee each row to haveeast.hive.limit.optimize.limit.file10When trying a smaller subset of data for
14、simple LIMIT,um number of files we can s本地模式local modele.13.对于输入数据比较多,但是每个文件又特别的小的情况下,这样可以避免调用 task 造成的开销:set oldjobtracker=$hiveconf:mapred.job.tracker; set mapred.job.tracker=local;set mapred.tmp.dir=/home/edward/tmp;SELECT * from people WHERE name=bob;set mapred.job.tracker=$oldjobtracker;并行执行 hi
15、ve.exec.parallel=trueHive 将一个 query 语句转换成多阶段任务来执行,每次执行一个阶段的任务。14.当被成的多个阶段之间不存在依赖的时候,可以让多个阶段的任务并行执行,这可以大大加快任务执行的速度,但同时也许需要的集群资源。Mapper 与 Reducer 数量的优化折衷:数量太大,会导致任务的启动、调度和运行过程的开销太大;数量太小,无法很好地利用集群的并发特性。Hive 会在接收到查询任务后,根据输入数据的大小评估所需要的 reducer 数量,但这个过程需要时间开销。默认的 hive.exec.reducers.bytes.per.reducer 是 1GB
16、,也可以改变这个值。如何自己评估输入数据的大小?edwardetl02 $ hadoop dfs -count /user/media6/fracture/ins/* | tail -4 1 8 2614608737 hdfs:/./user/media6/fracture/ins/hit_date=201201181 7 2742992546 hdfs:/./user/media6/fracture/ins/hit_date=201201191 17 2656878252 hdfs:/./user/media6/fracture/ins/hit_date=201201201 2 362657
17、644 hdfs:/./user/media6/fracture/ins/hit_date=2012012115.注:当在执行 Hadoop 任务时,特别是 hadoop-streaming,如果只有 mapper 而没有 reducer 的话,可以将 reducer 数量设为 0,这可以作为解决数据倾斜的法!JVM 复用 在一个 JVM 实例上运行多个 mapreduce 任务,减少创建jvm 实例的开销mapred.job.reuse.jvm.num.tasks10How many tasks to run per jvm. If set to -1, there is no limit.
18、 JVM Reuse | 13916.缺点:会造成潜在的集群资源的浪费。探测性执行(Speculative Execution)所谓探测性执行,是指 Hadoop 会启动同一个任务的多个副本在集群上执行,但它会丢弃该阶段的产生的多个副本的数据。17.这个阶段会消耗的集群资源,目的是为了探测执行较慢的 TaskTrackers,并将它们列整体工作流程的性能。入,进而mapred.map.tasks.speculative.executiontrueIf true, then multiple instanof some map tasks may be executed in parallel.mapred.reduce.tasks.speculative.executiontrueIf true, then multiple instanof some reduce tasks may be executed in parallel.虚拟列Hive 提供了三个虚拟列:INPUT FILE NAME, BLOCK OFFSET INSIDE FILE 和ROW OFFSET INSIDE BLOCK。但 ROW OFFSET INSIDE BLOCK 默认是不可用的,需要设置 hive.exec.rowoffset 为 true 才可以。可以用来排查有问题的输入数据。h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026银行招聘笔试题及答案
- 2026年注册测绘师测绘综合能力试题与答案
- 2026年智联的笔试题库及答案
- 2026年云南省临沧市高职单招职业适应性测试考试题库及答案
- 2026年投资管理专员笔试考试题库含答案
- 网约车运营平台车辆行驶故障救援预案
- 水资源调度管理中心建设工程水土保持方案报告
- 2026年律师执业人员面试考核试题库
- 2026年国家公务员录用考试金融管理财经类真题含答案解析
- 施工收尾清场预案
- 园区水电节能管理办法
- 职业危害因素培训课件
- 仓库物品报废情况说明-模板
- 金融机构合规管理办法解读
- 大提琴培训教学课程设计
- 【MOOC】电工电子学-浙江大学 中国大学慕课MOOC答案
- 保险基础知识简读本(2024版)
- 食品小作坊食品安全管理制度
- 2022年江苏省常州市强基计划选拔数学试卷
- 2024年重庆市初中学业水平考试生物试卷试题真题(含答案详解)
- 电力安全工作规程题库-信息部分
评论
0/150
提交评论