Hadoop分布式安装[官网整理]

本文详细介绍Hadoop集群的安装步骤、配置要点及注意事项,包括HDFS、YARN和MapReduce组件的配置方法,以及环境变量、日志管理和机架感知等功能的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop Cluster Setup(2.2)

 

【Installation】

    下载hadoop安装文件并在解压在指定路径下,通常把hadoop安装在所有nodes中的相同路径下,便于集群管理。典型的拓扑结构为,集群中一个node为namenode,其他多个节点为datanodes;在mapreduce中,其中一个节点作为ResourceManager,其他多个节点作为NodeManager;其中Namenode和ResourceManager分别为HDFS、YARN(Mapreduce)的master,DataNodes和NodeManager分别为HDFS、YARN的slavers。Namenode和ResourceManager可以部署在不同的节点上(而且通常是),NodeManager节点必须为HDFS集群节点的子集,而且通常不会在NameNode上启用nodemanager。

 

【Running Hadoop in Non-Secure Mode】

    Hadoop中有2种配置文件,其中系统默认配置“core-default.xml”"hdfs-default.xml""yarn-default.xml""mapred-default.xml"为只读,不能修改(除非重新编译打包);在hadoop的安装目录下($HADOOP_HOME/etc/hadoop)下与上述对应的几个文件是可以修改的,例如“core-site.xml”"hdfs-size.xml"等,通常开发者需要修改这些文件来指定相关配置信息。

 

    <> 环境变量

    此外,hadoop-env.sh,yarn-env.sh分别为hdfs和yarn的启动脚本,我们也可以在这两个文件中修改配置文件所在的路径。比如修改hadoop-env.sh中“HADOOP_CONF_DIR”,或者在yarn-env.sh中修改“YARN_CONF_DIR”。不过只能修改路径,配置文件的名称不能改变。

 

    对于管理员而言,需要修改hadoop-env.sh和yarn-env.sh,来指定hadoop的各个守护集成的环境参数,其中JAVA_HOME是必须要调整的:

 

##hadoop-env.sh,yarn-env.sh中指定
export JAVA_HOME=/opt/app/jdk1.6.0_45

 

    大多数情况下,还需要指定HADOOP_PID_DIR/HADOOP_SECURE_DN_PID_DIR,即守护进程启动后PID信息写入的路径。

 

export HADOOP_PID_DIR=/var/hadoop/pids
export HADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR}

 

    因为hadoop是基于JVM,所以我们还需要为它的各个守护进程分配合适的HEAP大小以及GC策略,如下配置仅供参考,hadoop-env.sh:

 

export HADOOP_HEAPSIZE=1024
export HADOOP_NAMENODE_INIT_HEAPSIZE="512"

# default for all,will append to name_node/data_node OPTS
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -XX:MaxPermSize=256M -XX:SurvivorRatio=6 -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=3 -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSCompactAtFullCollection"

# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS -Xmx2048M"

export HADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS -Xmx2048M"

export HADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_SECONDARYNAMENODE_OPTS -Xmx2048M"

 

    yarn进程也需要简单的调整JVM相关参数,yarn-env.sh:

 

# Specify the max Heapsize for the ResourceManager using a numerical value
# in the scale of MB. 
# This value will be overridden by an Xmx setting specified in either YARN_OPTS
# and/or YARN_RESOURCEMANAGER_OPTS.
export YARN_RESOURCEMANAGER_HEAPSIZE=1024

export YARN_RESOURCEMANAGER_OPTS=""

# Specify the max Heapsize for the NodeManager using a numerical value
# in the scale of MB. 
# This value will be overridden by an Xmx setting specified in either YARN_OPTS
# and/or YARN_NODEMANAGER_OPTS.
export YARN_NODEMANAGER_HEAPSIZE=1024

export YARN_NODEMANAGER_OPTS=""

 

    管理员可以像hadoop-env.sh中那样,为yarn指定JVM OPTS,本例中省略了此值。

 

    JVM环境变量配置项参考表:

进程环境变量
NameNodeHADOOP_NAMENODE_OPTS
DataNodeHADOOP_DATANODE_OPTS
Secondary NameNodeHADOOP_SECONDARYNAMENODE_OPTS
ResourceManagerYARN_RESOURCEMANAGER_OPTS
NodeManagerYARN_NODEMANAGER_OPTS
Mapreduce Job History ServerHADOOP_JOB_HISTORYSERVER_OPTS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

    JVM Heap大小配置所对应的环境变量:

进程环境变量
ResourceManagerYARN_RESOURCEMANAGER_HEAPSIZE
NodeManagerYARN_NODEMANAGER_HEAPSIZE
NameNode/DataNodeHADOOP_HEAPSIZE(默认为1G)
MapReduce Job History ServerHADOOP_JOB_HISTORYSERVER_HEAPSIZE

 

   上述环境变量分别在hadoop-env.sh和yarn-env.sh中配置。

 

    此外还有一个很重要的参数,就是日志文件的路径,通常我们需要修改“HADOOP_LOG_DIR”、“YARN_LOG_DIR”两个参数的值。

 

    <>重要参数配置

     1. core-site.xml(Hadoop-Common组件)

参数参考值描述
fs.defaultFSNameNode URI

hdfs://host:port/

原”fs.default.name”

file.blocksize134217728

HDFS Block文件大小,默认为64M

建议为128或者更大。

将由“dfs.blocksize”覆盖

hadoop.tmp.dir/var/hadoop/tmp临时文件路径
file.replication1

bloick的备份个数

事实上此参数不会产生效果,将有

hdfs-site.xml中的“dfs.replication”覆盖

hadoop.security.authorizationfalse是否启用授权验证
io.file.buffer.size131072hdfs文件读写缓冲区大小
io.compression.codecs<空>文件采用的压缩算法

 

    2. hdfs-site.xml(HDFS组件)

参数参考值备注
dfs.replication3hdfs block备份个数,默认为3
dfs.blocksize128m

block大小,可以使用“m”“g”等字母

后缀表示单位

dfs.client.block.write.retries3当写入失败时,最多重试次数
dfs.heartbeat.interval3datanode与namenode的心跳时间间隔,单位:秒
dfs.namenode.replication.interval3namenode检测数据备份情况的时间间隔,单位:秒
dfs.namenode.handler.count32

namenode并发处理请求的线程数,

默认为10

dfs.namenode.name.dir/data/hadoop/dfs/name

namenode存储namespace信息的

本地路径

dfs.datanode.data.dir/data/hadoop/dfs/datadatanode存储实际数据block的文件路径
dfs.namenode.checkpoint.dir/data/hadoop/dfs/namesecondary

SecondaryNamode/Checkpoint Node

保存checkpoint信息的路径

dfs.permissions.enabledfalse默认为true,文件读写时,是否检测权限。
dfs.datanode.address0.0.0.0:50010datanode启动的端口号

dfs.namenode.hosts /

dfs.namenode.hosts.exclude

<空>

在namenode上生效,用来设定允许通讯

的datanode列表

dfs.namenode.logging.levelinfonamenode上日志级别

 

    3. yarn-site.xml(YARN组件)

参数参考值备注
yarn.acl.enablefalse是否开启yarn资源控制
yarn.log-aggregation-enablefalse是否开启log的聚合功能

 

参数参考值备注
yarn.resourcemanager.addressrm-host:8032

resourceManager的通讯地址

host:port

yarn.resourcemanager.scheduler.addressrm-host:8030

resourceManager上用来

与ApplicationMasters

通讯的地址,

host必须为resourceManager地址

 yarn.resourcemanager.resource-tracker.addressrm-host:8031  
 yarn.resourcemanager.webapp.address rm-host:8088 resourcemanager web页面
 yarn.resourcemanager.scheduler.class 

 资源调度器,class类全名,必须为ResourceScheduler子类

默认为org.apache.hadoop.yarn.server.

resourcemanager.scheduler.capacity.CapacityScheduler

其他可选:FairScheduler,FifoScheduler

 yarn.scheduler.minimum-allocation-mb 1024

 ResourceManager可为资源请求者分配Container的最小内存量,单位Mb,默认1024

如果任务较小可以适度减少此值,一般为512

 yarn.scheduler.maximum-allocation-mb 8192

 ResourceManager允许请求分配Container的最大内存量,单位mb,默认为8192,

如果任务较小或者物理内存较少,

可以减少此值,一般为2048

 yarn.resourcemanager.nodes.include-path /

yarn.resourcemanager.nodes.exclude-path

 <空>

 ResourceManager允许(不允许)获取资源的nodemanager列表

此处为本地路径的一个文件,文件每行一个nodemanager的host地址

  

参数参考值备注
yarn.nodemanager.resource.memory-mb4096

当前nodemanager可供Containers使用的总物理内存量。

此值不能大于platform下可供JVM使用的最大内存。

yarn.nodemanager.vmem-pmem-ratio2.1

默认值为2.1,当container使用内存超过其分配的内存时,

可已使用虚拟内存为其物理内存的比例。swap!

yarn.nodemanager.local-dirs/data/hadoop/yarn/localnodemanager产生临时数据的保存地址。
yarn.nodemanager.log-dirs/data/hadoop/yarn/logs日志保存地址,默认为/logs
yarn.nodemanager.log.retain-seconds10800

当log-aggregation关闭时,nodemanager保存用户日志的时长,

单位:秒。

yarn.nodemanager.aux-servicesmapreduce_shufflemappreduce使用的shuffle服务,目前只能为此值
yarn.application.classpath 

建议保持默认,yarn框架依赖的classpath,如果开发者额外的调整

框架的服务,在默认值的基础上,增加jar路径。

 

    4. mapred.xml(mapreduce组件)

参数参考值备注
mapreduce.framework.name

yarn

local

mapreduce使用的框架名称,可选“yarn”或者“local”

对于hadoop 2.2+,必须使用yarn。

mapreduce.map.memory.mb1024map任务所能使用的最大内存量

mapreduce.map.java.opts

mapreduce.reduce.java.opts

-Xms1024mJVM进程参数
mapreduce.reduce,memory.mb2048

reduce任务进程所能消耗的最大内存量,

reduce涉及到大量排序和key分组,建议内存

设置比map稍大

mapreduce.task.io.sort.mb512

map、reduce在排序时使用内存缓冲区的大小

越大排序效率越高,建议256,默认为100,单位:mb

mapreduce.task.io.sort.factor100在排序时,“merge”阶段,每次最大规约的文件个数
mapreduce.reduce.shuffle.parallelcopies12

reduce进程在shuffle阶段,并发copy远程文件的

并发数。此值越大copy效率越高,性能消耗越大。

mapreduce.cluster.local.dir mapreduce保存数据的本地路径
mapreduce.job.maps2

每个job默认map的个数

在yarn框架下,可能无效。

在新mapreduce api下无效

mapreduce.job.reduces1

每个job默认reduce的个数

在yarn框架下,可能无效。

mapreduce.task.timeout30000task未响应时间超过此值,将会被kill
mapreduce.map.maxattempts3map任务在失败时最大重试的次数
mapreduce.reduce.maxattemts3 
mapreduce.jobtracker.restart.recoverfalseyarn下可能无效
mapreduce.job.ubertask.enablefalse

默认为false,是否开启“ubertask”,

此后小的job将会依次在同一个JVM中运行。

mapreduce.job.ubertask.maxmaps4

如果job中map的个数小于此值,那么次job将

被认为是“ubertask”

mapreduce.job.ubertask.maxreduces1同上
mapreduce.job.ubertask.maxbytes 

如果job的输入文件大小小于此值,此job将

被认为是“ubertask”,默认为dfs.blocksize

mapreduce.map.output.compressfalse

map的输出结果是否启动压缩

可以在job jar中配置。

yarn.app.mapreduce.am.resource.mb1024applicationMaster进程需要占用的内存。
   

 

     mapreduce新api中所有的参数均已"mapreduce."开头,基于yarn框架时以“yarn.”开头的参数被支持,在yarn下,部分mapreduce参数将不能发挥效果。

 

    5. slaves

    在ect/hadoop目录下,有个slaves文件,这个文件中, 保存所有的DataNodes或者NodeManagers节点的地址,此文件可以帮助hadoop master轮流启动整个集群。NameNode的地址可以在hdfs-site.xml配置,ResourceManager的地址可以在yarn-site.xml中配置,如果你希望NameNode节点上也可以启动DataNode进程,也可以在slaves文件中配置;通常在集群中,除了Namenode和ResourceManager之外的其他所有节点,都应该配置在slaves文件中。

     此外,master文件已经不再需要,其中secondaryNameNode、backup Node的位置,可以在hdfs-site.xml中配置。

 

    【Hadoop Rack Awareness】

    HDFS和yarn组件都是Rack-aware的。[机架感知]

    NameNode和ResourceManager通过管理员配置的“Resolve API”获取slaves节点的rack信息,API将DNS Name解析成相应的Rack id标识。

 

    可以通过core-site.xml中的"net.topology.node.switch.mapping.impl"和“net.topology.script.file.name”两个配置项来实现Rack Id的解析。其中"net.topology.script.file.name"用来指定“解析DNS Name”的脚本名称,一般为.sh文件,通常放置在etc/hadoop目录下,这个脚本的作用,就是接收一个序列的DNS参数列表,并按照顺序返回对应的Rack ID名称。"net.topology.node.switch.mapping.impl"默认值为"org.apache.hadoop.net.ScriptBasedMapping",将使用上述指定的脚本来解析Rack,如果没有配置脚本文件,那么所有的节点的rack Id为“/default-rack”。

 

    此外开发者可以根据时机情况来自定义“net.topology.node.switch.mapping.impl”的实现,通常继承“AbstractDNSToSwitchMapping”类即可。

 

    【Logging】

    Hadoop使用apache log4j作为日志输出框架,开发者可以通过修改etc/hadoop/log4j.properties文件来调整相关日志参数,对于mapreduce/cascading等第三方日志输出,也可以(而且是必须)修改此log4j.properties文件以增加相关的日志输出控制。例如我们希望在自己的mapreduce程序中输出日志:

##customer mapreduce log
log4j.appender.STATISTIC=org.apache.log4j.DailyRollingFileAppender
log4j.appender.STATISTIC.File=/data/logs/statistic/mapred-all.log
log4j.appender.STATISTIC.DatePattern=.yyyy-MM-dd
log4j.appender.STATISTIC.layout=org.apache.log4j.PatternLayout
log4j.appender.STATISTIC.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p %c{1} [%L]-%m%n
##所有的com.thirdpart.statistic.mapred包下的日志全部输出
log4j.logger.com.thirdpart.statistic.mapred=INFO,STATISTIC

 

    【分布式操作】

    当一台机器的所有配置文件调整完毕后,需要把配置文件同步到所有节点上,即确保集群中所有的机器上配置文件一致,不过slaves文件可以只在NameNode、SecondaryNameNode、ResourceManager上。

     “rsync”辅助工具可以帮我们做到这些,如果没有安装rsync,可以首先安装和配置rsync同步server列表。

 

    因为hadoop会使用ssh做无密码登录,所以进群中所有的节点必须安装ssh套件,以及配置相关的授权信息。

 

    1) 集群配置完成后,首先在NameNode上,进入bin目录下,运行"./hdfs namenode -format";此命令为“格式化”命令,将会为进群生成cluster相关的约束性信息。

    2) 启动hdfs集群:进入sbin目录,执行“start-dfs.sh”。此命令还可以指定hadoop的相关配置文件路径。关闭dfs可以使用"stop-dfs.sh"。

    3) 如果集群需要运行yarn集群或者mapreduce框架(包括cascading、hive、spark等),则需要通过“start-yarn.sh”启动yarn进程。可以通过“stop-yarn.sh”来关闭yarn进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值