- 环境
namenode有2个,datanode有3个。
- 基础配置
- 环境变量
.bashrc(怕配覆盖就放.bash_profile中)
=============
export PS1="[\u@\h|\w]\\$ "
#alias
alias l='ls --group-directories-first --time-style=long-iso -l'
alias la='ls --group-directories-first --time-style=long-iso -lav'
alias ll='ls --group-directories-first --time-style=long-iso -lavh'
alias lt='ls --group-directories-first --time-style=long-iso -lat'
alias dus='du -sh'
#java
export JAVA_HOME="/home/hadoop/soft/jdk1.8.0"
export CLASSPATH=".:${JAVA_HOME}/lib:${CLASSPATH}"
export PATH="${JAVA_HOME}/bin:${PATH}"
-
- 修改hosts
需要root权限。
vim /etc/hosts
127.0.0.1 localhost
::1 localhost
192.168.1.51 hm01
192.168.1.52 hm02
192.168.1.53 hs01
192.168.1.54 hs02
192.168.1.55 hs03
-
- 无密码ssh互访
各主机间可以ssh无密码互访。
ssh-keygen -t rsa或ssh-keygen -t rsa -P ""
保持默认,无密码。
chmod 711 .ssh
cat id_rsa.pub >> authorized_keys
chmod 644 authorized_keys
authorized_keys权限过低或过高均不可无密码访问。
scp id_rsa.pub hadoop@hm02:~/.ssh/id_rsa.pub.hm01
各主机相互cat id_rsa.pub.x。
或使用
ssh-copy-id hadoop@hm02,把公钥发给对方并自动追加。
-
- 删除自带java/msysql
需要root权限。
rpm -qa | grep java
rpm -qa | grep mysql
rpm -e --nodeps 查询到的包名
-
- 修改ulimit和nproc
需要root权限。
1、设置ulimit
vim /etc/security/limits.conf
* soft nofile 32768
* hard nofile 65536
配置文件最前面的是指domain,设置为星号(*)代表全局,也可以针对不同的用户做出不同的限制,将星号替换为用户名。
2、设置nproc
vim /etc/security/limits.d/90-nproc.conf
* soft nproc 2048
* hard nproc 10240
3、添加pam_limits.so
vim /etc/pam.d/login
session required pam_limits.so
否则,在/etc/security/limits.conf上的配置不会生效,重启。
-
- 关闭防火墙和selinux
需要root权限。
1、关闭防火墙等服务
chkconfig iptables off
chkconfig ip6tables off
chkconfig bluetooth off
chkconfig mdmonitor off
chkconfig postfix off
2、关闭SELinux
vim /etc/selinux/config
SELINUX=disabled
重启。
修改网卡名eth1改成eth0:
在/etc/udev/rules.d/70-persistent-net.rules被识别成了eth0,而虚拟机中的识别成了eth1。
解决方法:
1.编辑/etc/udev/rules.d/70-persistent-net.rules,找到与ifconfig -a得出的MAC相同的一行(NAME='eth1'这一行),把它改为"NAME=eth0 ",然后把上面一行(NAME='eth0')删除掉。
vim /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:bb:41:2b", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
2.编辑/etc/sysconfig/network-script/ifcfg-eth0,把MAC改为正确的,把UUID删掉。
3.编辑/etc/sysconf/network,把hostname也改一下。
4.重启生效。
-
- 时间同步
如果是在一台物理机上的不同虚拟机,时间差不多就不用设置了,如果是不同物理机必须设置。
1、检查是否安装
rpm -qa ntp
显示:ntp-4.2.6p5-1.el6.centos.x86_64,表示已经安装。
2、配置本地时间服务器
vi /etc/ntp.conf
#不变
driftfile /var/lib/ntp/drift
#不变
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
#不变
restrict 127.0.0.1
restrict -6 ::1
#NTP服务器允许更新的客户机地址范围
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
#公共时间服务器地址
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
#broadcast 224.0.1.1 autokey # multicast server
#multicastclient 224.0.1.1 # multicast client
#manycastserver 239.255.254.254 # manycast server
#manycastclient 239.255.254.254 autokey # manycast client
# Enable public key cryptography.
#crypto
includefile /etc/ntp/crypto/pw
# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys
# Specify the key identifiers which are trusted.
#trustedkey 4 8 42
# Specify the key identifier to use with the ntpdc utility.
#requestkey 8
# Specify the key identifier to use with the ntpq utility.
#controlkey 8
# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats
- zookeeper
hs01/hs02/hs03作为zks节点。
-
- 配置
- 环境变量
- 配置
编辑环境变量文件(.bashrc)
export ZOO_HOME="/home/hadoop/soft/zookeeper-3.4.5"
export ZOO_LOG_DIR="/home/hadoop/work/zookeeper/logs"
export PATH="${ZOO_HOME}/bin:${PATH}"
-
-
- zoo.cfg
-
vi conf/zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/home/hadoop/work/zookeeper
# the port at which the clients will connect
clientPort=8501
server.1=hs01:8502:8503
server.2=hs02:8502:8503
server.3=hs03:8502:8503
minSessionTimeout=10000
maxSessionTimeout=60000
maxClientCnxns=20500
还有一个需要注意
zookeeper不会主动的清除旧的快照和日志文件,这个是操作者的责任。但是可以通过命令去定期的清理。
#!/bin/bash
#snapshot file dir
dataDir=/opt/zookeeper/zkdata/version-2
#tran log dir
dataLogDir=/opt/zookeeper/zkdatalog/version-2
#Leave 66 files
count=66
count=$[$count+1]
ls -t $dataLogDir/log.* | tail -n +$count | xargs rm -f
ls -t $dataDir/snapshot.* | tail -n +$count | xargs rm -f
#以上这个脚本定义了删除对应两个目录中的文件,保留最新的66个文件,可以将它写到crontab中,设置为每天凌晨2点执行一次就可以了。
#zk log dir del the zookeeper log
#logDir=
#ls -t $logDir/zookeeper.log.* | tail -n +$count | xargs rm -f
也可以在zoo.cfg中配置两个参数:
autopurge.purgeInterval,这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。
autopurge.snapRetainCount,这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。
-
-
- 工作目录
-
在hs01/hs02/hs03上执行。
mkdir -p /home/hadoop/work/zookeeper
mkdir -p /home/hadoop/work/zookeeper/logs
在work/zookeeper下,新建一个myid文件,将本机器对应的server.N的数字N写入此文件。
hs01对应1,hs02对应2,hs03对应3。
-
- 分发
scp到目标主机。
-
- 启动
在hs01/hs02/hs03上执行。
zkServer.sh start
-
- 验证
在hs01/hs02/hs03上执行。
zkServer.sh status
查看状态,有leader,follower即是正常。
zkCli.sh -server hs01:8501
连接zk服务器。
-
- 停止
在hs01/hs02/hs03上执行。
zkServer.sh stop
- hdfs
hm01/hm02互备NN,hs01/hs02/hs03作为DN。
-
- 配置
- 环境变量
- 配置
环境变量文件(.bashrc)
export HADOOP_HOME="/home/hdp/soft/hadoop"
export PATH="${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${PATH}"
-
-
- hadoop-env.sh
-
在hadoop/etc/hadoop目录下。
hadoop-env.sh示例:
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"${HADOOP_HOME}/etc/hadoop"}
export HADOOP_LOG_DIR="/home/hadoop/work/hadoop/logs"
export HADOOP_PID_DIR="/home/hadoop/work/hadoop/pids"
export HADOOP_HEAPSIZE=6000
export HADOOP_NAMENODE_OPTS="-Xmx2048m -Xms2048m -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Xmx2048m -Xms2048m -Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS"
# Where log files are stored. $HADOOP_HOME/logs by default.
#本地库压缩
export LD_LIBRARY_PATH="${HADOOP_HOME}/lib/native/:${HADOOP_HOME}/share/hadoop/common/lib:${LD_LIBRARY_PATH}"
说明:
LIBRARY_PATH,在程序编译期指定查找共享库(动态链接库)的路径。
LD_LIBRARY_PATH,在程序加载运行期指定查找共享库(动态链接库)时,除了系统默认路径(/lib,/usr/lib)之外的其它路径。
-
-
- hdfs-site.xml
-
配置项说明:
配置项名称 |
配置项说明 |
默认值 |
建议值 |
dfs.nameservices |
集群标识,可以随便取,后面的所有配置要一致。 |
|
myhdcluster |
dfs.ha.namenodes.myhdcluster |
该集群namenode两个主备节点的名称标识。配置格式【名称1,名称2】 |
|
nn1,nn2 |
dfs.namenode.rpc-address.myhdcluster.nn1 |
nn1节点的提供rpc服务的端口。配置格式【主机名称:端口】 |
|
hm01:8020 |
dfs.namenode.rpc-address.myhdcluster.nn2 |
nn2节点的提供rpc服务的端口。配置格式【主机名称:端口】 |
|
hm02:8020 |
dfs.namenode.http-address.myhdcluster.nn1 |
nn1节点监控http服务的端口。配置格式【主机名称:端口】 |
|
hm01:8570 |
dfs.namenode.http-address.myhdcluster.nn2 |
nn2节点监控http服务的端口。配置格式【主机名称:端口】 |
|
hm02:8570 |
dfs.datanode.http-address |
datanode节点监控http服务的端口。配置格式【主机名称:端口】 |
|
0.0.0.0:8575 |
dfs.namenode.shared.edits.dir |
Namenode日志存储服务端口。qjournal://host1:端口;host2:端口;…/集群标识名 |
|
qjournal://hs01:8485;hs02:8485;hs03:8485/myhdcluster |
dfs.journalnode.edits.dir |
元数据日志存储目录。配置格式【绝对路径】 |
|
/home/hadoop/work/hadoop/jdata |
dfs.permissions.enabled |
用户权限控制启动开关。 |
true |
false,不配置多租户,可设为false |
dfs.replication |
文件副本数。 |
3 |
3 |
dfs.namenode.name.dir |
元数据存储路径。配置格式【file://绝对路径】 |
|
file:///home/hadoop/work/hadoop/meta |
dfs.datanode.data.dir |
数据节点数据存储路径。配置格式【file://绝对路径】 |
|
file:///home/hadoop/work/hadoop/data |
dfs.ha.automatic-failover.enabled |
NameNode自动切换的功能开关。配置格式【ture/false】 |
|
true |
dfs.client.failover.proxy.provider.myhdcluster |
失败代理,配置文件中没有。 少了会报unknown host错误 |
|
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider |
dfs.client.read.shortcircuit |
允许本地读取datanode块文件开关。配置格式【ture/false】 |
false |
false |
dfs.block.local-path-access.user |
指定允许本地读取块的用户,同dfs.client.read.shortcircuit搭配使用 |
|
hdp |
dfs.datanode.hdfs-blocks-metadata.enabled |
|
false |
使用默认即可 |
dfs.datanode.data.dir.perm |
|
700 |
不配置多租户的话,使用默认700即可 |
dfs.client.file-block-storage-locations.timeout.millis |
|
1000 |
使用默认即可 |
dfs.namenode.handler.count |
Namenode上用于处理客户端,datanode的RPC的线程个数 |
10 |
集群大则该参数调大 |
dfs.datanode.handler.count |
Datanode上用于处理RPC的线程个数 |
3 |
集群大则该参数调大 |
dfs.blocksize |
块大小设置 |
128m |
256m,如果大部分文件都是小于256m,这个参数可以适当调小 |
dfs.datanode.max.transfer.threads |
Hadoop允许打开最大文件数,默认4096,不设置会提示xcievers exceeded错误 |
|
409600 |
dfs.image.transfer.bandwidthPerSec |
当ha失败时,备节点会同步主节点的edit日志。如果edit文件较多,备节点会频繁访问journalnode。而同步带宽不限制,将会把journalnode带宽占完,导致主节点无法访问journalnode,超时挂掉。 |
0 |
1048576 设置为1MB,可根据宽带情况调整。 |
dfs.domain.socket.path |
本地hdfs和dn的通信端口。 |
|
/home/hdp/work/hadoop/hdfs-sockets/dn._PORT |
hdfs-site.xml示例:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--hdfs的nameservice和core-site.xml一致 -->
<property>
<name>dfs.nameservices</name>
<value>myhdcluster</value>
</property>
<!--namenode的名字-->
<property>
<name>dfs.ha.namenodes.myhdcluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myhdcluster.nn1</name>
<value>hm01:8020</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myhdcluster.nn2</name>
<value>hm02:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.myhdcluster.nn1</name>
<value>hm01:8570</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.myhdcluster.nn2</name>
<value>hm02:8570</value>
</property>
<!--datanode数据http访问地址-->
<property>
<name>dfs.datanode.http.address</name>
<value>0.0.0.0:8575</value>
</property>
<!-- JournalNode对NameNode的目录进行共享时,存储数据的路径 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hdp/work/hadoop/jdata</value>
</property>
<!--NN在JN的共享路径下的目录名-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hs01:8485;hs02:8485;hs03:8485/myhdcluster</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hdp/work/hadoop/meta</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hdp/work/hadoop/data</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.myhdcluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.block.local-path-access.user</name>
<value>hdp</value>
</property>
<property>
<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.use.legacy.blockreader.local</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>750</value>
</property>
<property>
<name>dfs.client.file-block-storage-locations.timeout.millis</name>
<value>50000</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>409600</value>
</property>
</configuration>
-
-
- core-site.xml
-
配置项说明:
名称 |
说明 |
默认值 |
建议值 |
fs.defaultFS |
集群名称标识,需要配置同hdfs-site.xml保持一致 |
|
myhdcluster |
ha.zookeeper.quorum |
指定ha用于连接的Zookeeper集群信息。配置格式【主机名1:端口,主机名2:端口,..】 |
|
hs01:8501,hs02:8501,hs03:8501 |
io.compression.codecs |
压缩和解压缩的方式设置 |
|
org.apache.hadoop.io.compress.SnappyCodec |
hadoop.tmp.dir |
临时数据目录,建议不要设置到/tmp目录下 |
|
/home/hdp/work/hadoop/tmp |
hadoop.http.staticuser.user |
web统计用户 |
|
hdp |
io.file.buffer.size |
设置SequenceFile中用到的读/写缓存大小。要设置为系统页面大小的倍数,以byte为单位,默认值4KB(4096)。 |
4096 |
65535 |
dfs.ha.fencing.methods |
隔离机制 |
|
sshfence |
dfs.ha.fencing.ssh.private-key-files |
隔离机制免密码私钥文件 |
|
/home/hdp/.ssh/id_rsa |
fs.trash.interval |
垃圾回收时间,分钟 |
0 |
10080 |
ha.failover-controller.cli-check.rpc-timeout.ms |
ha在失败时的超时时间。 |
20000 |
60000 |
ipc.client.connect.timeout |
namenode连接JN的超时时间。 |
20000 |
60000 |
ipc.client.connect.retry.interval |
namenode连接JN的时间间隔 |
1000 |
10000 |
ipc.client.connect.max.retries |
namenode连接JN的次数,少了可能还没有连上。 |
10 |
100 |
core-site.xml示例
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://myhdcluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hs01:8501,hs02:8501,hs03:8501</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hdp/work/hadoop/tmp</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>hdp</value>
</property>
<!--指定可以在任何IP访问-->
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<!--指定所有用户可以访问-->
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
<!--io缓冲大小-->
<property>
<name>io.file.buffer.size</name>
<value>65535</value>
</property>
<!-- 隔离机制-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免密码登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hdp/.ssh/id_rsa</value>
</property>
<!--本地库压缩,主要使用snappy,多个可用逗号分隔-->
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
</configuration>
-
-
- 指定slaves
-
vi slaves
hs01
hs02
hs03
每个datanode机器名字一行。
-
-
- 工作目录
-
mkdir -p /home/hdp/work/hadoop/logs
mkdir -p /home/hdp/work/hadoop/pids
mkdir -p /home/hdp/work/hadoop/jdata
mkdir -p /home/hdp/work/hadoop/meta
mkdir -p /home/hdp/work/hadoop/data
mkdir -p /home/hdp/work/hadoop/tmp
-
-
- nativelib
-
本地库(zlib,gzip)用于文件压缩,Hadoop默认启用本地库,从$HADOOP_HOME/lib/native/中加载本地库,还需要配置mapred-site.xml。
验证:hadoop checknative
如果加载成功,输出为:
17/06/28 10:28:54 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
17/06/28 10:28:54 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /home/hadoop/soft/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
snappy: true /usr/lib64/libsnappy.so.1
lz4: true revision:10301
bzip2: true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so
-
- 分发
如果不用mapreduce和yarn,此时就可分发程序。
scp hadoop整个目录到其它机器。
scp -r hadoop/ hdp@hm02:~/soft
-
- 格式化
首次启动前先格式化hdfs,NameNode基于Quorum Base共享存储方案,必须先启动JournalNode,以便QuorumJournalManager同步数据。
-
-
- 启动zks
-
在hs01/hs02/hs03上启动zookeeper。
zkServer.sh start
-
-
- 启动JournalNode
-
在JN节点hs01/hs02/hs03上启动。
hadoop-daemon.sh start journalnode
-
-
- 格式化主namenode
-
在hm01上格式化HDFS的namenode节点。
hdfs namenode -format
在倒数第7行左右出现:
INFO common.Storage: Storage directory /home/hdp/work/hadoop/meta has been successfully formatted.
该指令执行成功后,在dfs.namenode.name.dir配置项(配置值为:/home/hdp/work/hadoop/meta)目录下会生成子目录和文件。
-
-
- 启动主namenode
-
启动在hm01上的namenode。
hadoop-daemon.sh start namenode
-
-
- 同步备namenode
-
在hm02上执行命令
hdfs namenode -bootstrapStandby
至此,HDFS集群初始化完毕。
-
-
- 启动备namenode
-
启动hm02上的namenode。
hadoop-daemon.sh start namenode
-
-
- 格式化zkfc
-
在hm01上格式化ZooKeeper集群,目的是在ZooKeeper上建立HA的相应节点,用于保存hadoop集群中NameNode的状态数据。
hdfs zkfc -formatZK
-
-
- 启动zkfc
-
在hm01/hm02上执行。
hadoop-daemon.sh start zkfc
通过页面可以检查namenode的节点状态。
http://hm01:8570
一个是active,一个是standby。
-
-
- 停止NN,JN,ZKFC
-
在hm01/hm02上执行。
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop zkfc
在hs01/hs02/hs03上执行。
hadoop-daemon.sh stop journalnode
集群准备好正常启动。
-
- 启动
- 集群启动
- 启动
在hm01上执行。
如果集群启动有问题,就修改sh文件,调顺序,journal,namenode,zkfc,datanode,yarn。
start-dfs.sh
-
-
- 单点启动
-
1、在hs01/hs02/hs03上执行。
zkServer.sh start
hadoop-daemon.sh start journalnode
2、在hm01/hm02上执行。
hadoop-daemon.sh start namenode
hadoop-daemon.sh start zkfc
3、在hs01/hs02/hs03上执行。
hadoop-daemon.sh start datanode
-
- 验证
1、在hm01上执行,检查文件存储。
hadoop fs -put hdfs-site.xml /
hadoop fs -ls /
hadoop fs -cat /hdfs-site.xml
能够正确查看到文件内容为正常。
2、查看ha状态。
http://hm01:8570,是active。
http://hm02:8570,是standby。
或命令
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
3、切换ha
在hm01上执行
hadoop-daemon.sh stop namenode
手动切换到active,配置自动切换就不能用手动了。
hdfs haadmin -transitionToActive nn1 --forceactive
手动切换到standby
hdfs haadmin -transitionToStandby nn1 --forceactive
4、新加datanode,做集群负载重均衡
start-balancer.sh -threshold 8 #指DN磁盘利用率,默认10。
5、检测压缩本地库
在任意机器上执行。
hadoop checknative
-
- 停止
- 集群停止
- 停止
在hm01上执行。
stop-dfs.sh
-
-
- 单点停止
-
1、在hm01/hm02上执行。
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop zkfc
2、在hs01/hs02/hs03上执行。
hadoop-daemon.sh stop datanode
hadoop-daemon.sh stop journalnode
zkServer.sh stop
- yarn
hm01/hm02互备RM,hs01/hs02/hs03作为NM。
-
- 配置
- mapred-env.sh
- 配置
export HADOOP_MAPRED_LOG_DIR=/home/hdp/work/hadoop/logs
export HADOOP_MAPRED_PID_DIR=/home/hdp/work/hadoop/pids
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
export HADOOP_JOB_HISTORYSERVER_OPTS="-Dmapreduce.hs.audit.logger=INFO,HSAUDIT $HADOOP_JOB_HISTORYSERVER_OPTS"
-
-
- mapred-site.xml
-
MRv2重新命名了MRv1中的所有配置参数,但兼容MRv1中的旧参数。
MRv2参数以【mapreduce】开头,MRv1参数以【mapred】开头。
名称 |
说明 |
默认值 |
建议值 |
io属性 |
|||
mapreduce.task.tmp.dir |
task的临时目录 |
./tmp |
/home/hdp/work/hadoop/mapred/tmp |
mapreduce.map.cpu.vcores |
每个map task可申请的虚拟cpu数 |
1 |
1 |
mapreduce.reduce.cpu.vcores |
每个reduce task可申请的虚拟cpu数 |
1 |
1 |
mapreduce.jobtracker.persist.jobstatus.dir |
job状态信息 |
/jobtracker/jobsInfo |
/home/hdp/work/hadoop/mapred/jobstatus |
mapreduce.output.fileoutputformat.compress |
是否对job启用压缩 |
false |
true |
mapreduce.output.fileoutputformat.compress.type |
压缩类型,NONE, RECORD or BLOCK |
RECORD |
RECORD |
mapreduce.output.fileoutputformat.compress.codec |
压缩编码,用的snappy要提前编译进Hadoop |
org.apache.hadoop.io.compress.DefaultCodec |
org.apache.hadoop.io.compress.SnappyCodec |
mapreduce.map.output.compress |
是否对map压缩 |
false |
true |
mapreduce.map.output.compress.codec |
压缩编码 |
org.apache.hadoop.io.compress.DefaultCodec |
org.apache.hadoop.io.compress.SnappyCodec |
MR YARN Application |
|||
mapreduce.framework.name |
执行mr程序的框架 |
local |
yarn |
yarn.app.mapreduce.am.staging-dir |
提交job的临时目录 |
/tmp/hadoop-yarn/staging |
/home/hdp/work/hadoop/mapred/staging |
Job Notification |
|||
yarn.app.mapreduce.am.resource.mb |
MR AppMaster的总内存 |
1536 |
2048 |
yarn.app.mapreduce.am.resource.cpu-vcores |
MR AppMaster需要的虚拟cpu数 |
1 |
1 |
mapreduce.application.classpath |
MR applications的classpath,逗号分隔 |
无 |
${HADOOP_HOME}/share/hadoop/mapreduce/*,${HADOOP_HOME}/share/hadoop/mapreduce/lib/*
|
mapreduce.app-submission.cross-platform |
可否跨平台提交任务 |
false |
true |
jobhistory |
|||
mapreduce.jobhistory.intermediate-done-dir |
mr历史记录临时目录 |
${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate |
/home/hdp/work/hadoop/mapred/jobhisim |
mapreduce.jobhistory.done-dir |
mr历史记录完成目录 |
${yarn.app.mapreduce.am.staging-dir}/history/done |
/home/hdp/work/hadoop/mapred/jobhisdone |
示例
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- io 属性 -->
<property>
<name>mapreduce.task.tmp.dir</name>
<value>/home/hdp/work/hadoop/mapred/tmp</value>
</property>
<property>
<name>mapreduce.jobtracker.persist.jobstatus.dir</name>
<value>/home/hdp/work/hadoop/mapred/jobstatus</value>
</property>
<!--用本地库压缩-->
<!-- job output压缩 -->
<property>
<name> mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.type</name>
<value>RECORD</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<!--map output压缩-->
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<!-- MR YARN Application -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/home/hdp/work/hadoop/mapred/staging</value>
</property>
<!-- Job Notification -->
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>2048</value>
</property>
<!--可让客户端在window下运行-->
<property>
<name>mapreduce.app-submission.cross-platform</name>
<value>true</value>
</property>
<!-- jobhistory -->
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/home/hdp/work/hadoop/mapred/jobhisim</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/home/hdp/work/hadoop/mapred/jobhisdone</value>
</property>
</configuration>
-
-
- yarn-env.sh
-
如果仅启动HDFS,则无需配置此文件。
名称 |
说明 |
默认值 |
建议值 |
JAVA_HOME |
指明JDK目录 |
系统jdk目录 |
/home/hadoop/soft/jdk1.8.0 |
YARN_HEAPSIZE |
进程分配最大内存空间大小,根据主机内存来确定,单位M |
1000 |
主机上面所有yarn进程使用的内存最大量,如果涉及到复用部署(例如,rm和nm部署在同一台主机上),若单独指定了rm和nm的内存使用量,该值应大于复用进程内存使用量之和。 |
YARN_RESOURCEMANAGER_OPTS |
resoucemanager启动加载参数 |
|
建议在该参数中设置rm的虚拟机参数 |
YARN_RESOURCEMANAGER_HEAPSIZE |
Resoucemanager进程分配最大内存空间大小,根据主机内存来确定,单位M |
1000 |
主机上面rm进程使用的内存最大量, 建议值2G |
YARN_NODEMANAGER_OPTS |
nodemanager启动加载参数 |
|
建议在该参数中设置nm的虚拟机参数 |
YARN_NODEMANAGER_HEAPSIZE |
nodemanager进程分配最大内存空间大小,根据主机内存来确定,单位M |
1000 |
主机上面rm进程使用的内存最大量,建议值2G,主机其它内存留于container |
YARN_LOG_DIR |
进程日志存放目录 |
$HADOOP_HOME/logs |
|
YARN_PID_DIR |
进程当前进程号存放目录 |
/tmp |
|
yarn-env.sh示例
# User for YARN daemons
export HADOOP_YARN_USER=${HADOOP_YARN_USER:-yarn}
# resolve links - $0 may be a softlink
export YARN_CONF_DIR="${YARN_CONF_DIR:-$HADOOP_HOME/etc/hadoop}"
export YARN_LOG_DIR=/home/hadoop/work/hadoop/logs
export YARN_PID_DIR=/home/hadoop/work/hadoop/pids
# some Java parameters
#export JAVA_HOME=/home/hadoop/soft/jdk1.8.0
if [ "$JAVA_HOME" != "" ]; then
#echo "run java in $JAVA_HOME"