0
点赞
收藏
分享

微信扫一扫

如何快速搭建 Hadoop 2.7.1分布式集群并进行MapReduce分布式计算任务(环境配置与集群启动)~

📖本文目录

📖 如何搭建 Hadoop 2.7.1分布式集群(环境配置与集群启动)

📑 前置环境准备

上述 操作只是配置了一台虚拟机,但是实际情况之中一般是有多台 master 与 多台 slaver 的 也就是为了防止宕机 需要存在多个名称节点与多个数据节点,每个节点就是一台主机,为了能小规模模拟 这里 小付采用的是 (一主两从)来进行分布式集群的配置。

📑 本文阅读须知

本文约定俗成了一些术语/参数等,这些参数/术语需要阅读本文的同学针对于自身的真实情况进行修改。

Master 是本文的唯一一台主机也就是名称节点
192.168.56.102 是 Master 的 ip 地址
hadoop 是 Master 下的一个普通用户
-----------------分割线---------------
slave1 是本文其中一台从机也就是其中一个数据节点
192.168.56.103 是 slave1 的 ip 地址
centos101 是 slave1 下的一个普通用户
-----------------分割线---------------
slave2 是本文另一台从机也就是另外一个数据节点
192.168.56.104 是 slave2 的 ip 地址
centos102 是 slave2 下的一个普通用户

📑 集群之间SSH无密码登录

🔖 Master 与 Slaver 自连免密登录

  • 生成公钥与私钥
  • 导入公钥到认证文件中
  • 更改权限
# 生成 公钥与私钥
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
# 导入公钥到认证文件中 这样一来就可以免密登录啦
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 这里是更改权限 方便之后 从机也可以将从机自身的公钥追加到认证文件中 实现免密登录
$ chmod 700 ~/.ssh && chmod 600 ~/.ssh/*

📚 注意:第一次登陆可能会需要 yes 进行确认,之后登陆就会采用免密自登陆。

$ ssh localhost
Last login: Thu Apr  7 16:00:50 2022 from 192.168.56.1

🔖 Master 连接到 Slaver 免密登录

# 设置 Master 连接到 Slaver1 的centos101 用户免密登录
$ cat ~/.ssh/id_rsa.pub | ssh centos101@192.168.56.103 'cat - >> ~/.ssh/authorized_keys'
# 设置 Master 连接到 Slaver2 的centos102 用户免密登录
$ cat ~/.ssh/id_rsa.pub | ssh centos102@192.168.56.104 'cat - >> ~/.ssh/authorized_keys'
# 测试 Master 连接到 Slaver1 的 centos101 时免密登录
$ ssh centos101@192.168.56.103
Last login: Thu Apr  7 14:51:33 2022 from 192.168.56.102
# 测试 Master 连接到 Slaver2 的 centos102 时免密登录
$ ssh centos102@192.168.56.104
Last login: Thu Apr  7 14:51:33 2022 from 192.168.56.102

🔖 Slaver 连接到 Master 免密登录

  • 分别在 Slaver1 用户为centos101Slaver2 用户为centos102 执行下述指令。
$ cat ~/.ssh/id_rsa.pub | ssh hadoop@192.168.56.102 'cat - >> ~/.ssh/authorized_keys'
$ ssh hadoop@192.168.56.102
Last login: Thu Apr  7 18:43:05 2022 from 127.0.0.1

📑 Hadoop 配置集群 / 分布式环境

🔖 slaves / works 文件配置

📚 注意点: 需要注意的是在 Hadoop3.0 之后 ${HADOOP_HOME}/etc/hadoop/ 中的 slaves 文件不在存在 取而代之的是一个名叫 works 的文件需要额外注意,我们在 3.0之前对slaves的配置 在3.0之后在works中配置即可

  • 需要作为数据节点的ip地址与对应用户写入该文件,格式如下:
centos101@192.168.56.103
centos102@192.168.56.104

🔖 core-site.xml 文件

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.56.102:9000</value>
    </property>
</configuration>

🔖 hdfs-site.xml 文件

  • 对于 Hadoop 的分布式文件系统 HDFS 而言,存的备份越多越安全?也就越好? 不不不!因为备份越多占用的空间也就越多,冗余数据也就越多这是我们不想看到的。所以也就有了冗余因子的概念,故设置dfs.replication 即是设置冗余因子,一份数据保存备份几分副本到几个节点当中。因为我们这里有两台从机,为了保证集群的高可用小付将其设置为2也就是说每个数据在每个从机中都有一份

📚 需要注意的是:如果上述设置为2后面 MapReduce 分布式计算的时候,也要注意是否能分配那么多台主机用于计算,因为slaves并没有配置主机Master也作为冗余副本存储。

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>192.168.56.102:50090</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
    <property>
         <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
         <value>false</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
        <description>
            If "true", enable permission checking in HDFS.
            If "false", permission checking is turned off,
            but all other behavior is unchanged.
            Switching from one parameter value to the other does not change the mode,
            owner or group of files or directories.
        </description>
    </property>
</configuration>

这里面的设置有点多,逐一解释下吧,因为有坑。

  • dfs.namenode.name.dirdfs.datanode.data.dir 分别设置的是名称节点的目录与数据节点的目录地址

  • dfs.permissions 这个设置是为了省去权限认证

  • dfs.namenode.secondary.http-address 设置第二名称节点 用来监控 HDFS 状态的辅助后台程序,每隔一段时间获取 HDFS 元数据的快照。

📚 注意点: DataNodeNameNode交互时,除了,服务器 ip 的互相访问权限外hdfs 也还得设置 DataNode 对 NameNode的注册信息 ,这里直接关闭,以防后续 各个进程正常启动 , 但是 Live Node 为 0 的情况出现。

原因:【Hadoop故障处理】全分布下,DataNode进程正常启动,但是网页上不显示,并且DataNode节点为空

  • dfs.namenode.datanode.registration.ip-hostname-check

🔖 mapred-site.xml 文件

📚注意点: 你会发现配置文件中没有名字与这个名字完全一样的文件,但是你能看见一个类似的模板文件,不要犹豫就是它mapred-site.xml.template 对其重命名为 mapred-site.xml 再进行配置。

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>192.168.56.102:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>192.168.56.102:19888</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.map.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.reduce.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property> 
</configuration>
  • 这个是配置分布式计算的文件 配置了进行分布式计算MapReduce主机地址、运行环境等信息

🔖 yarn-site.xml 文件

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <!--一定要注意这个是主机名称而非 ip地址 否则会爆出拒绝连接的错误--> 
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>
  • 这里配置了资源管理 resourcemanager 的主机地址 当./start-yarn.sh 启动时 会在对应的节点开启一个 ResourceManager 的进程

🔖 scp( secure copy) 主机之间文件加密传输

  • 这里将我们已经配置好的 hadoop 文件夹 传输到 从机的用户目录下。
# Master 将 配置好的 hadoop 文件夹 传输给 Slaver1的centos101用户的用户目录下
$ scp -r /usr/local/hadoop     centos101@192.168.56.103:/home/centos101
# Master 将 配置好的 hadoop 文件夹 传输给 Slaver2的centos102用户的用户目录下
$ scp -r /usr/local/hadoop     centos102@192.168.56.104:/home/centos102
  • 随后分别进入到对应用户的从机中将hadoop文件夹移至/usr/local 目录下

🔖 Hadoop 集群启动

📚 注意点一:在集群启动服务之前,我们需要注意第一个问题是,如果采用的是Linux操作系统,那么它的网络防火墙是自动开启的,这也就会造成 两个主机之间 明明可以ping通 但是 telnet 端口不通的情况,为了杜绝这种情况发生,我们可以选择将防火墙进行关闭,但是要注意,真实开发情况下,这种操作一定不要出现,会面临严重的安全问题,建议对指定端口与ip进行白名单的设置来达到相同的效果。

$ systemctl stop firewalld.service    # 关闭firewall服务
$ systemctl disable firewalld.service # 禁止firewall服务开机自动启动
  • 回到我们的 Master 主机当中 进入 /usr/local/hadoop/bin 目录下格式化咱们的名称节点。
$ ./hdfs namenode -format
  • 然后 进入 /usr/local/hadoop/sbin 目录下
# 开启咱们的 dfs 服务
$ ./start-dfs.sh 
# 主机的 此时 Java进程信息
[hadoop@alascanfu-VirtualBox]$ jps
21465 Jps
21163 NameNode
21371 SecondaryNameNode
# 从机的 此时 Java进程信息
[centos102@localhost hadoop]$ jps
10225 Jps
10150 DataNode
# 开启咱们的 yarn 服务
$ ./start-yarn.sh
# 此时的主机的 jps
21749 Jps
21514 ResourceManager
21163 NameNode
21371 SecondaryNameNode
# 此时的从机的 jps
10150 DataNode
10296 NodeManager
10427 Jps
# 最后开启咱们的分布式计算的角色服务
$ mr-jobhistory-daemon.sh start historyserver
# 此时的主机的 jps
21831 Jps
21514 ResourceManager
21803 JobHistoryServer
21163 NameNode
21371 SecondaryNameNode
  • 检测集群是否配置成功~
$ hdfs dfsadmin -report

如果集群配置成功,会显示大致如下数据:

Configured Capacity: 15216934912 (14.17 GB)
Present Capacity: 9116491776 (8.49 GB)
DFS Remaining: 9116467200 (8.49 GB)
DFS Used: 24576 (24 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0

-------------------------------------------------
Live datanodes (2):

Name: 192.168.56.104:50010 (192.168.56.104)
Hostname: localhost
Decommission Status : Normal
Configured Capacity: 6641680384 (6.19 GB)
DFS Used: 12288 (12 KB)
Non DFS Used: 3050102784 (2.84 GB)
DFS Remaining: 3591565312 (3.34 GB)
DFS Used%: 0.00%
DFS Remaining%: 54.08%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Apr 07 20:05:01 CST 2022


Name: 192.168.56.103:50010 (192.168.56.103)
Hostname: localhost
Decommission Status : Normal
Configured Capacity: 8575254528 (7.99 GB)
DFS Used: 12288 (12 KB)
Non DFS Used: 3050340352 (2.84 GB)
DFS Remaining: 5524901888 (5.15 GB)
DFS Used%: 0.00%
DFS Remaining%: 64.43%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Apr 07 20:05:01 CST 2022

如果配置失败,有这么几种排错方式

  • 如果我们的服务进程一直存在没有缺失的情况下,而 Live Node 的个数为0 时 ,一般会出现两种情况:
    • 1、hdfs-site.xml 中的 dfs.namenode.datanode.registration.ip-hostname-check 没有进行设置
    • 2、Linux CentOS7.6 的防火墙将端口墙掉了,需要打卡,或者禁用防火墙(仅在练习时)
  • 如果 我们所需的服务进程在开启一段时间 自动结束,那么就需要查看 日志 文件什么服务的什么错误导致这个服务进程结束的/usr/local/hadoop/logs 中每个服务都有对应的日志文件进行排错即可。
  • 如果上述都没有发生任何问题,那么我觉得还有两种可能是你可能遇到的,其一是你的配置文件写错了,要不咱们再检查检查? 其二就是之前可以正常启动,但是突然某天不可以正常启动了,日志中又没有显示,那么我怀疑咱们的 tmp 文件夹 存放节点的数据的目录 遭到恶意修改或者破坏,或者它g了,所以咱们不妨直接 rm -rf ./tmp/rm -rf ./logs/ 然后 mkdir logs (主从都要执行前三个操作哦~)之后再去 hadoop/bin 目录下进行名称节点格式化 hdfs namenode -format 再来启动试试。 大致能遇到的就这些问题啦。

🔖 关闭 Hadoop 集群

$ stop-yarn.sh
$ stop-dfs.sh
$ mr-jobhistory-daemon.sh stop historyserver

这样就配置好了 Hadoop2.7.1分布式集群了哦~

# 创建一个用户目录
$ hdfs dfs -mkdir -p /user/hadoop
# 在当前用户的目录下创建一个用于存放 hadoop/etc/hadoop 中所有的配置文件的目录 input
$ hdfs dfs -mkdir input
$ hdfs dfs -put /usr/local/hadoop/etc/hadoop/* input
# 执行 MapReduce 作业 分布式计算任务
$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
http://192.168.56.102:8088/cluster

在这里插入图片描述
在这里插入图片描述

举报

相关推荐

0 条评论