Hadoop优化参数

HDFS参数调优

core-site.xml

     hadoop.tmp.dir   默认值: /tmp
     说明: 尽量手动配置这个选项,否则的话都默认存在了里系统的默认临时文件/tmp里。并且手动配置的时候,如果服务器是多磁盘的,每个磁盘都设置一个临时文件目录,这样便于mapreduce或者hdfs等使用的时候提高磁盘IO效率。

     fs.trash.interval  默认值: 0
     说明: 这个是开启hdfs文件删除自动转移到垃圾箱的选项,值为垃圾箱文件清除时间(分钟)。一般开启这个会比较好,以防错误删除重要文件。最好使用一天(
1440)

      io.file.buffer.size  默认值:4096   ,4kb
      说明:SequenceFiles在读写中可以使用的缓存大小,可减少 I/O 次数。在大型的 Hadoop集群,建议可设定为 65536(64kb) 到 131072(128kb)。

hdfs-site.xml

     dfs.blocksize   默认值:134217728
     说明: 这个就是hdfs里一个文件块的大小了,CDH5中默认128M。太大的话会有较少map同时计算,太小的话也浪费可用map个数资源,而且文件太小namenode就浪费内存多。根据需要进行设置。
    
      dfs.namenode.handler.count   默认值:10
     说明:设定 namenode server threads 的数量,这些 threads 會用 RPC 跟其他的 datanodes 沟通。当 datanodes 数量太多时会发現很容易出現 RPC timeout,解決方法是提升网络速度或提高这个值,但要注意的是 thread 数量多也表示 namenode 消耗的内存也随着增加


MapReduce参数调优

mapred-default.xml


    mapred.child.Java.opts  默认值:-Xmx200m
    说明:JVM启动的子线程可以使用的最大内存。建议值-XX:-UseGCOverheadLimit -Xms512m -Xmx2048m -verbose:gc -Xloggc:/tmp/@taskid@.gc
    
    mapreduce.jobtracker.handler.count  默认值:10
    说明:JobTracker可以启动的线程数,一般为tasktracker节点的4%。
    
    mapreduce.tasktracker.http.threads   默认值:40
    说明:map和reduce是通过http进行数据传输的,这个是设置传输的并行线程数。
    
    mapreduce.map.output.compress     默认值:false
    说明: map输出是否进行压缩,如果压缩就会多耗cpu,但是减少传输时间,如果不压缩,就需要较多的传输带宽。配合 mapreduce.map.output.compress.codec使用,默认是 org.apache.hadoop.io.compress.DefaultCodec,可以根据需要设定数据压缩方式(org.apache.hadoop.io.compress.SnappyCodec)。

     mapreduce.task.io.sort.mb  默认值:100
       说明: Map Task缓冲区所占内存大小。这个参数控制 map 端 memory buffer 大小,越大每次 map 要 spill 的 file 就越大,总 spill file 个数越少;
所以如果你的 Hadoop Job map output 很多,适当增加这个参数有助于 performance;

    mapreduce.map.sort.spill.percent  这个参数控制 map memory buffer 到达多少比例时开始 spill. 我们知道 spill 是写 IO 操作,所以需要时间。如果 percentage 太高,有可能当 spill 还没有完成时,map output 已经把 memory buffer 填满,这样影响 performance;同样,太低会造成太多 spill fie;(默认值 0.80)   
     
mapreduce.reduce.shuffle.merge.percent   默认值: 0.66
 说明:reduce归并接收map的输出数据可占用的内存配置百分比。类似mapreduce.reduce.shuffle.input.buffer.percent属性。如果reduce占用内存不是特别大,可以将参数调整至0.9

    mapreduce.task.io.sort.factor  默认值:10
    说明:Reduce Task中合并小文件时,一次合并的文件数据,每次合并的时候选择最小的前10进行合并。

   mapreduce.reduce.shuffle.parallelcopies  默认值:5
    说明:reuduce shuffle阶段并行传输数据的线程数。Fetcher线程数,这里改为10。集群大可以增大。


   mapreduce.reduce.shuffle.memory.limit.percent  默认值: 0.25
   说明:一个单一的shuffle的最大内存使用限制。

   mapreduce.job.reduces  默认值:1
    说明:默认启动的reduce数。通过该参数可以手动修改reduce的个数。

   mapred.job.reuse.jvm.num.tasks(mapreduce.job.jvm.numtasks)  默认值: 1
    说明:一个jvm可连续启动多个同类型任务,默认值1,若为-1表示不受限制。

    推测执行参数优化

          mapreduce.map.speculative如果为true则Map Task可以推测执行,即一个Map Task可以启动Speculative Task运行并行执行,该Speculative Task与原始Task同时处理同一份数据,谁先处理完,则将谁的结果作为最终结果。默认为true。对于生产环境,最好关闭map task推测执行。

         mapreduce.reduce.speculative同上,默认值为true。对于生产环境最好关闭reduce task推测执行。

        mapreduce任务数据压缩配置参数

        mapreduce.job.reduces:手动设置reduce个数。

        mapreduce.map.output.compress:map输出结果是否压缩。

        mapreduce.map.output.compress.codec:压缩格式。

        mapreduce.output.fileoutputformat.compress: job输出结果是否压缩。

        mapreduce.output.fileoutputformat.compress.type: 默认RECORD。

       mapreduce.output.fileoutputformat.compress.codec: 压缩格式。

hadoop压缩

https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-compression-analysis/

调优原则

      一般的原则是给shuffle分配尽可能多的内存,但前提是要保证Map、Reduce任务有足够的内存
     对于Map,主要就是避免把文件写入磁盘,例如使用Combiner,增大io.sort.mb的值

     对于Reduce,主要是把Map的结果尽可能地保存到内存中,同样也是要避免把中间结果写入磁盘。默认情况下,所有的内存都是分配给Reduce方法的,如果Reduce方法不怎消耗内存,可以mapreduce.reduce.merge.inmem.threshold设置成0,mapreduce.reduce.shuffle.input.buffer.percent设成1.0在任务监控中可通过Spilled records counter来监控写入磁盘的数,但这个值是包括map和reduce的对于IO方面,可以Map的结果可以使用压缩,同时增大buffer size(io.file.buffer.size,默认4kb)

 

MR任务指定队列    

作业提交到的队列:mapreduce.job.queuename

作业优先级:mapreduce.job.priority

优先级默认有5个:LOW  VERY_LOW  NORMAL(默认) HIGH VERY_HIGH

1、静态设置

1.1 Hive版本

SET mapreduce.job.queuename=root.etl.distcp;

SET mapreduce.job.priority=HIGH;

1.2 MapReduce版本

hadoop jar app.jar -Dmapreduce.job.queuename=root.etl.distcp  -Dmapreduce.job.priority=HIGH

2、动态调整

如果是已经在运行中的任务,可以动态调整任务所属队列及其优先级。

2.1 调整优先级

hadoop1.0及以下版本:

        hadoop job -set-priority  job_201707060942_6121418  VERY_HIGH 
hadoop2.0及以上版本:(未证实是否可用)

        yarn application -appId application_1478676388082_963529 -updatePriority VERY_HIGH 

2.2 动态调整队列 

hadoop2.0及以上版本可以通过下面命令 

       yarn application -movetoqueue appID -queue targetQueueName
       yarn application  -movetoqueue  application_1478676388082_963529  -queue  root.etl 
其中application_1478676388082_963529为yarn applition id,queue后跟的是需要move到的队列。

 

Hadoop组件默认端口

这里包含我们使用到的组件:HDFS, YARN, HBase, Hive, ZooKeeper:

组件

节点

默认端口

配置

用途说明

HDFS

DataNode

50010

dfs.datanode.address

datanode服务端口,用于数据传输

HDFS

DataNode

50075

dfs.datanode.http.address

http服务的端口

HDFS

DataNode

50475

dfs.datanode.https.address

https服务的端口

HDFS

DataNode

50020

dfs.datanode.ipc.address

ipc服务的端口

HDFS

NameNode

50070

dfs.namenode.http-address

http服务的端口

HDFS

NameNode

50470

dfs.namenode.https-address

https服务的端口

HDFS

NameNode

8020

fs.defaultFS

接收Client连接的RPC端口,用于获取文件系统metadata信息。

HDFS

journalnode

8485

dfs.journalnode.rpc-address

RPC服务

HDFS

journalnode

8480

dfs.journalnode.http-address

HTTP服务

HDFS

ZKFC

8019

dfs.ha.zkfc.port

ZooKeeper FailoverController,用于NN HA

YARN

ResourceManager

8032

yarn.resourcemanager.address

RM的applications manager(ASM)端口

YARN

ResourceManager

8030

yarn.resourcemanager.scheduler.address

scheduler组件的IPC端口

YARN

ResourceManager

8031

yarn.resourcemanager.resource-tracker.address

IPC

YARN

ResourceManager

8033

yarn.resourcemanager.admin.address

IPC

YARN

ResourceManager

8088

yarn.resourcemanager.webapp.address

http服务端口(用于查看YRAN任务)

YARN

NodeManager

8040

yarn.nodemanager.localizer.address

localizer IPC

YARN

NodeManager

8042

yarn.nodemanager.webapp.address

http服务端口

YARN

NodeManager

8041

yarn.nodemanager.address

NM中container manager的端口

YARN

JobHistory Server

10020

mapreduce.jobhistory.address

IPC

YARN

JobHistory Server

19888

mapreduce.jobhistory.webapp.address

http服务端口

HBase

Master

60000

hbase.master.port

IPC

HBase

Master

60010

hbase.master.info.port

http服务端口

HBase

RegionServer

60020

hbase.regionserver.port

IPC

HBase

RegionServer

60030

hbase.regionserver.info.port

http服务端口

HBase

HQuorumPeer

2181

hbase.zookeeper.property.clientPort

HBase-managed ZK mode,使用独立的ZooKeeper集群则不会启用该端口。

HBase

HQuorumPeer

2888

hbase.zookeeper.peerport

HBase-managed ZK mode,使用独立的ZooKeeper集群则不会启用该端口。

HBase

HQuorumPeer

3888

hbase.zookeeper.leaderport

HBase-managed ZK mode,使用独立的ZooKeeper集群则不会启用该端口。

Hive

Metastore

9083

/etc/default/hive-metastore中

export PORT=<port>来更新默认端口

 

Hive

HiveServer

10000

/etc/hive/conf/hive-env.sh中

export HIVE_SERVER2_THRIFT_PORT=<port>来更新默认端口

 

ZooKeeper

Server

2181

/etc/zookeeper/conf/zoo.cfg中clientPort=<port>

对客户端提供服务的端口

ZooKeeper

Server

2888

/etc/zookeeper/conf/zoo.cfg中

server.x=[hostname]:nnnnn[:nnnnn]

follower用来连接到leader,只在leader上监听该端口。

ZooKeeper

Server

3888

/etc/zookeeper/conf/zoo.cfg中

server.x=[hostname]:nnnnn[:nnnnn]

用于leader选举的。只在electionAlg是1,2或3(默认)时需要。

转载于:https://my.oschina.net/manmao/blog/1551042

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值