阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop完全分布式搭建部署

545次阅读
没有评论

共计 9980 个字符,预计需要花费 25 分钟才能阅读完成。

1 环境准备

1.1 修改 IP

1.2 修改主机名及主机名和 IP 地址的映射

1.3 关闭防火墙

1.4 ssh 免密登录

1.5 安装 JDK,配置环境变量

2 集群规划

节点名称 NN JJN DN ZKFC ZK RM NM
linux1 NameNode JournalNode DataNode ZKFC Zookeeper   NodeManager
linux2 NameNode JournalNode DataNode ZKFC ZooKeeper ResourceManager NodeManager
linux3   JournalNode DataNode   ZooKeeper ResourceManager NodeManager

3 安装Zookeeper 集群

安装详解参考:Zookeeper 集群搭建 https://www.linuxidc.com/Linux/2020-03/162767.htm

4 配置 Hadoop

4.1 修改 core-site.xml

<configuration>
<!-- meNode 的地址组装成一个集群 mycluster -->
<property>
   <name>fs.defaultFS</name>
   <value>hdfs://mycluster</value>
</property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/module/hadoop/data/ha/tmp</value>
</property>
<!-- 指定 ZKFC 故障自动切换转移 -->
<property>
     <name>ha.zookeeper.quorum</name>
     <value>linux1:2181,linux2:2181,linux3:2181</value>
</property>

</configuration>

4.2 修改 hdfs-site.xml

<connfiguration>
<!-- 设置 dfs 副本数,默认 3 个 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 完全分布式集群名称 -->
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
<!-- 集群中 NameNode 节点都有哪些 -->
<property>
   <name>dfs.ha.namenodes.mycluster</name>
   <value>nn1,nn2</value>
</property>
<!-- nn1 的 RPC 通信地址 -->
<property>
   <name>dfs.namenode.rpc-address.mycluster.nn1</name>
   <value>linux1:8020</value>
</property>
<!-- nn2 的 RPC 通信地址 -->
<property>
   <name>dfs.namenode.rpc-address.mycluster.nn2</name>
   <value>linux2:8020</value>
</property>
<!-- nn1 的 http 通信地址 -->
<property>
   <name>dfs.namenode.http-address.mycluster.nn1</name>
   <value>linux1:50070</value>
</property>
<!-- nn2 的 http 通信地址 -->
<property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>linux2:50070</value>
</property>
<!-- nn2 的 http 通信地址 -->
<property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>linux2:50070</value>
</property>
<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://linux1:8485;linux2:8485;linux3:8485/mycluster</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<!-- 使用隔离机制时需要 ssh 无秘钥登录-->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 声明 journalnode 服务器存储目录-->
<property>
   <name>dfs.journalnode.edits.dir</name>
   <value>/opt/module/hadoop/data/ha/jn</value>
</property>
<!-- 关闭权限检查-->
<property>
   <name>dfs.permissions.enable</name>
   <value>false</value>
</property>
<!-- 访问代理类:client,mycluster,active 配置失败自动切换实现方式-->
<property>
   <name>dfs.client.failover.proxy.provider.mycluster</name>
 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置自动故障转移-->
<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
</property>
</configuration>

4.3 修改 mapred-site.xml

[hadoop@linux1 hadoop]# mv mapred-site.xml.template mapred-site.xml
[hadoop@linux1 hadoop]# vi  mapred-site.xml
<configuration>
<!-- 指定 mr 框架为 yarn 方式 -->
 <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
 </property>
<!-- 指定 mr 历史服务器主机, 端口 -->
  <property>   
    <name>mapreduce.jobhistory.address</name>   
    <value>linux1:10020</value>   
  </property>   
<!-- 指定 mr 历史服务器 WebUI 主机, 端口 -->
  <property>   
    <name>mapreduce.jobhistory.webapp.address</name>   
    <value>linux1:19888</value>   
  </property>
<!-- 历史服务器的 WEB UI 上最多显示 20000 个历史的作业记录信息 -->    
  <property>
    <name>mapreduce.jobhistory.joblist.cache.size</name>
    <value>20000</value>
  </property>
<!--配置作业运行日志 --> 
  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
  </property>
  <property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value>/tmp/hadoop-yarn/staging</value>
  </property>
</configuration>

4.4 修改 slaves

linux1
linux2
linux3

4.5 修改 yarn-site.xml

[hadoop@linux2 hadoop]$ vi yarn-site.xml
<configuration>
<!-- reducer 获取数据的方式 -->
 <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!--启用 resourcemanager ha-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!--声明两台 resourcemanager 的地址-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>rmCluster</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>linux2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>linux3</value>
    </property>
    <!--指定 zookeeper 集群的地址-->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>linux1:2181,linux2:2181,linux3:2181</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>
</configuration>

4.5 拷贝 hadoop 到其他节点

[hadoop@linux1 module]$ scp -r hadoop/ hadoop@linux2:/opt/module/
[hadoop@linux1 module]$ scp -r hadoop/ hadoop@linux3:/opt/module/

4.6 配置 Hadoop 环境变量

[hadoop@linux1 module]$ vim /etc/profile
export HADOOP_HOME=/opt/module/hadoop
export PATH=$Java_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH


生效
[hadoop@linux1 module]$ source /etc/profile

5 启动集群

1)在各个 JournalNode 节点上,输入以下命令启动 journalnode 服务:(前提 zookeeper 集群已启动)

[hadoop@linux1 hadoop]$ hadoop-daemon.sh start journalnode
[hadoop@linux2 hadoop]$ hadoop-daemon.sh start journalnode
[hadoop@linux3 hadoop]$ hadoop-daemon.sh start journalnode

cd /opt/module/hadoop/data

Hadoop 完全分布式搭建部署

 产生 clusterID 的集群编号

cd /opt/moudle/hadoop/data/ha

Hadoop 完全分布式搭建部署

tmp 目录也会产生 clusterID 集群编号

启动 nn1 上 namenode

[hadoop@linux1 current]$ hadoop-daemon.sh start namenode
starting namenode, logging to /opt/module/hadoop/logs/hadoop-hadoop-namenode-linux1.out
[hadoop@linux1 current]$ jps
13040 NameNode
13121 Jps
5442 QuorumPeerMain
12403 JournalNode

3)在 [nn2] 上,同步 nn1 的元数据信息:

[hadoop@linux2 hadoop]$ hdfs namenode -bootstrapStandby

Hadoop 完全分布式搭建部署

 4)启动 nn2 上的 namenode

[hadoop@linux2 hadoop]$ hadoop-daemon.sh start namenode
starting namenode, logging to /opt/module/hadoop/logs/hadoop-hadoop-namenode-linux2.out
[hadoop@linux2 hadoop]$ jps
2368 JournalNode
2498 NameNode
1783 QuorumPeerMain
2574 Jps
[hadoop@linux2 hadoop]$ 

5)在 [nn1] 上,启动所有 datanode

[hadoop@linux1 current]$  hadoop-daemons.sh start datanode
linux1: starting datanode, logging to /opt/module/hadoop/logs/hadoop-hadoop-datanode-linux1.out
linux2: starting datanode, logging to /opt/module/hadoop/logs/hadoop-hadoop-datanode-linux2.out
linux3: starting datanode, logging to /opt/module/hadoop/logs/hadoop-hadoop-datanode-linux3.out
[hadoop@linux1 current]$ 

访问地址:http://linux2:50070/dfshealth.html#tab-overview

Hadoop 完全分布式搭建部署

 

 

访问地址:http://linux1:50070/dfshealth.html#tab-overview 

Hadoop 完全分布式搭建部署

 6)手动切换状态,在各个 NameNode 节点上启动 DFSZK Failover Controller,先在哪台机器启动,哪个机器的 NameNode 就是 Active NameNode

[hadoop@linux1 current]$ hadoop-daemon.sh start zkfc
[hadoop@linux2 current]$ hadoop-daemon.sh start zkfc

设置第一个为 active
[hadoop@linux1 current]$  hdfs haadmin -transitionToActive nn1 --forcemanual

Web 页面查看

 

 

Hadoop 完全分布式搭建部署Hadoop 完全分布式搭建部署

 7 启动 yarn

(1)在 linux2 中执行:

[hadoop@linux2 hadoop]$ start-yarn.sh

(2)在 linux3 中执行:

[hadoop@linux3 hadoop]$ yarn-daemon.sh start resourcemanager

(3)查看服务状态

[hadoop@linux3 hadoop]$ yarn rmadmin -getServiceState rm1
active
[hadoop@linux3 hadoop]$ yarn rmadmin -getServiceState rm2
standby
[hadoop@linux3 hadoop]$ 

Hadoop 完全分布式搭建部署

 

测试集群

1.查看集群

[hadoop@linux1 opt]$ jps
13040 NameNode
5442 QuorumPeerMain
12403 JournalNode
15139 NodeManager
14908 DFSZKFailoverController
13390 DataNode
15711 Jps
[hadoop@linux1 opt]$ 

[hadoop@linux2 hadoop]$ jps
2368 JournalNode
2498 NameNode
3746 Jps
1783 QuorumPeerMain
3271 NodeManager
2633 DataNode
3417 ResourceManager
3162 DFSZKFailoverController
[hadoop@linux2 hadoop]$ 

[hadoop@linux3 hadoop]$ jps
2147 JournalNode
2515 NodeManager
1733 QuorumPeerMain
2249 DataNode
2719 ResourceManager
2847 Jps
[hadoop@linux3 hadoop]$ 

创建文件夹

[root@linux3 ~]# mkdir -p /opt/wcinput
root@linux3 ~]# cd /opt/
[root@linux3 opt]# chown hadoop:hadoop wcinput
root@linux3 opt]# su hadoop
[hadoop@linux3 opt]$ vi /opt/wcinput/my.txt

 

hello world
hello scals
hello java
hello php
hello world
php   

放到 hdfs 中

[hadoop@linux3 opt]$ hadoop fs -put /opt/wcinput/my.txt /user/hadoop/input

执行单词统计

[hadoop@linux3 opt]$ hadoop jar /opt/module/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/hadoop/input /user/hadoop/output

查看输出

[hadoop@linux3 opt]$ hadoop dfs -ls /usr/hadoop/output

将输出下载到本地

[hadoop@linux3 hadoop]$ hadoop dfs -get /user/hadoop/output/part-r-00000

查看文件

[hadoop@linux3 hadoop]$ vim part-r-00000


hello   5
java    1
php     2
scals   1
world   2

四 Hadoop 集群群启脚本

1 启动服务

zookeeper   hadoop 

2 脚本

1 编写启动集群脚本  vi start-cluster.sh

#!/bin/bash
echo “****************** 开始启动集群所有节点服务 ****************”
echo “****************** 正在启动 zookeeper *********************”
for i in hadoop@linux1 hadoop@linux2 hadoop@linux3
do
ssh $i ‘/opt/module/apache-zookeeper-3.6.0/bin/zkServer.sh start’
done
echo “******************** 正在启动 HDFS *******************”
ssh hadoop@linux1 ‘/opt/module/hadoop/sbin/start-dfs.sh’
echo “********************* 正在启动 YARN ******************”
ssh hadoop@linux2 ‘/opt/module/hadoop/sbin/start-yarn.sh’
echo “*************** 正在 node21 上启动 JobHistoryServer *********”
ssh hadoop@linux1 ‘/opt/module/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver’
echo “****************** 集群启动成功 *******************”*

2 编写关闭集群脚本 vi stop-cluster.sh

#!/bin/bash
echo  "*************      开在关闭集群所有节点服务      *************"
echo  "*************  正在 linux1 上关闭 JobHistoryServer  *************"
ssh   hadoop@linux1 '/opt/module/hadoop/sbin/mr-jobhistory-daemon.sh stop historyserver'
echo  "*************         正在关闭 YARN               *************"
ssh   hadoop@linux2 '/opt/module/hadoop/sbin/stop-yarn.sh'
echo  "*************         正在关闭 HDFS               *************"
ssh   hadoop@linux1 '/opt/module/hadoop/sbin/stop-dfs.sh'
echo  "*************         正在关闭 zookeeper          *************"
for i in hadoop@linux1 hadoop@linux2 hadoop@linux3
do
     ssh $i '/opt/module/apache-zookeeper-3.6.0/bin/zkServer.sh stop'
done

[hadoop@linux1 hadoop]$ chmod +x start-cluster.sh 

在使用 ssh 命令的时候出现了找不到 JAVA_HOME 的问题
通过 ssh 登陆之后会发现找不到 JAVA_HOME,我的 JAVA_HOME 是定义在 /etc/profile 里面的。
研究后发现远程登录和直接登录执行的文件是不一样的:
/etc/profile: 当用户登录时, 该文件被执行.
/etc/bashrc: 当 bash shell 被打开时, 该文件被执行.
ssh 作为远程登录的方式进入,当然就无法触发 /etc/profile 的执行,所以会发生找不到 JAVA_HOME 的问题,所以需要将 java 的配置信息配置到 bashrc 的文件中去,配置步骤如下所示:
.bashrc 是一个隐藏的文件,要打开并修改该文件需要:

(1) 命令 vim ~/.bashrc 进入到文件;

(2) 直接按 i 键可以对文件进行修改,Esc +:+ wq 退出并保存修改之后的文件

(3) 命令:source ~/.bashrc 更新 .bashrc

对该文件进行修改保存后,在执行相关的操作,就不会发生如上的问题啦。

更多 Hadoop 相关信息见Hadoop 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=13

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计9980字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7962995
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...