Hadoop配置参数建议.doc_第1页
Hadoop配置参数建议.doc_第2页
Hadoop配置参数建议.doc_第3页
Hadoop配置参数建议.doc_第4页
Hadoop配置参数建议.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hadoop配置参数建议流量三期程序和Hive脚本需要运行在Hadoop集群上,本文档用于对Hadoop的参数提出建议。如果Hadoop集群是我们自己管理的,可以参考文档里建议的参数进行配置;如果Hadoop集群不由我们管理,我们只是集群资源的用户,可以通过给流量三期Job或者Hive脚本指定Hadoop参数来调整程序的运行方式。需要注意的是,通过编辑配置文件来设置Hadoop参数的方式,只适用于独立安装的Hadoop2.X、CDH4.X和CDH5.X,不适用于通过Athena大数据管理平台安装的CDH,因为Athena要求必须使用Web界面修改Hadoop的配置,不允许直接编辑Hadoop的配置文件。Hadoop的参数有数百个,其中绝大多数都应该使用默认值,本文档只对可能需要修改的参数进行说明。对于文档没有列出的参数,如果没有特殊需要,不建议修改,避免出现难以定位的问题。Hadoop参数可以分成三类,分别是Linux环境变量、集群配置变量和作业配置变量,下面对各类变量分别说明。一、 Linux环境变量Linux环境变量用来配置各个Hadoop守护进程的行为,包括Yarn的ResourceManager进程、Yarn的NodeManager进程、HDFS的NameNode进程、HDFS的Secondary NameNode进程、HDFS的DataNode进程和Hadoop Job History Server进程等。Hadoop在启动各个守护进程时会通过环境变量的值来确定进程的行为,所以环境变量一般在启动Hadoop前设置才有意义。设置方式是在Hadoop启动或者重启前,编辑Hadoop配置文件目录下的hadoop-env.sh、mapred-env.sh和yarn-env.sh文件。这三个文件是shell脚本,并且mapred-env.sh和yarn-env.sh的优先级高于hadoop-env.sh,也就是说如果在mapred-env.sh和hadoop-env.sh中设置了同一个环境变量,Hadoop会使用mapred-env.sh中的变量值。下面是Hadoop比较重要的环境变量:参数名文件名默认值说明JAVA_HOMEhadoop-env.sh无用于确定Hadoop使用的JDK,需要正确设置,否则无法启动Hadoop。HADOOP_LOG_DIRhadoop-env.sh$HADOOP_HOME/logs守护进程的日志目录,默认值是$HADOOP_HOME/logs(HADOOP_HOME是Hadoop的安装目录)。HADOOP_NAMENODE_OPTShadoop-env.sh无HDFS的NameNode的Java虚拟机选项,默认为空。对于规模较大的集群(二十个节点以上),可以通过这个选项增大NameNode进程的堆内存(例如-Xmx2048M)。在上述环境变量中,如果没有特殊情况(例如需要指定其他目录作为日志目录或者为规模较大的集群增大某些守护进程的内存值),除了JAVA_HOME需要配置外(如果shell环境下已经配置了JAVA_HOME,那么也可以不在配置文件里指定),其他环境变量使用默认值就能让Hadoop正常运行。二、 集群配置变量这里所说的集群配置变量,指的是应该在配置文件里修改,不应该为作业单独指定的变量,并且修改后必须重启Hadoop集群才能生效。配置文件包括core-site.xml、hdfs-site.xml、yarn-site.xml和mapred-site.xml,在表格里这些配置文件被简写为core、hdfs、yarn和mapred。参数名文件名默认值说明fs.defaultFScorefile:/用于指定默认的文件系统URI,默认值表示Hadoop默认使用本地文件系统;应该改成hdfs:/NameNode主机名或IP,表示默认使用HDFS作为文件系统。ervalcore0用于控制是否开启垃圾回收,默认值0表示关闭垃圾回收。指定数字值表示开启垃圾回收,变量值是自动回收垃圾的时间(分钟数)。建议开启垃圾回收功能,避免误删HDFS上的重要数据。配置的垃圾回收的时间可以根据实际情况来定。io.file.buffer.sizecore4096Hadoop进行IO时的缓冲区大小,默认值较小,建议增大到65536。.dirhdfsfile:/$hadoop.tmp.dir/dfs/name用于指定NameNode保存HDFS元数据的目录,可以用逗号分隔多个路径,hadoop会在每个路径下保存一份持久化的元数据,如果有条件,可以考虑在NFS上保存一份做灾备。$hadoop.tmp.dir默认位置在/tmp目录下,而/tmp目录可能会被操作系统清理,从而导致HDFS无法启动。为了避免这种情形,应该确保这个参数值配成一个/tmp以外的目录。dfs.datanode.data.dirhdfsfile:/$hadoop.tmp.dir/dfs/data用于指定DataNode保存HDFS块数据的目录,可以用逗号分隔多个路径,DataNode会在各个路径下均衡写。为了充分利用服务器的多个磁盘,这个参数应该为每个磁盘指定一个目录,能够提升HDFS的读写吞吐量。node.checkpoint.dirhdfsfile:/$hadoop.tmp.dir/dfs/namesecondary用于指定Secondary NameNode保存HDFS元数据的目录,可以用逗号分隔多个路径,hadoop会在每个路径下保存一份持久化的元数据,和.dir类似,这个路径也不应该放在/tmp目录下。dfs.blocksizehdfs134217728表示HDFS的块大小,一般使用默认值就可以。dfs.replicationhdfs3表示每个HDFS块的复制份数,默认是3,一般不需要增大这个值,因为三个副本基本可以保证块丢失的几率极小了;除非集群的磁盘空间很有限,才会考虑降低这个值,虽然降低这个值可以节省磁盘空间和减少I/O,但是会增大块丢失和的数据不在本地处理的几率。dfs.datanode.du.reservedhdfs0HDFS为DataNode保留的存储空间(字节数),设置这个值是为了避免HDFS的数据把DataNode本地文件系统的存储空间占满,建议把这个值改为5368709120(5GB)。yarn.resourcemanager.hostnameyarn表示ResourceManager的主机名(或者IP),需要指定。yarn.nodemanager.resource.memory-mbyarn8192表示每个NodeManager上使用的内存的MB数量,默认值是8GB,这个值对于一般服务器来说是比较小的(因为一般服务器都有几十或者上百GB的内存量),需要设置为服务器的实际内存量减去操作系统中各种进程所需的内存量。这是一个需要估算的配置项,并没有精确的计算方法,原则是在保证操作系统和其他服务有足够内存的前提下,为NodeManager提供尽量多的内存,从而最大程度提升集群的计算能力。yarn.nodemanager.resource.cpu-vcoresyarn8表示每个NodeManager可以使用的虚拟CPU核数,同yarn.nodemanager.resource.memorymb类似,设置这个值时需要同时考虑服务器的CPU核数和需要给操作系统中各种进程预留的CPU核数。yarn.nodemanager.aux-servicesyarn无表示yarn框架的额外服务。为了在yarn上运行MR程序,需要指定它的值为mapreduce_shuffle。yarn.nodemanager.vmem-pmem-ratioyarn2.1表示虚拟内存和物理内存之间的比例,除非作业报错虚拟内存不足,才需要增大这个值。yarn.nodemanager.local-dirsyarn$hadoop.tmp.dir/nm-local-dir当NodeManager上的任务需要向本地文件系统写临时文件时,会使用这里指定的一个或者多个目录,为了加快读写速度。建议这个目录应该同DataNode的数据目录(dfs.datanode.data.dir)使用相同的磁盘,都在各个磁盘间均衡磁盘I/O负载。mapredlocal应该改成yarn,表示使用Yarn框架作为资源管理器mapreduce.task.io.sort.factormapred10Map和Reduce任务排序时,每趟合并的文件数,默认的值比较小,建议把这个值改为50。三、 作业配置变量作业配置变量指的是既可以在配置文件里配置,也可以为作业单独指定的Hadoop变量(一般通过在命令行里用“-D 变量名=变量值”的方式, 例如“hadoop jar xxx.jar D mapreduce.map.memory.mb=1024”),这些变量主要来自配置文件mapred-site.xml。参数名文件名默认说明mapreduce.map.memory.mbmapred1000表示每个Map任务的内存MB数(即一个Map 任务的Java虚拟机的总内存,总内存包括堆内存、栈内存、Perm内存等),这是一个Map任务向NodeManager申请的内存量。mapreduce.reduce.memory.mbmapred1000表示每个Reduce任务的内存MB数(即一个Reduce任务的Java虚拟机的总内存,包括堆内存、栈内存、Perm内存等),这是为一个Reduce任务向NodeManager申请的内存量。mapred.child.java.optsmapred-Xmx200M,表示Map或者Reduce任务的Java虚拟机选项,如果有多个选项,用空格分隔。默认值表示最大堆内存为200MB,这样的配置对于比较耗内存的任务一般是不够用的,例如可以通过下面的值来把最大堆内存为700MB:“-Xms100M Xmx700M”。mapreduce.map.java.optsmapred无表示Map任务的Java虚拟机选项,会覆盖mapred.child.java.opts。mapreduce.reduce.java.optsmapred无表示Reduce任务的Java虚拟机选项,会覆盖mapred.child.java.opts。yarn.app.mapreduce.am.resource.mbmapred1536作业的AppMaster进程申请的内存MB数,默认值对于常规的作业来说一般是够用的。但是如果作业的task数量大于1000,建议把这个值改为3072。mand-optsmapred-Xmx1024作业的AppMaster进程的JVM选项,主要用来指定JVM的堆内存,如果把yarn.app.mapreduce.am.resource.mb的值增大为3072,建议把这个值改为-Xpressmapredfalse是否压缩作业的输出,根据实际需要决定是否压缩。pressmapredfalse是否压缩Map的输出,压缩Map的输出可以减小混洗阶段向Reduce发送的数据量,利于节省网络IO资源,但是会带来一定的CPU负担。一般来说,压缩Map输出都会加快作业的速度,建议设置为true。mapreduce.map.failures.maxpercentmapred0在一个作业里允许失败的Map任务百分比,只有当集群或者数据出现问题时,肯定会导致一个Map任务失败四次以上,从而必然导致作业失败时,才需要配置这个参数。例如当某些输入文件发生损坏时,如果不设置这个值,就无法完成作业。假如有200个Map任务,那么这个值设置成3表示最多允许6个Map任务失败。mapreduce.task.io.sort.mbmapred100Map任务在输出阶段需要根据key排序,Reduce任务在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论