本次配置是使用centos7版本
1.1、Linux基础环境配置 1.查看ip地址并记录三台机子的ip地址
ip a2.修改主机名
1) hostnamectl set-hostname master 2) hostnamectl set-hostname slave1 3) hostnamectl set-hostname slave2 //注:改完主机名之后记得要bash生效3.主机映射
vi /etc/hosts
//hosts文件内容:
格式:主机ip 主机名
例如:192.168.90.126 master
192.168.90.88 slave1
192.168.90.228 slave2
//注意:hosts文件三台机子都要改
1.2、时钟同步
1.修改配置文件
vi /etc/sysconfig/ntpd
//在文件中加:
YS_HWLOCK=yes
//注意:三台机子都要加上
2.同步时间
systemctl start ntpd
date ----> 查看时间的命令
//注意:三台机子都要执行这个命令
注意:如果这种同步时间的命令无法同步三台机子的时间,请按照下面操作步骤来做:
//语法格式:date -s 字符串 //观察三台机子的系统时间,然后执行命令同步时间。date命令验证是否同步成功 例如: date -s "2021-04-29 15:51:50" //注意:三台机子都要执行1.3、关闭防火墙
systemctl disable firewalld.service -----> 关闭防火墙自启
//验证防火墙是否关闭
systemctl status firewalld.service
//注意:三台自己都要关闭
1.4、SSH免密
1.注意:进行免密配置之前要进入hadoop用户下,如果没有请执行:useradd hadoop添加用户
2.这里的免密配置使用的是之前学习的命令,并不是该平台的命令,因为这种方法要比平台上的命令要简单
1.生成秘钥ssh-keygen -t rsa
//在三台机子上分别执行,期间不用输入任何命令,直接回车就可以
2.分享秘钥
//分享秘钥给其他两台机子和自己
如:如果在master上生成的秘钥,要把秘钥发给其他两台机子和自己
//这里以 master slave1 slave2举例
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
//执行完上述命令后,验证
ssh master
ssh slave1
.....
1.5、ZooKeeper安装部署
1、Jdk的安装和配置
1) 解压缩
tar -zxvf 所要解压的文件的位置 -C 解压到的位置
例如:tar -zxvf /opt/software/jdk-8.. -C /usr/local/src
2) 改名字
mv 原文件名字 改后名字
例如:mv jdk-8u... java -----> 这里这个命令是进到了解压缩后文件的目录下
2、配置Java环境变量
vi /etc/profile -------> 配置环境变量的文件
命令行模式下 输入G 直接跳到最后一行 ,为了省时间
//profile文件中增加的内容:
export JAVA_HOME=/usr/local/src/java ------> 这里的路径是你安装java的目录
export PATH=$PATH:$JAVA_HOME/bin ------> 将JAVA安装目录加入PATH路径
//注意:改完之后一定要执行 source /etc/profile
3、分发Java
scp -r /usr/local/src/java/ root@slave1:/usr/local/src scp -r /usr/local/src/java/ root@slave2:/usr/local/src3、安装ZooKeeper 1) 解压缩
和上面解压缩类似,就废话不多说了
2) 改名字和上面解压缩类似,就废话不多说了
3) 创建ZooKeeper数据目录//其实就是创建两个目录 data(传输数据的) logs(记录日志) //两个目录都是在zookeeper文件目录下创建的,注意自己的路径 mkdir /usr/local/src/zookeeper/data mkdir /usr/local/src/zookeeper/logs4)配置ZooKeeper环境变量
vi /etc/profile -------> 配置环境变量的文件
命令行模式下 输入G 直接跳到最后一行 ,为了省时间
//profile文件中增加的内容:
export ZK_HOME=/usr/local/src/zookeeper ------> 这里的路径是你安装zookeeper的目录
export PATH=$PATH:$ZK_HOME/bin ------> 将JAVA安装目录加入PATH路径
//注意:改完之后一定要执行 source /etc/profile
5) 修改zoo.cfg
进入zookeeper 的 conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
//zoo.cfg文件内容:
修改:dataDir=/usr/local/src/zookeeper/data ---->路径问题一定要注意
增加: dataLogDir=/usr/local/src/zookeeper/logs
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
//注意上面的主机名:这里是以 master slave1 slave2 为例
6)myid文件
进入到zookeeper 的 data 目录后 创建myid文本文件 最安全的方法是vi myid 后 自己手动 输入数字 17)分发ZooKeeper
scp -r /usr/local/src/zookeeper/ root@slave1:/usr/local/src scp -r /usr/local/src/zookeeper/ root@slave2:/usr/local/src //注意:分发过去后记得改一下myid文件,slave1的myid文件里面输入1,slave2的myid文件里面输入28)Zookeeper的用户切换
//切换zookeeper属于hadoop用户 chown -R hadoop:hadoop /usr/local/src/zookeeper8) 启动ZooKeeper
su hadoop 切换用户为hadoop用户
source /etc/profile ----> 防止之前配置的环境变量为生效
zkServer.sh start //三台机子都要启动
zkServer.sh status //查看zookeeper的状态信息 状态有leader follower follower
1.6、HA参数配置
切换为root,不是普通用户hadoop了,注意!!! 因为:hadoop权限不够
1.解压缩hadoop 并改名为hadoop这里再不会,我也木有办法
2.配置hadoop环境vi /etc/profile -------> 配置环境变量的文件
命令行模式下 输入G 直接跳到最后一行 ,为了省时间
//profile文件中增加的内容:
export HADOOP_PREFIX=$HADOOP_HOME
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 HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
//注意:改完之后一定要执行 source /etc/profile
3.配置hadoop-env.sh
这个文件在hadoop 目录下的 hadoop 下的 etc 下 修改JAVA_HOME的目录 JAVA_HOME=/usr/local/src/java4.core-site.xml
fs.defaultFS
hdfs://mycluster
hadoop.tmp.dir
file:/usr/local/src/hadoop/tmp
ha.zookeeper.quorum
master:2181,slave1:2181,slave2:2181
ha.zookeeper.session-timeout.ms
30000
ms
fs.trash.interval
1440
5.hdfs-site.xml
dfs.qjournal.start-segment.timeout.ms
60000
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
master,slave1
dfs.namenode.rpc-address.mycluster.master
master:8020
dfs.namenode.rpc-address.mycluster.slave1
slave1:8020
dfs.namenode.http-address.mycluster.master
master:50070
dfs.namenode.http-address.mycluster.slave1
slave1:50070
dfs.namenode.shared.edits.dir qjournal://master:8485;slave1:8485;slave2:8485/mycluster
dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
shell(/bin/true)
dfs.permissions.enabled
false
dfs.support.append
true
dfs.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa
dfs.replication
2
dfs.namenode.name.dir
/usr/local/src/hadoop/tmp/hdfs/nn
dfs.datanode.data.dir
/usr/local/src/hadoop/tmp/hdfs/dn
dfs.journalnode.edits.dir
/usr/local/src/hadoop/tmp/hdfs/jn
dfs.ha.automatic-failover.enabled
true
dfs.webhdfs.enabled
true
dfs.ha.fencing.ssh.connect-timeout
30000
ha.failover-controller.cli-check.rpc-timeout.ms
60000
6) mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
master:10020
mapreduce.jobhistory.webapp.address
master:19888
7) yarn-site.xml
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
yrc
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
master
yarn.resourcemanager.hostname.rm2
slave1
yarn.resourcemanager.zk-address
master:2181,slave1:2181,slave2:2181
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.log-aggregation-enable
true
yarn.log-aggregation.retain-seconds
86400
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
8) slaves
master slave1 slave29) 创建目录
mkdir -p /usr/local/src/hadoop/tmp/hdfs/nn
mkdir -p /usr/local/src/hadoop/tmp/hdfs/dn
mkdir -p /usr/local/src/hadoop/tmp/hdfs/jn
mkdir -p /usr/local/src/hadoop/tmp/logs
目录结构图:
--------hadoop
--------tmp
------------hdfs
----------------nn
----------------dn
----------------jn
------------logs
10) 分发文件
scp -r /etc/profile root@slave1:/etc/ scp -r /etc/profile root@slave2:/etc/ scp -r /usr/local/src/hadoop root@slave1:/usr/local/src/ scp -r /usr/local/src/hadoop root@slave2:/usr/local/src/11) 修改目录所有者和所有者组
//master chown -R hadoop:hadoop /usr/local/src/hadoop ll /usr/local/src/ //slave1 chown -R hadoop:hadoop /usr/local/src/hadoop/ //slave2 chown -R hadoop:hadoop /usr/local/src/hadoop/12) 生效环境变量
su hadoop
source /etc/profile
//注意:三台机子都要执行
1.7,HA的启动
1)启动守护进程
//在master上启动 hadoop-daemons.sh start journalnode2)初始化namenode
hdfs namenode -format
如果格式化失败
//删除hadoop中的tmp和data目录里面的东西,然后重新格式化3) 注册ZNode
//在master上启动 hdfs zkfc -formatZK4)启动hdfs
//在master上启动 start-dfs.sh5)启动yarn
//在master上启动 start-yarn.sh6) 同步master数据
[hadoop@master ~]$ scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave1:/usr/local/src/hadoop/tmp/hdfs/nn/ [hadoop@master ~]$ scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave2:/usr/local/src/hadoop/tmp/hdfs/nn/7)resourcemanager和namenode
//salve1节点上 yarn-daemon.sh start resourcemanager hadoop-daemon.sh start namenode8) MapReduce任务历史服务器
//master节点上 yarn-daemon.sh start proxyserver mr-jobhistory-daemon.sh start historyserver9) 节点进程 (9 8 5)
| master | slave1 | slave2 |
|---|---|---|
| DFSZKFailoverController | Jps | DataNode |
| NameNode | ResourceManager | Jps |
| DataNode | NameNode | QuorumPeerMain |
| Jps | DFSZKFailoverController | NodeManager |
| QuorumPeerMain | NodeManager | JournalNode |
| JobHistoryServer | JournalNode | |
| JournalNode | DataNode | |
| ResourceManager | QuorumPeerMain | |
| NodeManager |
vi a.txt //可以在任意目录下创建2)在hdfs创建文件夹
hadoop fs -mkdir /input3)将创好的a.txt上传hdfs上
hadoop fs -put 目标文件 集群上的目录位置
//例如:
hadoop fs -put ~/a.txt /input
4) 测试
//进入到mapreduce后(在hadoop安装目录下) hadoop jar hadoop-mapreduce-examples-2.7.1.jar wordcount /input/a.txt /output5) 查看结果
hadoop fs -lsr /output
hadoop fs -cat /output/part-r-00000
//注:也可以直接在集群上打开
1.9 高可用验证
1) 自动切换服务状态
//在master上 hdfs haadmin -failover --forcefence --forceactive slave1 master //查看状态 hdfs haadmin -getServiceState slave1 hdfs haadmin -getServiceState master2)手动切换服务状态
//在master上停止并启动namenode
hadoop-daemon.sh stop namenode
//查看状态
[hadoop@master ~]$ hdfs haadmin -getServiceState master
[hadoop@master ~]$ hdfs haadmin -getServiceState slave1
[hadoop@master ~]$ hadoop-daemon.sh start namenode
//查看状态
[hadoop@master ~]$ hdfs haadmin -getServiceState slave1
[hadoop@master ~]$ hdfs haadmin -getServiceState master



