数据与未来

hadoop 参数说明及配置

2018-01-23  本文已影响49人  Mervyn_2014

core-site.xml

配置项 缺省值 配置说明
hadoop.tmp.dir /tmp/hadoop-${user.name} 只可以设置一个值;建议设置到一个足够空间的地方,而不是默认的/tmp下,服务端参数,修改需重启
fs.defaultFS file:/// hdfs://node1:9000 默认文件系统的名称。URI形式。uri's的scheme需要由(fs.SCHEME.impl)指定文件系统实现类。 uri's的authority部分用来指定host, port等。默认是本地文件系统。
io.file.buffer.size 4096 131072 在序列文件中使用的读/写缓冲区的大小。单位kb

hdfs-site.xml

配置项 缺省值 配置说明
dfs.blocksize 134217728 块大小的设置。以字节为新文件的默认块大小。您可以使用以下后缀(大小写不敏感):k、m、g、t、p、e来指定大小(比如128k、512m、1g等等),或者以字节为单位提供完整的大小(如134217728 -> 128 MB)。
dfs.namenode.secondary.http-address 0.0.0.0:50090 node1:50090 SecondaryNameNode地址和端口
dfs.replication 3 数据块副本数。当创建文件时,可以指定复制的实际数量。如果在创建时没有指定复制,则使用缺省值。
dfs.namenode.name.dir file://${hadoop.tmp.dir}/dfs/name file:/opt/data/hadoop/hdfs/name 本地磁盘目录,NN存储fsimage文件的地方。可以是按逗号分隔的目录列表,fsimage文件会存储在全部目录,冗余安全。这里多个目录设定,最好在多个磁盘,另外,如果其中一个磁盘故障,不会导致系统故障,会跳过坏磁盘。由于使用了HA,建议仅设置一个。如果特别在意安全,可以设置2个
dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data 本地磁盘目录,HDFS数据应该存储Block的地方。可以是逗号分隔的目录列表(典型的,每个目录在不同的磁盘)。这些目录被轮流使用,一个块存储在这个目录,下一个块存储在下一个目录,依次循环。每个块在同一个机器上仅存储一份。不存在的目录被忽略。必须创建文件夹,否则被视为不存在。

yarn-site.xml

配置项 缺省值 配置说明
yarn.resourcemanager.hostname 0.0.0.0 RM的主机名 配置:master或node1 xxx.xxx.xxx.xxx
yarn.nodemanager.aux-services 一个逗号分隔的服务列表,服务名称应该只包含A-za-z0-9_,不能从数字开始,请配置为:mapreduce.shuffle,在Yarn上开启MR的必须项
yarn.nodemanager.vmem-check-enabled true 是否对容器执行虚拟内存限制。
yarn.resourcemanager.address ${yarn.resourcemanager.hostname}:8032 在RM中应用程序管理器接口的地址。
yarn.resourcemanager.scheduler.address ${yarn.resourcemanager.hostname}:8030 调度程序的接口地址
yarn.resourcemanager.resource-tracker.address ${yarn.resourcemanager.hostname}:8031
yarn.resourcemanager.admin.address ${yarn.resourcemanager.hostname}:8033 RM管理接口的地址
yarn.resourcemanager.webapp.address ${yarn.resourcemanager.hostname}:8088 RM的网页接口地址:端口
yarn.nodemanager.resource.cpu-vcores 8 容器虚拟CPU核数,cdh默认8,但CM会自动检测内核数并修改。在为容器分配资源时,RM调度程序使用它。这并不用于限制纱线容器使用的物理内核的数量。
yarn.nodemanager.resource.memory-mb 8192 物理内存的大小,在MB中,可以分配给容器。NM上可以用于container申请的物理内存大小,MB。
yarn.nodemanager.pmem-check-enabled true 是否对容器执行物理限制
yarn.nodemanager.vmem-check-enabled true 是否对容器进行虚拟内存限制
yarn.nodemanager.vmem-pmem-ratio 2.1 在设置container的内存限制时,虚拟内存到物理内存的比率。Container申请的内存如果超过此物理内存,可以以此比率获取虚拟内存用于满足需求。虚拟地址的是物理地址的倍数上限。建议设置的大点,例如:4.1,8.1,此虚拟内存并非内存,而是占用的虚拟地址。
yarn.scheduler.maximum-allocation-mb 8192 每个container向RM申请内存的最大大小,兆字节。申请值大于此值,将最多得到此值内存。
yarn.scheduler.minimum-allocation-mb 1024 每个container向RM申请内存的最小大小。兆字节。内存请求小于此值,实际申请到的是此值大小。默认值偏大
yarn.nodemanager.local-dirs ${hadoop.tmp.dir}/nm-local-dir 本地文件存储目录,列表。一个应用的本地文件目录定位方式:${yarn.nodemanager.local-dirs}/usercache/${user}/appcache/application_${appid}。每个container的工作目录,是此目录的子目录,目录名是container_${contid}。 非常重要,建议配置多个磁盘,平衡IO。
yarn.nodemanager.log-dirs ${yarn.log.dir}/userlogs 存储container日志的地方。一个应用的本地日志目录定位是:${yarn.nodemanager.log-dirs}/application_${appid}。每个container的日志目录在此目录下,名字是container_{$contid}。每个container目录中包含stderr, stdin, and syslog等container产生的文件 。非常重要,建议配置多个磁盘,平衡IO。

mapred-site.xml

配置项 缺省值 配置说明
mapreduce.framework.name local 执行MapReduce作业的运行时框架.local,classic ,yarn
mapreduce.jobhistory.address 0.0.0.0:10020 MapReduce任务历史服务器IPC主机:端口
mapreduce.jobhistory.webapp.address 0.0.0.0:19888 MapReduce任务历史服务器Web UI主机:端口
mapreduce.job.reduces 1 设置reduce的数量。一般来说在job里面都会通过conf来设置reduce的数量,不采用这个参数。至于reduce的数量,可以根据自己的reduce业务逻辑复杂度以及输出的数据量来调整。
mapred.child.java.opts -Xmx200m 这个参数是配置每个map或reduce使用的内存数量。默认的是200M。对于这个参数,我个人认为,如果内存是8G,CPU有8个核,那么就设置成1G就可以了。实际上,在map和reduce的过程中对内存的消耗并不大,但是如果配置的太小,则有可能出现”无可分配内存”的错误。所以,对于这个配置我总结了一个简单的公式:map/reduce的并发数量(总和不大于CPU核数)×mapred.child.java.opts < 该节点机器的总内存。当然也可以等于,不过有点风险而已。
mapreduce.reduce.shuffle.parallelcopies 5 reuduce shuffle阶段并行传输数据的数量。集群大可以增大。
mapreduce.map.output.compress false map输出是否进行压缩,如果压缩就会多耗cpu,但是减少传输时间,如果不压缩,就需要较多的传输带宽。配合 mapreduce.map.output.compress.codec使用,默认是 org.apache.hadoop.io.compress.DefaultCodec,可以根据需要设定数据压缩方式。
mapreduce.task.io.sort.mb 100 Map Task 环形缓冲区所占内存大小。
mapreduce.map.sort.spill.percent 0.8 序列化缓冲区中的软限制。一旦到达,一个线程将开始在后台将内容泄漏到磁盘。注意,当泄漏已经在进行时,如果这个阈值超过了这个阈值,那么收集就不会阻塞,因此,当它被设置为小于5时,泄漏可能大于这个阈值。

mapruduce经常调整的参数有:

mapred.reduce.tasks:手动设置reduce个数
mapreduce.map.output.compress:map输出结果是否压缩
mapreduce.map.output.compress.codec
mapreduce.output.fileoutputformat.compress:job输出结果是否压缩
mapreduce.output.fileoutputformat.compress.type
mapreduce.output.fileoutputformat.compress.codec

提交作业的一些配置属性
常见配置:
(1)mapred.map.tasks:map task数目
(2)mapred.reduce.tasks:reduce task数目
(3)stream.num.map.output.key.fields:指定map task输出记录中key所占的域数目
(4)num.key.fields.for.partition指定对key分出来的前几部分做partition而不是整个
key

对单个MapReduce
– Map个数最好为集群slot的倍数
– Reduce个数最好为集群slot的个数、倍数

Hadoop中通常每个tasktracker会包含多个slots,Job的一个task均对应于tasktracker中的一个slot。系统中map slots总数与reducer slots总数的计算公式如下:
Map slots总数=集群节点数×mapred.tasktracker.map.tasks.maximum

Reducer slots总数=集群节点数×mapred.tasktracker.reduce.tasks.maximum

上一篇下一篇

猜你喜欢

热点阅读