欢迎投稿

今日深度:

Hadoop集群配置,

Hadoop集群配置,


集群的拓扑结构配置:

需要实现DNSToSwitchMapping  接口。

topology.node.switch.mapping.imp1 属性实现了上述接口。

大多数只需使用ScriptBasedMapping 脚本即可。 脚本存放路径由属性topology.script.file.name控制。

脚本样例

Hadoop 1.x配置

hadoop-env.sh                              Bash脚本         记录脚本中要用到的环境变量,以运行hadoop。 比如slaves的位置记录在HADOOP_SLAVES 项中。

core-site.xml                                 Hadoop配置xml          Hadoop Core的配置项,比如HDFS,MapReduce常用的I/O设置。

hdfs-site.xml                                 Hadoop配置xml          HDFS 守护进程的配置项:namenode,辅助namenode,datanode。

mapred-site.xml                           Hadoop配置xml          MapReduce 守护进程的配置项:jobtracker,tasktracker。

masters                                        文本                          运行辅助namenode 的机器列表

slaves                                          文本                          运行datanodetasktracker的机器列表

hadoop-metrics.properties          Java属性                   控制如何在Hadoop上发布度量的属性。

log4j.properties                           Java属性                    系统日志、namenode审计日志、tasktracker 子进程的任务日志的属性。

 

只有Jobtracker和namenode上的控制脚本能使用slaves和masters。

start-dfs.sh  脚本用于启动集群中所有的HDFS守护进程。

1.在本地机器启动一个namenode

2. 在slaves 文件中记录的各机器启动一个datanode

3. 在masters 文件中记录的所有机器上均启动一个 辅助namenode

start-mapred.sh 脚本用于启动集群中所有的MapReduce守护进程。

1. 在本地机器启动一个 jobtracker

2. 在slaves 中的各机器启动 tasktracker。 

3. 此脚本不使用masters文件。

以上两个脚本都是通过hadoop-daemon.sh 来启动和终止Hadoop守护进程的。用户可自行编写脚本调用hadoop-daemon.sh 。


内存分配

默认,Hadoop为各个守护进程分配1000MB内存。

此项由hadoop-env.sh 中的 HADOOP_HEAPSIZE 参数控制。也可为各个守护进程单独设置。

 一个tasktracker 能够同时运行的最大map任务数由 mapred.tasktracker.map.tasks.maximum 属性控制。

默认是2个,称为map槽的数量。

能够同时运行的最大reduce任务数由 mapred.tasktracker.reduce.tasks.maximum 属性控制。

默认也是2个,称为reduce槽的数量。

分配给每个map或reduce子任务的JVM的内存由mapred.child.java.opts属性决定。默认为-Xmx200m,即200MB。

则默认一个slaves的内存占用: datanode(1000)  +  tasktracker(1000)  + 2*map(200) +2*reduce(200) = 2800MB

这里-Xmx200m的意思为,JVM heap的最大值,Stack空间不算。


设置Java

1.可在hadoop-env.sh 中设置JAVA_HOME 项

2.或者在shell中设置JAVA_HOME 环境变量


系统日志

在hadoop-env.sh 的HADOOP_LOG_DIR 属性中设置日志的存放地址。 默认路径为${HADOOP_HOME}/logs

我这里改成了 /var/log/hadoop

日志一共两种

1. 以 .log 为后缀,大部分应用程序日志消息都写在该日志中。 系统不删除日志。

2. 以 .out 为后缀,记录标准输出和标准错误日志。重启守护进程时系统会创建新文件记录,系统仅保留最新的5个日志文件,介于1-5,5表示最旧。

日志中的用户名称,可在hadoop-env.sh 中HADOOP_IDENT_STRING 属性更改。


SSH设置

1. 通过设置SSH的ConnectTimeout选项,重新设置连接超时设定,可减少连接宕机的等待时间。

2. StrictHostKeyChecking 设置为no,可以自动将主机键添加进已知主机,不需要确认。

3. hadoop-env.sh 中HADOOP_SSH_OPTS 环境变量还有更多设置。


配置同步

集群的各项配置文件需要同步。

1.首先需要将hadoop-env.sh 同步到集群所有的机器中。 为让所有机器都知道HADOOP_MASTER 的位置。

2.工作节点的守护进程启动后,会自动用rsync工具同步HADOOP_MASTER 和HADOOP_INSTALL 的目录。  HADOOP_MASTER是主节点HADOOP的安装目录。HADOOP_INSTALL 是本地hadoop安装目录。(rsync 是远程同步文件的命令,只同步不相同的文件。)

3.当大集群同时rsync主节点,为避免主节点瘫痪,可设置HADOOP_SLAVE_SLEEP 让工作节点休眠一会。

4. 如果hadoop-env.sh 没有设置HADOOP_MASTER 则工作节点不会使用rsync来同步。


配置API读取

1.一个Configuration类的实例代表配置属性及其取值的一个集合。

2.Configuration从资源XML中读取其属性值。允许为XML没有定义的属性指定默认值。

3.之后添加的属性会覆盖之前定义的属性。被标记为final的属性不能被后面的定义所覆盖。

4.如果配置文件XML不在默认HADOOP_INSTALL/conf 目录下,则需要通过config来指定配置文件的位置。

 eg :   ./start-all.sh  --config  path-to-conf             hadoop  fs  -conf   path-to-conf  ls  /


属性配置

HDFS属性

fs.default.name

描述HDFS文件系统的URI,主机为namenode的主机IP,端口为namenode监听的RPC端口。默认端口为8020.

此属性也指定了默认文件系统,可以解析相对路径。(HDFS不用masters文件确定主机名,masters文件只供控制脚本使用)

典型配置: hdfs://127.0.0.1/

hadoop.tmp.dir

hadoop的临时目录, 默认值为/tmp/hadoop-${user.name}

在Ubuntu下/tmp目录为开机就清除的目录。所有很多文件存在这,重开机就被删了,导致namenode起不来。

要修改为其他路径。在core-site.xml  中修改。

dfs.name.dir  (dfs.namenode.name.dir   hadoop-2.x)

指定一系列目录来供namenode存放永久性的文件系统元数据, 可以用逗号分隔出多个目录。系统会将元数据写入所有的目录(推荐其中有NFS挂载的目录)(进行冗余备份).

当namenode发生故障,可以从NFS恢复元数据。默认值为 ${hadoop.tmp.dir}/dfs/name

dfs.data.dir   (dfs.datanode.name.dir    hadoop-2.x)

指定datanode存储数据的目录,也是同时指定多个目录(用逗号隔开),但和 dfs.name.dir不同的是它在所有目录存放不同的文件,目的是提高性能。

默认值为  ${hadoop.tmp.dir}/dfs/data

fs.checkpoint.dir

指定一系列 辅助namenode 存储文件系统检查点(checkpoint)的目录,在多个目录备份相同的checkpoint,冗余备份。

默认值为 ${hadoop.tmp.dir}/dfs/namesecondary

dfs.block.size

指定HDFS的块大小,默认为64MB。可修改为更大的块,以减小namenode的内存压力。在hdfs-site.xml 中。

dfs.datanode.du.reserved

默认情况下,datanode能够占用存储目录上的所有空闲空间。如要为其他应用程序保留部分空间,则通过此属性指定待保留空间的大小。

fs.trash.interval

Hadoop有回收站系统,通过shell删除的文件会移到.Trash目录,保留一段时间,通过此属性设置保留时间的长短,默认为0,即直接删除。用程序删除的文件会直接删除,不移到回收站。此属性在core-site.xml 中设置。 HDFS会自动删除回收站的过期文件。其他文件系统用  hadoop  fs  -expunge  命令删除。



MapReduce属性

mapred.job.tracker

指定jobtracker PRC服务的IP和端口,非URI。 默认为local。通常使用8021端口

伪分布通常修改为 localhost:8021

mapred.local.dir 

指定一系列map任务输出的目录,这些数据被写入本地文件系统,作业终止时,数据被清除。

map输出的数据会分散到所有目录,为提高性能。数据可能非常多,保证空间够~

默认路径  ${hadoop.tmp.dir}/mapred/local

mapred.system.dir

MapReduce使用分布式文件系统和各个tasktracker共享文件,即作业运行期间存储共享文件的目录(例如作业JAR作业)。

此属性指定这些文件的存储目录,可以是fs.default.name的相对路径。

默认值为 ${hadoop.tmp.dir}/mapred/system

mapred.tasktracker.map.tasks.maximum    

最多同时运行的map任务数,默认为2。

mapred.tasktracker.reduce.tasks.maximum    

最多同时运行的reduce任务数,默认为2



map和reduce子项

mapred.child.java.opts (hadoop 1.x 2.x 均适用)   

默认-Xmx200m,即map和reduce子JVM最大heap容量为200MB。

mapreduce.map.java.opts  

默认-Xmx200m     map子JVM heap大小 (1.x 没有)

mapreduce.reduce.java.opts  

默认-Xmx200m   reduce子JVM heap大小 ( 1.x没有 )


RPC服务器

之前说了 fs.default.name  mapred.job.tracker 两个RPC服务器。前一个是HDFS RPC服务器,后一个是jobtracker RPC服务器。

dfs.datanode.ipc.address

设置datanode的PRC服务器。默认为 0.0.0.0:50020    

3(0.0.0.0 指本机的所有网络,如果你当前主机有两个IP,就两个IP的50020端口都设置)

mapred.task.tracker.report.address

设置tasktracker 的RPC服务器。默认为 127.0.0.1:0       (端口0为任一空闲端口,tasktracker的子JVM利用它和tasktracker通信)


TCP/IP服务器

dfs.datanode.address

设置datanode间check传输的地址端口。默认值为 0.0.0.0:50010


HTTP服务器

mapred.job.tracker.http.address       默认 0.0.0.0:50030          jobtracker 的HTTP服务器地址和端口

mapred.task.tracker.http.address     默认 0.0.0.0:50060          tasktracker 的HTTP服务器地址和端口

dfs.http.address                                 默认 0.0.0.0:50070          namenode的HTTP服务器地址和端口

dfs.datanode.http.address                 默认 0.0.0.0:50075          datanode的HTTP服务器的地址和端口

dfs.secondary.http.address                默认 0.0.0.0:50090         辅助namenode的HTTP服务器地址和端口


缓冲区大小

Hadoop默认4KB的缓冲区辅助I/O操作。 可通过core-site.xml 中的 io.file.buffer.size属性设置缓冲区大小。


慢启动reduce

mapred.reduce.slowstart.completed.maps

此属性设置reduce任务何时启动,默认为5%的map任务结束后启动,这样可能造成reduce任务占用reduce槽而无事可做。

可以改成0.80(80%),来提高吞吐率。


创建用户帐号

为用户创建home目录,并赋予用户拥有者权限。

hadoop fs  -mkdir /user/username

hadoop fs  -chown  username:username  /user/username

设定各目录空间限制。下列设置是不超过1T。

hadoop dfsadmin  -setSpaceQuota  1t  /user/username


YARN配置(Hadoop 2.x)

YARN的start-yarn.sh 脚本启动集群中YARN的守护进程。该脚本会在当前机器启动资源管理器,然后在slaves文件列举的每台机器上各启动一个节点管理器

YARN还有一个Web应用程序代理服务器(访问YARN应用的用户界面)、作业历史服务器(显示历史作业的执行细节)。

yarn-env.sh                 bash脚本                运行YARN的脚本所使用的环境变量

yarn-site.xml               Hadoop配置xml    YARN守护进程的配置设置:资源管理器,节点管理器,作业历史服务器,Web应用服务器。

当运行YARN时,mapred-site.xml 文件仍被记录通用MapReduce属性,只是与Jobtracker和Tasktracker相关的属性被废弃了。

本文中MapReduce属性中的属性项,都被废弃。


hadoop 1.x 和 2.x 的内存控制有很大区别。

hadoop 1.x 基于槽来控制,集群启动时固定有多少map槽和reduce槽,应用不能改变,一些占用内存小的多个任务占用一台机器、后期只有reduce任务,而分配给map槽的内存却在空缺,存在浪费。

hadoop 2.x 由资源管理器来分配计算资源,不固定槽的数量,应用运行过程都由master负责管理,并由master和资源管理器沟通、申请资源。

hadoop 1.x的内存属性配置在“hadoop权威指南P345”


shuffle过程

map输出先进入缓冲区,每当缓冲区快满时开始处理,先按键把键值对分区,然后分区内排序,进行一遍combiner,然后把生成文件写入本地目录暂时保存。 这样,map任务结束后,会有多个本地保存的中间文件,需要把这些文件合并,过程为先分区再排序,最后进行combiner。

然后reduce端接收多个map任务发来的数据,排序后进行combiner。然后开始reduce处理。


YARN属性

mapred.framework.name

属性需设置为yarn才使用YARN框架,classic标示mapreduce1.x ,在mapred-site.xml 中设置。

yarn.resourcemanager.address

指定资源管理器的RPC接口。格式  主机:端口

yarn.nodemanager.local-dirs

类似于mapred.local.dir 属性,指定中间数据(map输出)存储地址。只是第一代和第二代的区别,磁盘间也用逗号隔开。(任务结束时删除)

yarn.nodemanager.aux-services

节点管理器运行的附加服务列表。设置为  mapreduce_shuffle ,以此显示启用shuffle过程(1代不用),此设置在yarn-site.xml 中。

yarn.nodemanager.resource.memory-mb

分配给节点管理器的物理内存量,默认为8192,单位为MB

mapreduce.map.memory.mb /  mapreduce.reduce.memory.mb

指定内存大小来运行map或reduce任务,默认为1024MB,此内存包括mapred.child.java.opts的JVM heap内存、及它创建的任何进程如Streaming。

所以必须要比heap内存大。如果map或reduce任务内存超出,JVM进程会被节点管理器终止,并标记为失败。

yarn.nodemanager.vmem-pmem-ratio

指定进程虚拟内存量与物理内存限制的乘积。 默认为2.1,则虚拟内存的规模上限为2.1*mapreduce.xxxxx.memory.mb(1024MB)= 2150MB


YARN的RPC属性

yarn.resourcemanager.address

默认为 0.0.0.0:8032 ,资源管理器通过它与客户端通信

yarn.resourcemanager.admin.address

默认为 0.0.0.0:8033,资源管理器通过它与admin客户端通信

yarn.resourcemanager.scheduler.address

默认为 0.0.0.0:8030,资源管理器通过它与应用程序宿主(master)通信

yarn.resourcemanager.resource-tracker.address

默认为 0.0.0.0:8031,资源管理器通过此与节点管理器通信

yarn.nodemanager.address

默认为 0.0.0.0:0 ,节点管理器与应用程序宿主通信。

yarn.nodemanager.localizer.address

默认为 0.0.0.0:8040,节点管理器的localizer的RPC服务器地址。

mapreduce.jobhistory.address

默认为 0.0.0.0:10020 作业历史服务器与客户端在此通信。 此属性在mapred-site.xml 中设置。


YARN的HTTP属性

yarn.resourcemanager.webapp.address

默认0.0.0.0:8088 ,资源管理器的HTTP服务器地址。

yarn.nodemanager.webapp.address

默认为0.0.0.0:8042,节点管理器的HTTP服务器地址。

yarn.web-proxy.address

Web应用代理服务器的HTTP服务器地址。默认未设置,则Web应用代理器会在资源管理器进程中运行。

mapreduce.jobhistory.webapp.address

默认为 0.0.0.0:19888 ,作业历史服务器的HTTP服务器地址。在mapred-site.xml 中设置。

mapreduce.shuffle.port

默认8080  ,shuffle句柄(handler)的HTTP端口号,为map任务的输出结果服务。不是用户可访问的界面。在mapred-site.xml 中设置。

www.htsjk.Com true http://www.htsjk.com/Hadoop/41366.html NewsArticle Hadoop集群配置, 集群的拓扑结构配置: 需要实现DNSToSwitchMapping  接口。 topology.node.switch.mapping.imp1 属性实现了上述接口。 大多数只需使用ScriptBasedMapping 脚本即可。 脚本存放路径由属性...
相关文章
    暂无相关文章
评论暂时关闭