`
QING____
  • 浏览: 2234527 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多

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环境变量配置项参考表:

进程 环境变量
NameNode HADOOP_NAMENODE_OPTS
DataNode HADOOP_DATANODE_OPTS
Secondary NameNode HADOOP_SECONDARYNAMENODE_OPTS
ResourceManager YARN_RESOURCEMANAGER_OPTS
NodeManager YARN_NODEMANAGER_OPTS
Mapreduce Job History Server HADOOP_JOB_HISTORYSERVER_OPTS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

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

进程 环境变量
ResourceManager YARN_RESOURCEMANAGER_HEAPSIZE
NodeManager YARN_NODEMANAGER_HEAPSIZE
NameNode/DataNode HADOOP_HEAPSIZE(默认为1G)
MapReduce Job History Server HADOOP_JOB_HISTORYSERVER_HEAPSIZE

 

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

 

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

 

    <>重要参数配置

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

参数 参考值 描述
fs.defaultFS NameNode URI

hdfs://host:port/

原”fs.default.name”

file.blocksize 134217728

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

建议为128或者更大。

将由“dfs.blocksize”覆盖

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

bloick的备份个数

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

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

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

 

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

参数 参考值 备注
dfs.replication 3 hdfs block备份个数,默认为3
dfs.blocksize 128m

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

后缀表示单位

dfs.client.block.write.retries 3 当写入失败时,最多重试次数
dfs.heartbeat.interval 3 datanode与namenode的心跳时间间隔,单位:秒
dfs.namenode.replication.interval 3 namenode检测数据备份情况的时间间隔,单位:秒
dfs.namenode.handler.count 32

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

默认为10

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

namenode存储namespace信息的

本地路径

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

SecondaryNamode/Checkpoint Node

保存checkpoint信息的路径

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

dfs.namenode.hosts /

dfs.namenode.hosts.exclude

<空>

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

的datanode列表

dfs.namenode.logging.level info namenode上日志级别

 

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

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

 

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

resourceManager的通讯地址

host:port

yarn.resourcemanager.scheduler.address rm-host:8030

resourceManager上用来

与ApplicationMasters

通讯的地址,

host必须为resourceManager地址

 yarn.resourcemanager.resource-tracker.address rm-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-mb 4096

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

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

yarn.nodemanager.vmem-pmem-ratio 2.1

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

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

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

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

单位:秒。

yarn.nodemanager.aux-services mapreduce_shuffle mappreduce使用的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.mb 1024 map任务所能使用的最大内存量

mapreduce.map.java.opts

mapreduce.reduce.java.opts

-Xms1024m JVM进程参数
mapreduce.reduce,memory.mb 2048

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

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

设置比map稍大

mapreduce.task.io.sort.mb 512

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

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

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

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

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

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

每个job默认map的个数

在yarn框架下,可能无效。

在新mapreduce api下无效

mapreduce.job.reduces 1

每个job默认reduce的个数

在yarn框架下,可能无效。

mapreduce.task.timeout 30000 task未响应时间超过此值,将会被kill
mapreduce.map.maxattempts 3 map任务在失败时最大重试的次数
mapreduce.reduce.maxattemts 3  
mapreduce.jobtracker.restart.recover false yarn下可能无效
mapreduce.job.ubertask.enable false

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

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

mapreduce.job.ubertask.maxmaps 4

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

被认为是“ubertask”

mapreduce.job.ubertask.maxreduces 1 同上
mapreduce.job.ubertask.maxbytes  

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

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

mapreduce.map.output.compress false

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

可以在job jar中配置。

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

 

     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进程。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics