ubantu搭建Hadoop、yarn、hdfs、HA、zookeeper

1-前提

集群相关内容

IP地址主机名密码
192.168.145.130master123456
192.168.145.131slaves112346
192.168.145.132slaves2123456
准备工作

修改root密码

sudo passwd root

输入密码:123456

再次输入密码:123456


保证ssh、ftp能够远程连接,下载服务
  • master

安装ssh服务

sudo apt-get install -y openssh-server
sudo service ssh start

安装vsftp服务

sudo apt-get install -y vsftpd

vsftp需要修改的配置文件

sudo vi /etc/vsftpd.conf
# 25行
anonymous_enable=NO
# 28行
local_enable=YES
# 31行
write_enable=YES

启动vsftp服务

sudo service vsftp start

在/opt下创建module、software

  • master
mkdir /opt/module
mkdir /opt/software

给予software权限,确保ftp有权限传输文件

chmod 777 /opt/software

配置ip映射

vi /etc/hosts
# 以下内容 ------
192.168.145.130 master
192.168.145.131 slaves1
192.168.145.132 slaves2

配置ssh密钥登陆

三台节点都需要配置

  • master
  • slaves1
  • slaves2
ssh-keygen -t rsa
# 三次回车-----
ssh-copy-id master
ssh-copy-id slaves1
ssh-copy-id slaves2
# 第一次yes、输入密码:123456

注:这个步骤不能使用root用户来操作,需要使用本机的master


scp传输文件问题

a.需要给被传输的目录可读可写的权限

b.需要配置好ssh密钥

例:master传输java8文件给slaves1

  • slaves1
sudo mkdir /opt/module
sudo chmod 777 /opt/module

scp传输

  • master
scp -r /opt/module/java8 slaves1:/opt/module

注:如果按上述操作完后,还是存在权限问题Permission denied, please try again.,使用bash刷新一下系统

master、slaves1都刷新一下

bash

2-搭建Hadoop的hdfs、yarn集群分布式服务

内容展示

主机名服务
master(hdfs)namenode、datanode |(yarn)nodemanager
slaves1(hdfs)datanode | (yarn)resourcemanager、nodemanager
slaves2(hdfs)resondarynamenode、datanode | (yarn)nodemanager

操作系统版本:ubuntu-18.04.6-desktop-amd64.iso

使用的相关软件版本

服务版本号
jdk8jdk-8u144-linux-x64.tar.gz
hadoop-2.7.2hadoop-2.7.2.tar.gz

搭建hdfs、yarn

  • 解压Hadoop、jdk
  • 配置环境变量、测试环境是否生效
  • 配置修改文件、分发文件
  • 格式化namenode
  • 集群测试启动

注:使用的都是绝对路径

登录root用户,不平凡使用sudo

su root

输入密码:123456

解压
  • master

(1)解压jdk、hadoop

tar -zxvf /opt/software/jdk-8u144-linux-x64.tar.gz -C /opt/module/
tar -zxvf /opt/software/hadoop-2.7.2.tar.gz -C /opt/module/

(2)修改目录名

mv /opt/module/jdk1.8.0_144/ /opt/module/java8

(3)复制好相关路径,配置环境变量

JAVA_HOME=/opt/module/java8

HADOOP_HOME=/opt/module/hadoop-2.7.2

vi /etc/profile
# 以下内容
# ----------
# JAVA_HOME
export JAVA_HOME=/opt/module/java8
export PATH=$PATH:$JAVA_HOME/bin
# HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

(4)验证环境

source /etc/profile
javac
java -version
hadoop version

(5)分发文件

  • master

注:传输文件别使用root用户

scp -r /opt/module/java8 slaves1:/opt/module
scp -r /opt/module/java8 slaves2:/opt/module
scp -r /opt/module/hadoop-2.7.2 slaves1:/opt/module
scp -r /opt/module/hadoop-2.7.2 slaves2:/opt/module
scp -r /etc/hosts slaves1:/opt/module
scp -r /etc/hosts slaves2:/opt/module
scp -r /etc/profile slaves1:/opt/module
scp -r /etc/profile slaves2:/opt/module
  • slaves1
cat /opt/module/profile
cat /opt/module/hosts

profile

# JAVA_HOME
export JAVA_HOME=/opt/module/java8
export PATH=$PATH:$JAVA_HOME/bin
# HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

hosts

192.168.145.130 master
192.168.145.131 slaves1
192.168.145.132 slaves2
sudo vi /etc/profile
sudo vi /etc/hosts
# 结尾添加到文件末尾就行
source /etc/profile
  • slaves2

上同操作:)——摸鱼

source /etc/profile

注:不知为什么,/etc目录下的文件就同步不过去

注:我没有添加sudo时,就表示在使用root用户

配置文件

修改hadoop-env.sh

vi /opt/module/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
# 修改内容
# 28行
export JAVA_HOME=/opt/module/java8

修改core-site.xml

vi /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
# 修改内容
# 末尾
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:8020</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-2.7.2/data/tmp</value>
  </property>
</configuration>

修改hdfs-site.xml

vi /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
# 修改内容
# 末尾
<configuration>
	<property>
    	<name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
    	<name>dfs.namenode.secondary.http-address</name>
        <value>slaves2:50090</value>
    </property>
</configuration>

注:下面开始将省略文件中的<configuration>

修改mapred-site.xml

cp /opt/module/hadoop-2.7.2/etc/hadoop/mapred-site.xml.template /opt/module/hadoop-2.7.2/etc/hadoop/mapred-site.xml
vi /opt/module/hadoop-2.7.2/etc/hadoop/mapred-site.xml
# 修改内容
# 末尾
<property>
	<name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

修改yan-site.xml

vi /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
# 修改内容
# 末尾
<property>
	<name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
	<name>yarn.resourcemanager.hostname</name>
    <value>slaves1</value>
</property>

修改slaves

vi /opt/module/hadoop-2.7.2/etc/hadoop/slaves
# 修改为
master
slaves1
slaves2

分发文件

  • master(现在不是root用户了,以后不再提醒啦o( ̄▽ ̄)o)
scp -r /opt/module/hadoop-2.7.2/ slaves1:/opt/module/
scp -r /opt/module/hadoop-2.7.2/ slaves2:/opt/module/
测试

准备启动hdfs、yarn

(1)格式化namenode

  • master
# 执行下面格式化时,需要给到hadoop-2.7.2目录可执行权限
# 先进入root
su root
# 给予权限
chmod -R a+w /opt/module/hadoop-2.7.2/
hdfs namenode -format
start-dfs.sh

注:如果start-dfs.sh不存在,那就是你没有配置好hadoop环境变量的bin或者sbin

  • slaves1
start-yarn.sh

启动状况用jps查看,我这里以文本形式展示

  1. master
8449 NodeManager
7878 NameNode
8554 Jps
8047 DataNode
  1. slaves1
4880 ResourceManager
4102 DataNode
5022 NodeManager
5310 Jps
  1. slaves2
2726 SecondaryNameNode
2859 NodeManager
2587 DataNode
3308 Jps

2.5-搭建zookeeper集群

服务版本
zookeeperzookeeper-3.4.6.tar.gz
  • 解压、改名
  • 添加环境变量
  • 修改配置文件
  • 测试

(1)解压、改名

tar -zxvf /opt/software/zookeeper-3.4.6.tar.gz -C /opt/module/
mv /opt/module/zookeeper-3.4.6/ /opt/module/zookeeper

(2)配置环境变量

vi /etc/profile
# 内容如下
# ZOOKEEPER_HOME
export ZOOKEEPER_HOME=/opt/module/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile

注:因为scp不能够分发到/etc下,所以这个环境请手动配置咯(ง •_•)ง

(3)配置文件

修改zoo.cfg

cp /opt/module/zookeeper/conf/zoo.sample.cfg /opt/module/zookeeper/conf/zoo.cfg
vi /opt/module/zookeeper/conf/zoo.cfg
# 内容如下
# 12行
dataDir=/opt/module/zookeeper/data #在该行下面(13行)继续添加
server.1=master:2888:3888
server.2=slaves1:2888:3888
server.3=slaves2:2888:3888

创建zookeeper/data目录,写入myid文件

mkdir /opt/module/zookeeper/data
echo 1 > /opt/module/zookeeper/data/myid

(4)分发zookeeper文件

  • master
scp -r /opt/module/zookeeper/ slaves1:/opt/module
scp -r /opt/module/zookeeper/ slaves2:/opt/module

注:别忘记将环境变量也添加进来哦(。・∀・)ノ

(5)配置每台节点上的myid

节点名称myid
master1
slaves12
slaves23
  • slaves1
sed -i 's/1/2/g' /opt/module/zookeeper/data/myid
  • slaves2
sed -i 's/1/3/g' /opt/module/zookeeper/data/myid

注:了解shell脚本的应该对sed不陌生吧,这里直接用vi达到效果也一样的。

(6)测试

补充:这里也是一样,启动前,需要给zookeeper目录中所有文件可执行权限

  • master
  • slaves1
  • slaves2
# 可执行权限
sudo chmod -R a+w /opt/module/zookeeper

启动

  • master
zkServer.sh start
  • slaves1
zkServer.sh start
  • slaves2
zkServer.sh start

都启动完成后,有一个进程名为QuorumPeerMain就是zookeeper的进程

注:最好先启动master节点的zk在启动另外两个


了解zookeeper的朋友,可以查看zookeeper的运行状态,查看leader、follower

复习复习zookeeper的选举机制

zkServker.sh status

3-搭建Hadoop-HA高可用集群

前提搭建好了之前的hdfs、yarn、zookeeper,且能正常启动。

​ 满足以上条件就可以开始搭建HA啦(。^▽^)

提示:本节的配置文件内容非常多,真的!!~

  • 配置文件
  • 重新格式化namenode、格式化zkfc
  • 启动测试
  • 可能遇到的问题

介绍:HA跟普通hdfs的区别在于,HA有两个节点的namenode,可厉害了

1-配置文件

  • master

修改core-site.xml

vi /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
# 内容如下
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:8020</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-2.7.2/data/tmp</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>master:2181,slaves1:2181,slaves2:2181</value>
  </property>

修改hdfs-site.xml

vi /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml
# 需要删除一段配置,该配置是hdfs的辅助节点,现在搭建完HA后,就不需要辅助节点了
# <property>
#   <name>dfs.namenode.secondary.http-address</name>
#   <value>slaves2:50090</value>
# </property>

# 内容如下
        <property>
          <name>dfs.replication</name>
          <value>2</value>
        </property>
        
        <property>
          <name>dfs.nameservices</name>
          <value>mycluster</value>
        </property>
        
        <property>
          <name>dfs.ha.namenodes.mycluster</name>
          <value>nn1,nn2</value>
        </property>
        
        <property>
          <name>dfs.namenode.rpc-address.mycluster.nn1</name>
          <value>master:8020</value> 
        </property>
        
        <property>
          <name>dfs.namenode.rpc-address.mycluster.nn2</name>
          <value>slaves1:8020</value> 
        </property>
       
        
        <property>
          <name>dfs.namenode.http-address.mycluster.nn1</name>
          <value>master:50070</value>
        </property>
        
        <property>
          <name>dfs.namenode.http-address.mycluster.nn2</name>
          <value>slaves1:50070</value>
        </property>
        
       
	 <property>
          <name>dfs.namenode.shared.edits.dir</name>
          <value>qjournal://master:8485;slaves1:8485;slaves2:8485/mycluster</value> 
        </property>
        
        <property>
          <name>dfs.journalnode.edits.dir</name>
          <value>/opt/module/hadoop-2.7.2/jn</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</value>
        </property>
        
        <property>
          <name>dfs.ha.fencing.ssh.private-key-files</name>
          <value>/root/.ssh/id_dsa</value>
        </property>
        
        <property>
          <name>dfs.ha.automatic-failover.enabled</name>
          <value>true</value>
         </property>

修改hadoop-env.sh

vi /opt/module/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
# 内容如下
export JAVA_HOME=/opt/module/java8 # 之前应该添加过,再检查一遍防止未添加

修改yarn-site.xml

vi /opt/module/hadoop-2.7.2/etc/hadoop/yarm-site.xml
# 内容如下
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>cluster1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>r1,r2</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.r1</name>
    <value>master</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address.r1</name>
    <value>master:8088</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.r2</name>
    <value>slaves1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address.r2</name>
    <value>slaves1:8088</value>
  </property>

  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>master,slaves1,slaves2</value>
  </property>
  <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  </property>
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>86400</value>
  </property>

修改yarn-env.sh

vi /opt/module/hadoop-2.7.2/etc/hadoop/yarn-env.sh
# 内容如下
# 23行,需取消注释
export JAVA_HOME=/opt/module/java8

修改mapred-env.sh

vi /opt/module/hadoop-2.7.2/etc/hadoop/mapred-env.sh
# 内容如下
# 16行,需取消注释
export JAVA_HOME=/opt/module/java8

修改mapred-site.xml

vi /opt/module/hadoop-2.7.2/etc/hadoop/mapred-site.xml
# 内容如下
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value>
  </property>

修改slaves

# 内容
master
slaves1
slaves2

同步文件

scp -r /opt/module/hadoop-2.7.2/ slaves1:/opt/module
scp -r /opt/module/hadoop-2.7.2/ slaves2:/opt/module

以防万一:发现重新分发hadoop-2.7.2目录后,之前给予的可执行权限无了(>人<;),再次添加

  • slaves1
sudo chmod -R a+w /opt/module/hadoop-2.7.2
  • slaves2
sudo chmod -R a+w /opt/module/hadoop-2.7.2

启动准备

三台节点都需要启动zookeeper、journalnode

  • master
zkServer.sh start
hadoop-daemon.sh start journalnode
  • slaves1
zkServer.sh start
hadoop-daemon.sh start journalnode
  • slaves2
zkServer.sh start
hadoop-daemon.sh start journalnode

补充:hadoop的另一种启动journalnode节点集群的方式hadoop-daemons.sh start journalnode,可以一次启动三台的journalnode

  • 重新格式化namenode

注:重新格式化,需要删除hadoop-2.7.2/目录下的data/、logs/目录

三台节点都进行这个删除操作,因为刚刚同步了文件

  • master
  • slaves1
  • slaves2
rm -rf /opt/module/hadoop-2.7.2/data/
rm -rf /opt/module/hadoop-2.7.2/logs/

  • master重新格式化namenode
hdfs namenode -format

提醒:如果这里格式化失败,一般有三个问题

  • (1)没有删除data/或者logs/目录
  • (2)hdfs-site.xml配置文件出错,或者是少配置了
  • (3)没有启动journalnode进程

希望朋友一定要耐心查找🔍,累了休息会再查找。相信一定能排查出来的( ̄︶ ̄*))

启动master节点的namenode(前提是,namenode格式化成功了)

hadoop-daemon.sh start namenode

使用jps查看master的进程

9984 JournalNode
10689 NameNode
10763 Jps
9583 QuorumPeerMain
  • slaves1
    • 同步master节点的namenode
hdfs namenode -bootstrapStandby

无报错就是正常的。

  • master
    • 主节点nn1(master)中格式化zkfc,在zookeeper中可见目录data/、logs/
hdfs zkfc -formatZK

在这里插入图片描述

之后启动hdfs、yarn集群

  • master
start-dfs.sh
  • slaves1
start-yarn.sh

ps:搭建HA真的是配置文件出错很难找啊,可能是<name>或者<value>有问题;又或者是其中的某一个字母拼错,如果不需要练习搭建大数据组件的朋友,直接复制我的配置文件就行。————手敲真的很容易出错啊~(ノ`Д)ノ
之后有时间,还会更新其他大数据组件的搭建,版本老是因为项目环境需要。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值