本次配置是使用centos7版本
1.1、Linux基础环境配置 1.查看ip地址并记录三台机子的ip地址
ip a
2.修改主机名
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/src
3、安装ZooKeeper
1) 解压缩
和上面解压缩类似,就废话不多说了 🙏
2) 改名字和上面解压缩类似,就废话不多说了 🙏
3) 创建ZooKeeper数据目录//其实就是创建两个目录 data(传输数据的) logs(记录日志)
//两个目录都是在zookeeper文件目录下创建的,注意自己的路径
mkdir /usr/local/src/zookeeper/data
mkdir /usr/local/src/zookeeper/logs
4)配置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 后 自己手动 输入数字 1
7)分发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文件里面输入2
8)Zookeeper的用户切换
//切换zookeeper属于hadoop用户
chown -R hadoop:hadoop /usr/local/src/zookeeper
8) 启动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/java
4.core-site.xml
<!-- 指定hdfs的nameservice为mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<!-- hadoop链接zookeeper的超时时长设置 -->
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>30000</value>
<description>ms</description>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
5.hdfs-site.xml
<!-- journalnode集群之间通信的超时时间 -->
<property>
<name>dfs.qjournal.start-segment.timeout.ms</name>
<value>60000</value>
</property>
<!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致 dfs.ha.namenodes. [nameservice id]为在nameservice中的每一个NameNode设置唯一标示符。配置一个逗号分隔的NameNode ID列表。这将是被 DataNode识别为所有的NameNode。如果使用"mycluster"作为nameservice ID,并且使用"master"和"slave1"作为 NameNodes标示符 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- mycluster下面有两个NameNode,分别是master,slave1 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>master,slave1</value>
</property>
<!-- master的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.master</name>
<value>master:8020</value>
</property>
<!-- slave1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.slave1</name>
<value>slave1:8020</value>
</property>
<!-- master的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.master</name>
<value>master:50070</value>
</property>
<!-- slave1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.slave1</name>
<value>slave1:50070</value>
</property>
<!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表
该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
journalId推荐使用nameservice,默认端口号是:8485 -->
<property>
<name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;slave1:8485;slave2: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.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/src/hadoop/tmp/hdfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/src/hadoop/tmp/hdfs/dn</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop/tmp/hdfs/jn</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 启用webhdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
<value>60000</value>
</property>
6) mapred-site.xml
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定mapreduce jobhistory地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 任务历史服务器的web地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
7) yarn-site.xml
<!-- Site specific YARN configuration properties -->
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181</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>86400</value>
</property>
<!-- 启用自动恢复 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
8) slaves
master
slave1
slave2
9) 创建目录
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 journalnode
2)初始化namenode
hdfs namenode -format
如果格式化失败
//删除hadoop中的tmp和data目录里面的东西,然后重新格式化
3) 注册ZNode
//在master上启动
hdfs zkfc -formatZK
4)启动hdfs
//在master上启动
start-dfs.sh
5)启动yarn
//在master上启动
start-yarn.sh
6) 同步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 namenode
8) MapReduce任务历史服务器
//master节点上
yarn-daemon.sh start proxyserver
mr-jobhistory-daemon.sh start historyserver
9) 节点进程 (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 /input
3)将创好的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 /output
5) 查看结果
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 master
2)手动切换服务状态
//在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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)