flume jvm调优_大数据基础---大数据调优汇总

前言

不进行优化的代码就是耍流氓。

总体来说大数据优化主要分为三点,一是充分利用CPU,二是节省内存,三是减少网络传输。

一、Hive/MapReduce调优

1.1 本地模式

Hive默认采用集群模式进行计算,如果对于小数据量,可以设置为单台机器进行计算,这样可以大大缩减查询触发任务时间。

用户可以通过设置hive.exec.mode.local.auto 的值为true,来让Hive在适当的时候自动启动这个优化。

set hive.exec.mode.local.auto=true; //开启本地 mr

//设置 local mr 的最大输入数据量,当输入数据量小于这个值时采用 local mr 的方式,

默认为 134217728,即 128M

set hive.exec.mode.local.auto.inputbytes.max=50000000;

//设置 local mr 的最大输入文件个数,当输入文件个数小于这个值时采用 local mr 的方

式,默认为 4

set hive.exec.mode.local.auto.input.files.max=10;

1.2 null值过滤OR随机分配null值

null值过滤

对于key值倾斜,有的时候是无效的null导致的,这个时候可以考虑过滤掉。

hive (default)> insert overwrite table jointable

select n.* from (select * from nullidtable where id is not null ) n left join ori o on n.id =

o.id;

null值随机分配

如果null不是异常数据,那么可以采用随机分配将null值分到不同分区,解决数据倾斜。

insert overwrite table jointable

select n.* from nullidtable n full join ori o on

case when n.id is null then concat('hive', rand()) else n.id end = o.id;

1.3 Count(distinct)去重统计优化

对于大数据量去重,可以采用分组的方式进行优化。

hive (default)> select count(id) from (select id from bigtable group by id) a;

1.4 行列过滤

对关联表进行过滤时,可以考虑在关联时就进行过滤,提高查询时间。

hive (default)> select b.id from bigtable b

join (select id from ori where id <= 10 ) o on b.id = o.id;

1.5 数据倾斜

小文件合并

set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

复杂文件增加Map数

增加 map 的方法为:根据computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M 公式,调整 maxSize 最大值。让 maxSize 最大值低于 blocksize 就可以增加 map 的个数。

设置最大切片值为100个字节

hive (default)> set mapreduce.input.fileinputformat.split.maxsize=100;

hive (default)> select count(*) from emp;

合理设置Reduce数

调整 reduce 个数方法一

(1)每个 Reduce 处理的数据量默认是 256MB

hive.exec.reducers.bytes.per.reducer=256000000

(2)每个任务最大的 reduce 数,默认为 1009

hive.exec.reducers.max=1009

(3)计算 reducer 数的公式

调整 reduce 个数方法二

在 hadoop 的 mapred-default.xml 文件中修改,设置每个 job 的 Reduce 个数

set mapreduce.job.reduces = 15;

1.6 并行执行

在共享集群中设置并发执行可以提高运行速度。

set hive.exec.parallel=true; //打开任务并行执行

set hive.exec.parallel.thread.number=16; //同一个 sql 允许最大并行度,默认为 8。

当然,得是在系统资源比较空闲的时候才有优势,否则,没资源,并行也起不来。

1.7 严格模式

Hive 提供了一个严格模式,可以防止用户执行那些可能意向不到的不好的影响的查询。通过设置属性 hive.mapred.mode 值为默认是非严格模式 nonstrict 。开启严格模式需要修改 hive.mapred.mode 值为 strict,开启严格模式可以禁止 3 种类型的查询

1).对于分区表,除非 where 语句中含有分区字段过滤条件来限制范围,否则不允许执行。

2).对于使用了 order by 语句的查询,要求必须使用 limit 语句。

3).限制笛卡尔积的查询。对关系型数据库非常了解的用户可能期望在执行 JOIN 查询的时候不使用 ON 语句而是使用 where 语句,这样关系数据库的执行优化器就可以高效地将WHERE 语句转化成那个 ON 语句。

1.8 JVM重用

在小文件场景或者task特别多的情况下,执行时间都很短。JVM重用可以使用同一个JVM在同一个Job里面重复使用N次。N值在mapred-site.xml文件中进行配置。

mapreduce.job.jvm.num.tasks

10

How many tasks to run per jvm. If set to -1, there is

no limit.

PS:value值设置-1表示重用次数不受限制。

缺点:JVM重用会一直占用使用到的task插槽,以便进行重用,如果遇到了某个job里面的reduce task分配不均匀,导致出现某几个task占用task时间很长,其它task空闲也没法被其它job使用,只有所有的task都执行完后才会释放。

1.9 推测执行

对于某些耗时的任务,可以启动推测执行,这样就会把“拖后腿”的任务找出来,然后启动个备份任务执行相同的数据。最后选出执行最快的为最终结果。

设置开启推测执行参数:Hadoop 的 mapred-site.xml 文件中进行配置:

mapreduce.map.speculative

true

If true, then multiple instances of some map tasks

may be executed in parallel.

mapreduce.reduce.speculative

true

If true, then multiple instances of some reduce tasks

may be executed in parallel.

不过 hive 本身也提供了配置项来控制 reduce-side 的推测执行:

hive.mapred.reduce.tasks.speculative.execution

true

Whether speculative execution for reducers should be turned on.

PS:对于时差要求很苛刻的建议关闭掉推测执行。对于执行很长的任务也不建议开启,因为会浪费很大资源。

1.10 HDFS小文件解决方案

1)Hadoop Archive:

是一个高效地将小文件放入 HDFS 块中的文件存档工具,它能够将多个小文件打包成

一个 HAR 文件,这样就减少了 namenode 的内存使用。

2)Sequence file:

sequence file 由一系列的二进制 key/value 组成,如果 key 为文件名,value 为文件内容,

则可以将大批小文件合并成一个大文件。

3)CombineFileInputFormat:

CombineFileInputFormat 是一种新的 inputformat,用于将多个文件合并成一个单独的

split,另外,它会考虑数据的存储位置。

二、Spark调优

2.1 性能监控方式

Spark Web UI

通过 http://master:4040我们可以获得运行中的程序信息。

(1)stages和tasks调度情况;

(2)RDD大小和内存使用情况;

(3)系统环境信息;

(4)正在执行的executor信息;

设置历史服务器记录历史信息:

(1)在$SPARK_HOME/conf/spark-env.sh中设置:

export SPARK_HISTORY_OPTS="-Dspark.history.retainedApplications=50 Dspark.history.fs.logDirectory=hdfs://master01:9000/directory"

说明:spark.history.retainedApplica-tions仅显示最近50个应用。

spark.history.fs.logDirectory:Spark History Server页面只显示该路径下的信息。

(2)$SPARK_HOME/conf/spark-defaults.conf

spark.eventLog.enabled true

spark.eventLog.dir hdfs://hadoop000:8020/directory #应用在运行过程中所有的信息均记录在该属性指定的路径下

spark.eventLog.compress true

(3)HistoryServer 启动

$SPARK_HOMR/bin/start-histrory-server.sh

(4)HistoryServer 停止<

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值