Day02 Hadoop分布式集群搭建步骤

Day02 Hadoop分布式集群搭建步骤

一、安装jdk和hadoop环境

本文所描述的分布式集群搭建步骤可以使用虚拟机进行同样也可以使用云服务器的方式进行,所以需要有一些准备工作,

  • 虚拟机软件(可以使用VMware Workstation Pro)
  • 同一内网的云服务器(相互可以内部ping通)

以上两个二选一即可。

详细步骤:

  1. 安装centos7.5系统(实际笔者建议安装server版本,节约些内存)

    这个自己选择进行安装,配置好密码。笔者将在文末提供ISO的链接。

  2. 使用root权限登录系统,在根目录下的opt目录中创建两个目录,一个soft,另一个module。Soft目录用于存放压缩文件,module目录用于存放解压后的文件。

    mkdir /opt/soft /opt/module
    
  3. 上传JDK以及Hadoop的压缩包到/opt/soft(注意:现目前用户是否是root用户)

    如果使用虚拟机并centos为桌面版的话可以直接从windows拖入虚拟机内linux中,如果是云服务器或server版本centos的话可以使用MobaXterm进行ssh连接,该软件自带Sftp功能,可以直接拖入文件到linux中。

  4. JDK以及Hadoop解压到module中。

tar -zxvf /opt/soft/jdk-8u121-linux-x64.tar.gz -C /opt/module
tar -zxvf /opt/soft/hadoop-3.1.3.tar.gz -C /opt/module
  1. 配置环境变量,在/etc/profile最后添加以下内容:

    • vim /etc/profile
      
    • 按字母i

    • 箭头调整光标到最后输入

      JAVA_HOME=/opt/module/jdk1.8.0_121
      HADOOP_HOME=/opt/module/hadoop-3.1.3
      PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      export JAVA_HOME HADOOP_HOME PATH
      
    • ESC后输入wq!保存退出

    •  source /etc/profile
      
      

二、配置集群前的准备工作

  1. 创建一个新用户(如果已经存在新用户,该步骤可以省略)

    useradd tgmmmmmmmm(你想要的用户名)
    passwd tgmmmmmmmm(为你的用户创建密码)
    

    image-20220310202718910

  2. 给该用户root权限

    vim /etc/sudoers
    

    image-20220310203203182

  3. 关闭防火墙

    systemctl stop firewalld	停止防火墙
    systemctl disable firewalld	永久禁止防火墙开机自启
    
  4. 把opt目录下soft目录以及module目录交给普通用户*(我的是tgmmmmmmmm)*

    chown -R tgmmmmmmmm:tgmmmmmmmm /opt/soft /opt/module
    
  5. 克隆虚拟机,保证至少有三台机器运行

  6. 保证3台机器能够相互通信,也就是需要配置/etc/hosts,在此之前,需要把主机名更改为不同名字,如hadoop101,hadoop102,hadoop103。

    (1)最好配置为静态分配IP,避免因为虚拟机被分配IP改变重新配置,见文章**linux下设置静态ip**。

    (2)更改主机名的文件在/etc/hostname,将原有名字全部删除,并写入新的名字,保存并退出,再重启。

    (3)将每台机器的ip地址复制,粘贴到/etc/hosts文件中,并在后方写入对应的主机名,如下图:image-20220311192146833

三、Hadoop节点分配

  1. 集群的三大框架:

image-20220311192306133

  1. 如何避免单点故障:只需要咱们合理的分配节点在集群的机器中(均衡搭配)。

Hadoop101: namenode datanode nodemanager

Hadoop102: resourcemanager datanode nodemanager

Hadoop103: secondarynamenode datanode nodemanager

也就是说,namenode作为hdfs的关键,放置在了hadoop101,而resourcemanager作为yarn的关键,放置在了hadoop102.

四、配置HDFS

core-site.xml

  1. 要启动HDFS,首先需要配置core-site.xml文件

(该文件位于/opt/module/hadoop-3.1.3/etc/hadoop/)

​ 在文件中的标签中添加以下配置

<!-- 决定hdfs运行模式 -->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://hadoop101:8020</value>
</property>
<!-- 配置hadoop临时目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置web端页面的静态用户 -->
<property>
	<name>hadoop.http.staticuser.user</name>
	<value>tedu</value>
</property>
<!--定义HDFS所开放的代理服务  -->
<property>
	<name>hadoop.proxyuser.tedu.hosts</name>
	<value>*</value>
</property>
<property>
	<name>hadoop.proxyuser.tedu.groups</name>
	<value>*</value>
</property>
  1. **格式化namenode(**自动创建hadoop临时目录)

    hadoop namenode -format
    
  2. 启动namenode和datanode节点(启动hdfs)

    hadoop-daemon.sh start namenode
    hadoop-daemon.sh start datanode
    

hdfs-site.xml(与core-site.xml在同级目录)

<property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop101:9870</value>
 </property>
        <!-- 2nn web端访问地址-->
 <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop103:9868</value>
 </property>

mapred-site.xml(同目录)

<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
<!-- 历史服务器运行机器以及端口 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>

yarn-site.xml(同级目录)

<!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop102</value>
</property>
<!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- yarn容器允许分配的最大最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1024</value>
    </property>
        <property>
                <name>yarn.scheduler.maximum-allocation-mb</name>
                <value>4096</value>
        </property>
        <property>
                <name>yarn.nodemanager.resource.memory-mb</name>
                <value>4096</value>
        </property>
        <property>
                <name>yarn.nodemanager.pmem-check-enabled</name>
                <value>false</value>
        </property>
        <property>
                <name>yarn.nodemanager.vmem-check-enabled</name>
                <value>false</value>
        </property>
        <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

配置同步

将三台电脑配置同步一下

rsync -av /opt/module/…/core-site.xml tgm@hadoop102:/opt/module/.../

五、集群启动与关闭

a) 启动:

i. Hadoop101命令:

1. hadoop-daemon.sh start namenode

2. hadoop-daemon.sh start datanode

3. yarn-daemon.sh start nodemanager

ii. Hadoop102命令:

  1. hadoop-daemon.sh start datanode

  2. yarn-daemon.sh start nodemanager

  3. yarn-daemon.sh start resourcemanager

iii. Hadoop103命令:

  1. hadoop-daemon.sh start secondarynamenode

  2. yarn-daemon.sh start nodemanager

  3. hadoop-daemon.sh start datanode

b)停止:

就是把启动命令中的start替换成stop

六、其他配置

配置免密登录

  1. 使用ssh算法

    ssh-keygen -t rsa
    
  2. 本机免密登录其他主机

    ssh-copy-id tgm@hadoop102
    

not set 报错解决

如果配置了java_home还是显示not set的话 就在hadoop/etc/hadoop/下的hadoop.env.sh配置中重新配置一下java_home的路径。

使用群起、群闭

hadoop中本身具有群起群闭的命令可以用,首先配置workers同样在hadoop的etc中,加入三台主机即可
后续使用start-dfs.sh即可

七、脚本记录

虽然有hadoop的群起群闭命令,但是我们还想查看一下整个系统的运行状态,我们可以自己编写脚本进行命令封装,同时也可以把文件同步,和三机同时执行命令一起封装了。

myjps

可以用该命令看三台机器的运行状况

#!/bin/bash

echo "jps is run..."
for i in hadoop101 hadoop102 hadoop103
do
        echo "-----------$i-----------"
        ssh $i "source /etc/profile;jps"
done

start-cluster

该命令可以启动集群

#!/bin/bash
echo -e "\n--------------------TgM@Copyright-------------------"
echo -e "\n--------------------start cluster-------------------"
echo -e "\n-------------------- start hdfs  -------------------"
echo -e "\n-------------------start hadoop101 namenode---------"
hadoop-daemon.sh start namenode
echo -e "\n-------------------start hadoop101 datanode---------"
hadoop-daemon.sh start datanode
echo -e "\n-------------------start hadoop102 datanode---------"
ssh tgm@hadoop102 "source /etc/profile;hadoop-daemon.sh start datanode"
echo -e "\n-------------------start hadoop103 datanode---------"
ssh tgm@hadoop103 "source /etc/profile;hadoop-daemon.sh start datanode"
echo -e "\n-------------------start hadoop103 secondarynamenode---------"
ssh tgm@hadoop103 "source /etc/profile;hadoop-daemon.sh start secondarynamenode"
echo -e "\n--------------------finish hdfs --------------------"
echo -e "\n-------------------- start yarn --------------------"
echo -e "\n-------------------start hadoop101 nodemanager---------"
yarn-daemon.sh start nodemanager
echo -e "\n-------------------start hadoop102 resourcemanager---------"
ssh tgm@hadoop102 "source /etc/profile;yarn-daemon.sh start resourcemanager"
echo -e "\n-------------------start hadoop102 nodemanager---------"
ssh tgm@hadoop102 "source /etc/profile;yarn-daemon.sh start nodemanager"
echo -e "\n-------------------start hadoop103 nodemanager---------"
ssh tgm@hadoop103 "source /etc/profile;yarn-daemon.sh start nodemanager"
echo -e "\n--------------------finish yarn --------------------"
echo -e "\n--------------------finish cluster------------------"
myjps 

最后这个myjps是使用了上述自己编写的命令,如果想要不输入路径直接使用的话,需要将命令写在一个配置到环境变量中的文件夹中。

tongshi

该脚本会在三台机器中执行任意同一条命令。

#!/bin/bash

if (($#==0)); then
  echo "nothing to do";
  exit
fi
echo --------------------$*----------------------

for i in hadoop101 hadoop102 hadoop103
do
    echo ---------------------$i-------------------
    ssh $i "$@"

tongbu

该脚本位于101机器,实现效果:就算我们输入的路径是相对路径,该脚本也能识别为绝对路径,并且发放到102以及103机器中的同一目录下。

#!/bin/bash

pcount=$#
if((pcount==0));then
echo "nothing to do";
exit;
fi

p1=$1 fname=`basename $p1`
echo fname=$fname

pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

user=`whoami`

for i in hadoop101 hadoop102 hadoop103; do
  echo --------------- $i ----------------
  rsync -av $pdir/$fname $user@$i:$pdir
done

于101机器,实现效果:就算我们输入的路径是相对路径,该脚本也能识别为绝对路径,并且发放到102以及103机器中的同一目录下。

#!/bin/bash

pcount=$#
if((pcount==0));then
echo "nothing to do";
exit;
fi

p1=$1 fname=`basename $p1`
echo fname=$fname

pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

user=`whoami`

for i in hadoop101 hadoop102 hadoop103; do
  echo --------------- $i ----------------
  rsync -av $pdir/$fname $user@$i:$pdir
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值