文章目录
一、准备工作
1.修改Linux主机名
2.修改IP
3.修改主机名和IP的映射关系 /etc/hosts
https://blog.csdn.net/hongchenshijie/article/details/102669331
4.关闭防火墙并设置为开机不自启
service iptables stop
5.ssh免登陆
https://blog.csdn.net/hongchenshijie/article/details/102696742
6.安装JDK,配置环境变量等
https://blog.csdn.net/hongchenshijie/article/details/102667827
7.注意集群时间要同步
https://blog.csdn.net/hongchenshijie/article/details/102775603
8.安装好zookeeper
https://blog.csdn.net/hongchenshijie/article/details/103486179
二、安装配置hadoop
提供已编译过 的 cdh 版本的hadoop
链接: https://pan.baidu.com/s/1PK32pd0ZIe1i_oBqFy1H1Q 提取码: 78dm 复制这段内容后打开百度网盘手机App,操作更方便哦
1. 上传到集群
2. 解压
tar -zxvf hadoop-2.6.0-cdh5.14.0.tar.gz -C 安装的目录
3.配置环境变量
3.1 进入 etc/profile.d 目录
cd /etc/profile.d/
3.2 创建一个hadoop.sh 文件
vim hadoop.sh
3.3 添加以下内容 (先按i
进入编辑模式)
export HADOOP_HOME=安装的目录/hadoop-2.6.0-cdh5.14.0
export PATH=$PATH:$HADOOP_HOME/bin
4.修改core-site.xml配置文件
4.1 进入hadoop 配置文件目录
cd $HADOOP_HOME/etc/hadoop
4.2 修改core-site.xml (记得改为直接的节点名 我的三台节点名称分别是 hadoop01,hadoop02,hadoop03)
在 configuration 中添加以下内容
<!-- 集群名称在这里指定!该值来自于hdfs-site.xml中的配置 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<!-- 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/servers/hadoop-2.6.0-cdh5.14.0/HAhadoopDatas/tmp</value>
</property>
<!-- ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
5.修改hdfs-site.xml
5.1 打开hdfs-site.xml
vim hdfs-site.xml
在configuration中添加以下内容 (注意修改节点名)
<!--指定hdfs的nameservice为cluster1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<!-- cluster1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nn1</name>
<value>hadoop01:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc- address.cluster1.nn2</name>
<value>hadoop02:8020</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/cluster1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/export/install/hadoop-2.6.0-cdh5.14.0/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 指定该集群出故障时,哪个实现类负责执行故障切换 -->
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
6.修改 mapred-site.xml
5.1 拷贝以下 mapred-site.xml.template 并 命名为mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
打开 mapred-site.xml 文件
vim mapred-site.xml
在configuration中添加以下内容
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
7.修改 yarn-site.xml
打开 yarn-site.xml 配置文件,节点名称记得修改
vim yarn-site.xml
在 configuration 中添加以下内容
<!-- 开启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>hadoop01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop02</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
8.修改slaves
打开 slaves
vim slaves
删除localhost,并添加以下内容
改为自己的节点名
hadoop01
hadoop02
hadoop03
三、将软件拷贝到所有节点
scp -r hadoop-2.6.0-cdh5.14.0 hadoop02:$PWD
scp -r hadoop-2.6.0-cdh5.14.0 hadoop03:$PWD
四、启动(由上到下执行)
1.启动zookeeper集群
每台节点都要执行
bin/zkServer.sh start
bin/zkServer.sh status
//如果是根据我提供的博客配置的zookeeper 可以用脚本键启动上述两条命令就可以省略
zkstart-all.sh
2.手动启动journalnode
每台节点都要执行
$HADOOP_HOME/hadoop-daemon.sh start journalnode
//使用jsp 进行检查发现 多了JournalNode进程
3.格式化namenode
hdfs namenode -format
//格式化后会在根据core-site.xml中的hadoop.tmp.dir配置的目录下生成个hdfs初始化文件
4.把hadoop.tmp.dir配置的目录下所有文件拷贝到另一台namenode节点所在的机器
cd $HADOOP_HOME/HAhadoopDatas
scp -r tmp hado0p02:$PWD
5. 格式化ZKFC(在active上执行即可) 也就是第一个节点
hdfs zkfc -formatZK
6.启动HDFS 在第一个节点执行
$HADOOP_HONE/sbin/start-dfs.sh
7.启动yarn
start-yarn.sh
8.手动在standby上手动启动备份的 resourcemanager (应该为第二个节点)
yarn-daemon.sh start resourcemanager
五、验证
1.验证 hdfs
http://第一个节点的ip地址:50070
//看到以下内容
NameNode 'node01:8020' (active)
http://第二个节点的ip地址:50070
//看到以下内容
NameNode 'node01:8020' (standby)
2.验证HDFS HA
//首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
//然后再kill掉active(第一个节点)的NameNode
kill -9 <pid of NameNode>
//通过浏览器访问:
http://第二个节点ip地址:50070
//看到以下内容
NameNode 'hadoop02:8020' (active)
//这个时候node02上的NameNode变成了active
//在执行命令:
hadoop fs -ls /
-rw-r--r-- 3 root supergroup 1926 2019-03-11 15:10 /profile
//刚才上传的文件依然存在!!!
//手动启动那个挂掉的NameNode
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
//通过浏览器访问:
http://第一个节点的ip地址:50070
//看到以下内容
NameNode 'hadoop01:8020' (standby)