前言:
准备好三台虚拟机hd01,hd02,hd03(机器名后面会用到,如果更改请修改相关配置文件)
并提前安装好了wget、vim、更换了yum源、配置好了机器名和固定ip地址、关闭了防火墙;
安装并配置好jdk(以上步骤之前的文章都写过,并且已经有相应脚本,可以一键完成)
一、准备工作
将连接三台虚拟机的XShell链接都开启,然后点下面的按钮,能够同时操作三台机器。
1.无密登录(同步)
多机器多链接一起操作:
# 做ssh 公私钥 无秘
ssh-keygen -t rsa -P ''
# copy 公钥到 hd01 hd02 hd03
ssh-copy-id root@hd01
ssh-copy-id root@hd02
ssh-copy-id root@hd03
#回车
2.所有服务器同步时间(同步)
# 安装chrony
yum -y install chrony
#配置chrony
vim /etc/chrony.conf
注释掉server 0.centos.pool.ntp.org iburst等4行,添加配置:
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
#启动chrony
systemctl start chronyd
3.安装psmisc工具包(同步)
(linux命令工具包 namenode主备切换时要用到 只需要安装在两个namenode节点上)
yum install -y psmisc
二、安装zookeeper集群
1.配置文件
先只操作hd01,稍后复制到其他机器上。
将安装包传入hd01
#解压zookeeper
tar -zxf [文件]
#移动并改名(路径名尽量为版本名)
mv zookeeper-3.4.5-cdh5.14.2 soft/zk345
# 拷贝并配置zoo.cfg
cd /opt/soft/zk234/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
配置文件:
#修改路径:
dataDir=/opt/soft/zk345/data
#最后加上:
server.1=hd01:2888:3888
server.2=hd02:2888:3888
server.3=hd03:2888:3888
#在上面改好的路径下创建myid文件(不同主机的数字不同,与上面相对应)
cd ..
mkdir data
echo "1"> data/myid
#拷贝以上文件给其他集群虚拟机2
scp -r /opt/soft/zk345/ root@hd02:/opt/soft/zk345
scp -r /opt/soft/zk345/ root@hd03:/opt/soft/zk345
#记得更改myid文件数字
vim /opt/soft/zk345/data/myid
2或3
2.配置环境变量
(多机共同操作)
vim /etc/profile
添加如下路径
#zookeeper
export ZOOKEEPER_HOME=/opt/soft/zk345
export PATH=SPATH:$ZOOKEEPER_HOME/bin
#重启环境变量
source /etc/profile
#启动集群zookeeper
zkServer.sh start
jps查看进程,若出现以下进程证明上述步骤正确
三、安装Hadoop集群
1.在单台机上配置hadoop环境 创建文件夹
# 解压
tar -zxf hadoop-2.6.0-cdh5.14.2.tar.gz
# 移动到自己的安装文件夹下
mv hadoop-2.6.0-cdh5.14.2 soft/hadoop260
# 添加对应各个文件夹,后面会用到
mkdir -p /opt/soft/hadoop260/tmp
mkdir -p /opt/soft/hadoop260/dfs/journalnode_data
mkdir -p /opt/soft/hadoop260/dfs/edits
mkdir -p /opt/soft/hadoop260/dfs/datanode_data
mkdir -p /opt/soft/hadoop260/dfs/namenode_data
2.修改配置文件
①hadoop-env.sh
vim /opt/soft/hadoop260/etc/hadoop/hadoop-env.sh
#修改两处路径
export JAVA_HOME=/opt/soft/jdk180
export HADOOP_CONF_DIR=/opt/soft/hadoop260/etc/hadoo
②core-site.xml
vim /opt/soft/hadoop260/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hacluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:///opt/soft/hadoop260/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hd01:2181,hd02:2181,hd03:2181</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
③hdfs-site.xml
vim /opt/soft/hadoop260/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///opt/soft/hadoop260/dfs/namenode_data</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///opt/soft/hadoop260/dfs/datanode_data</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>hacluster</value>
</property>
<property>
<name>dfs.ha.namenodes.hacluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hacluster.nn1</name>
<value>hd01:9000</value>
</property>
<property>
<name>dfs.namenode.servicepc-address.hacluster.nn1</name>
<value>hd01:53310</value>
</property>
<property>
<name>dfs.namenode.http-address.hacluster.nn1</name>
<value>hd01:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hacluster.nn2</name>
<value>hd02:9000</value>
</property>
<property>
<name>dfs.namenode.servicepc-address.hacluster.nn2</name>
<value>hd02:53310</value>
</property>
<property>
<name>dfs.namenode.http-address.hacluster.nn2</name>
<value>hd02:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hd01:8485;hd02:8485;hd03:8485/hacluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/soft/hadoop260/dfs/journalnode_data</value>
</property>
<property>
<name>dfs.namenode.edits.dir</name>
<value>/opt/soft/hadoop260/dfs/edits</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hacluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.premissions</name>
<value>false</value>
</property>
</configuration>
④mapred.site.xml
需要先复制再修改
cd /opt/soft/hadoop260/etc/hadoop
cp mapred-site.xml.template mapred.site.xml
vim mapred.site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hd01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hd01:19888</value>
</property>
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
</configuration>
⑤yarn-site.xml
vim yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>hayarn</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hd02</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hd03</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hd01:2181,hd02:2181,hd03:2181</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hd03</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
⑥更改slaves文件
vim slaves
#删掉文件里原本的 localhost
#更改为:
hd01
hd02
hd03
3.复制给其他机器
scp -r hadoop260/ root@hd02:/opt/soft/
scp -r hadoop260/ root@hd03:/opt/soft/
(建议在此处多机快照)
4.配置环境变量
(多机操作)
vim /etc/profile
#hadoop
export HADOOP_HOME=/opt/soft/hadoop260
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
重启环境变量
source /etc/profile
四、启动Hadoop集群
1.启动zookeeper(多机)
zkServer.sh start
检查出现QuorumPeerMain进程,正确。
2.启动JournalNode(多机)
hadoop-daemon.sh start journalnode
检查出现JournalNode进程,正确。
3.格式化hd01的namenode(单机)
hdfs namenode -format
4.将hd01上的Namenode的元数据复制到hd02相同位置(单机)
scp -r /opt/soft/hadoop260/dfs/namenode_data/current/ root@hd02:/opt/soft/hadoop260/dfs/namenode_data
5.在hd01或hd02格式化故障转移控制器zkfc(单机)
hdfs zkfc -formatZK
6.在hd01上启动dfs服务(单机)
start-dfs.sh
hd01: DFSZKFailoverController、DataNode、NameNode
hd02: DFSZKFailoverController、DataNode、NameNode
hd03: DataNode
多机多出上述进程,正确。
7.在hd03上启动yarn服务(单机)
start-yarn.sh
hd01: NodeManager
hd02: NodeManager
hd03: ResourceManager、NodeManager
多机多出上述进程,正确。
8.在hd01上启动history服务器(单机)
mr-jobhistory-daemon.sh start historyserver
hd01多出JobHistoryServer进程,正确。
9.在hd02上启动resourcemanager服务(单机)
yarn-daemon.sh start resourcemanager
hd02也有ResourceManager进程,正确。
当检查进程全部无误时,证明启动成功,可以查看验证:
# 在 hd01 上查看服务状态hdfs haadmin -getServiceState nn1 #activehdfs haadmin -getServiceState nn2 #standby# 在 hd03 上查看 resourcemanager 状态yarn rmadmin -getServiceState rm1 #standbyyarn rmadmin -getServiceState rm2 #active