一、环境资源
JDK和Hadoop存在版本兼容问题,选择安装包的时候一定要考虑到两个软件的版本兼容,我这里选择的安装版本如下:
- JDK1.8:https://pan.baidu.com/s/1Rm5ErmvKFjVmwx1uAF90vQ 提取码:kpre
- Hadoop2.7:https://pan.baidu.com/s/1xynMsryyTDZBn_ApgbuTSA 提取码:ir1l
- zookeeper-3.4:https://pan.baidu.com/s/1SpIMlWfKgnxd3pL1PIu5IQ 提取码:0s3a
二、服务器准备
本次环境配置共需要4台服务器,服务器之间相互可以Ping通,各个节点功能如下图:
三、检查四台服务器时间
要保证服务器之间的时间误差保持在几秒内,否则会造成某些角色进程不能正常启动
date //查看服务器时间
date -s "2020-07-07 06:00:00" //设置服务器时间
四、为各个服务器分别设置别名
- 打开配置文件
vi /etc/sysconfig/network //打开network文件
- 增加配置,别名可以根据需要设置,此处仅为示例
- 分别增加IP别名映射
vi /etc/hosts //打开hosts文件
- 增加映射配置 ,IP和别名之间的映射,要和network中的别名相对应
五、各个服务器分别禁用SELinux
vi /etc/sysconfig/selinux //打开selinux文件
- 将 SELINUX设置为disabled
六、各个服务器分别关闭防火墙
systemctl stop firewalld.service //停止firewall
systemctl disable firewalld.service //禁止firewall开机启动
七、分发秘钥文件
将NameNode(192.168.1.6、192.168.1.7)点公钥分发给其他服务器,实现NameNode(192.168.1.6、192.168.1.7)到其他角色服务器的SSH免密登陆
- 生产NameNode(192.168.1.6/192.168.1.7)节点的秘钥文件
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa //生成秘钥文件
- 本地安装
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys //本地安装秘钥
- 各个节点分别登陆一下本地,以生成本机的.ssh文件目录
ssh localhost
- 将NameNode(192.168.1.6)的公钥分别发送到192.168.1.7、192.168.1.8、192.168.1.9
cd ~/.ssh/ //切换到公钥所在目录
scp id_dsa.pub 192.168.1.7:`pwd`/node606.pub //将公钥发送到.7节点当前目录,并重命名公钥文件,以便区分是哪个服务器的公钥文件
- 192.168.1.7、192.168.1.8、192.168.1.9分别安装接收到的公钥文件
cat ~/.ssh/node606.pub >> ~/.ssh/authorized_keys //安装公钥文件
- 192.168.1.7和192.168.1.6操作步骤一样,此处不再重复
八、NameNode(192.168.1.6)安装JDK
- 将Java安装文件上传到服务器上。
- 将安装文件解压缩,并记录jdk解压文件根目录
tar -zxvf 文件名 解压目录 //解压到当前目录时,可以省略解压目录
- 配置JDK环境变量,打开配置文件,在文件末尾加入JDK配置,配置内容如截图所示
vi /etc/profile
- 刷新环境变量:输入命令,之间刷新
source /etc/profile
- 输入 jps 命令,如果出现jdk进程信息,说明JDK环境配置成功
- 通过scp命令将192.168.1.6)的JDK分别发送到192.168.1.7、192.168.1.8、192.168.1.9
九、192.168.1.6 安装配置Hadoop
- 将Hadoop安装文件上传到服务器上
- 将Hadoop安装文件解压,并记录下Hadoop的根目录
tar -zxvf 文件名 解压目录 //解压到当前目录时,可以省略解压目录
- 配置Hadoop环境变量,在/etc/profile末尾加上对应的配置信息
vi /etc/profile
- 配置Hadoop的Java环境变量:需要为Hadoop根目录下,ect/hadoop/下的hadoop-env.sh、mapred-env.sh、yarn-env.sh三个文件分别设置Java环境变量,将JAVA_HOME设置为我们安装的Java根目录
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
- 配置core-site.xml,文件同样在Hadoop根目录下的ect/hadoop/目录中,需要在文件中,加入如下配置
vi core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value> //mycluster 在hdfs-site.xml中定义的集群ID
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/ha</value> //临时存放目录
</property>
<property>
<name>ha.zookeeper.quorum</name> //定义ZooKeeper节点
<value>192.168.1.7:2181,192.168.1.8:2181,192.168.1.9:2181</value>
</property>
- 配置hdfs-site.xml,文件同样在Hadoop根目录下的ect/hadoop/目录中
vi hdfs-site.xml
<property>
<name>dfs.replication</name> //备份数
<value>2</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value> //集群ID
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name> //nameNode ID
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name> //nameNode 节点 rpc 信息
<value>192.168.1.6:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name> //nameNode 节点 rpc 信息
<value>192.168.1.7:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name> //nameNode 节点 http 信息
<value>192.168.1.6:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name> //nameNode 节点 http 信息
<value>192.168.1.7:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name> //journalNode 主机信息
<value>qjournal://192.168.1.6:8485;192.168.1.7:8485;192.168.1.8:8485/mycluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name> //代理类
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name> //journalNode 存放目录
<value>/var/hadoop/ha/jn</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name> //高可用验证方式
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name> //ssh私钥
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name> //设置为自动切换NameNode
<value>true</value>
</property>
- 配置slaves文件:将DataNode各节点IP写入文件中
vi slaves
十、将JDK和Hadoop、/etc/profile文件分发到其他服务器上
scp -r /usr/java/jdk1.8.0_172 192.168.1.7:/usr/java/ //要保证发送、接收目录存在
scp -r /usr/Hadoop/hadoop-2.7.3 192.168.1.7:/usr/Hadoop/ //要保证发送、接收目录存在
scp /etc/profile 192.168.1.7:/etc/profile //发送环境变量文件
source /etc/profile //刷新环境变量信息
十一、安装配置Zookeeper
- 将Zookeeper安装文件上传到 192.168.1.7 上。
- 将安装文件解压缩,并记录Zookeeper解压文件根目录
tar -zxvf 文件名 解压目录 //解压到当前目录时,可以省略解压目录
- 进入zookeeper安装目录,进入conf文件夹,将zoo_sample.cfg重命名zoo.cfg
- 写入配置信息,修改数据存储位置,并写入zookeeper节点信息:节点信息中,需要为每一台参与到zookeeper集群中的节点指定编号,编号必须为数字;
- 通过scpm命令,将zookeeper分发到191.168.1.8和191.168.1.9中;
- 在192.168.1.7、192.168.1.8、192.168.1.9中,分别创建zookeeper的配置文件中,数据存放文件夹
mkdir -p /var/zookeeper
- 在192.168.1.7、192.168.1.8、192.168.1.9 的数据目录下,分别创建myid文件,并写入配置文件中的编号,以标记该节点,需要注意的是,写入的数字,是配置文件中,节点的编号
echo 1 > /var/zookeeper/myid // 1 是192.167.1.7 在zookeeper配置文件中的编号
- 配置JDK环境变量(192.168.1.7、192.168.1.8、192.168.1.9 都需要加上zookeeper环境变量配置),打开配置文件,在文件末尾加入JDK配置,配置内容如截图所示
vi /etc/profile
- 刷新环境变量:输入命令,直接刷新
source /etc/profile
十二、启动集群
- 启动zookeeper集群:在192.168.1.7、192.168.1.8、192.168.1.9中分别执行启动命令,启动zookeeper集群
zkServer.sh start
- 启动journalNode:在192.168.1.6、192.168.1.7、192.168.1.8中分别执行启动命令
hadoop-daemon.sh start journalnode
- 格式化hdfs:192.168.1.6(配置文件中的nameNode)节点上格式化,出现successfully表示格式化成功(每个Hadoop只需在第一次进行格式化)。
hdfs namenode -format
- 启动格式化过的nameNode(192.168.1.6)节点
hadoop-daemon.sh start namenode
- 将初始化的nameNode元数据信息,拷贝到另外一个nameNode节点,在192.168.1.7中,执行该命令
hdfs namenode -bootstrapStandby
- 在zookeeper上,注册hdfs信息,在192.168.1.6节点上,执行下方命令
hdfs zkfc -formatZK
- 启动集群:在192.168.1.6执行Hadoop启动命令。
start-dfs.sh
- 访问Hadoop:访问地址是 你的NameNodeIP:50070,出现这个页面,代表整个配置完成,如果出错,Hadoop会在根目录的log目录下生产日志文件,不同节点的日志,会存放在对应服务器上,可以根据日志,调整配置。
十三、后期使用启动顺序
高可用环境,在首次启动时,因为需要初始化各方功能,因此过程较为复杂,后续使用过程中,启动就更简单,具体步骤如下:
- 启动 Zookeeper(仅需在其中一个NameNode节点启动即可)
zkServer.sh start
- 启动Hadoop(仅需在其中一个NameNode节点启动即可)
start-dfs.sh