Hadoop 笔记(三)运行模型及配置

本文详细介绍了Hadoop的三种运行模式:单机模式、伪分布式和完全分布式,重点讲解了配置过程,包括HDFS和YARN的启动、格式化,以及SSH免密登录等,适合Hadoop初学者进行集群配置和调试。
摘要由CSDN通过智能技术生成

之前讲解了 Hadoop 安装。这篇文章讲解运行模式以及配置。

Hadoop 有 3 种运行模式,分别是单机模式、伪分布式模式、完全分布式模式。本文以 ubantu 18.04 和 Hadoop 2.10.1 为例。

单机模式

这篇文章中讲解了 Hadoop 的安装和环境设置。当安装完成后,Hadoop 就是默认的单机模式。

在单机模式下使用的是本地文件系统,而不是分布式文件系统,Hadoop 不会启动守护进程,不用修改配置文件,避免了复杂的配置工作,用于对 MapReduce 程序逻辑进行调试。

伪分布式模式

用一台主机模拟多台主机的运行环境。每个守护进程都以 Java 进程的形式运行,可以检查内存使用情况,HDFS 输入输出,以及其他的守护进程。

这种模式主要适用于单机调试。

配置并启动 HDFS

要配置的文件都在 Hadoop 的 etc/hadoop/ 目录下。

cd /opt/hadoop/etc/hadoop/
  1. hadoop-env.sh

删除掉导入 Java 环境的前的注释符,并修改环境变量路径。

export JAVA_HOME=/opt/jdk1.8.0_311
  1. core-site.xml

用于设置 Hadoop 集群的特性,作用于全部进程和客户端。

找到配置文件所在文件夹,用超级用户权限进行修改。默认情况下配置文件都是空的,增加以下内容。

<configuration>
	<!-- 指定HDFS中NameNode的地址 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://localhost:9000</value>
	</property>
	<!-- 指定Hadoop运行时产生文件的存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/hadoop-2.10.1/data/tmp</value>
	</property>
</configuration>
  1. hdfs-site.xml

配置 hdfs 集群工作属性。超级用户权限编辑 hdfs-site.xml,主要用于指定数据块中集群副本个数。

<configuration>
	<!-- 指定HDFS副本的数量 -->
	<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
</configuration>
  1. 格式化和启动

转到 hadoop 安装目录。

cd /opt/hadoop-2.10.1

对 hadoop 文件系统进行格式化。

bin/hdfs namenode -format

第一次使用的时候格式化就行,不要经常格式化。格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。所以,格式 NameNode 时,一定要先删除 data 数据和 log 日志,然后再格式化 NameNode。
格式化之前最好关掉正在运行的 NameNode 和 DataNode,并删除临时文件和日志文件,也即 data 目录和 log 目录。

启动 NameNode 和 DataNode。

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

上述两条命令也可以用下面这一条来代替,前提是配置了 SSH 免密登录

sbin/start-dfs.sh

输入 jps,如果出现 NameNode 和 DataNode,则表示成功。

jps 是 JDK 的命令。

也可以通过查看进程来验证。

ps -ef | grep -i dfs

如果没有成功,可以查看日志排除错误。日志保存在 logs/目录下。

用浏览器登录 http://localhost:50070/,可以看见文件系统的相关信息。

最后,把上述的 start 改为 stop 可以关闭服务,也可以采用下面的命令。

./stop-dfs.sh

配置并启动 YARN

  1. yarn-site.sh

删除掉导入 Java 环境的前的注释符,并修改环境变量路径。

export JAVA_HOME=/opt/jdk1.8.0_311
  1. yarn-site.xml

为 NodeManager 配置 MapReduce 应用 shuffle 服务。

<configuration>
	<!-- Reducer获取数据的方式 -->
	<property>
		<name>yarn.nodemaneger.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<!-- 指定YARN的ResourceManager的地址 -->
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>hadoop101</value>
	</property>
</configuration>
  1. mapred-env.sh

同样也是导入 Java 环境变量地址。

export JAVA_HOME=/opt/jdk1.8.0_311
  1. mapred-site.xml

复制一份 mapred-site.xml.template,命名为 mapred-site.xml。

cp mapred-site.xml.template mapred-site.xml

配置 mapreduce 集群属性,应使用 YARN 框架。

<configuration>
	<!-- 指定MR运行在YARN上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>
  1. 启动

按照上一小节的方法的方法启动 NameNode 和 DataNode。再启动 ResourceManager 和 NodeManager。

sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager

上面两条命令可以用下面这一条命令来代替,前提是配置了 SSH 免密登录

sbin/start-yarn.sh

使用 jps 命令,如果出现 ResourceManger 和 NodeManager 则成功。也可以通过查看进行来验证。

ps -ef | grep -i yarn

用浏览器登录 http://localhost:8088/,可以看到集群信息。

最后,把上述的 start 改为 stop 可以关闭服务,也可以采用下面的命令。

./stop-yarn.sh

在配置好后,可以按照这篇文章中的流程运行一个示例程序。

更详细的配置方法可以查看官网

完全分布模式

运行在多台主集搭建的集群上,是真正的生产环境。所有主机都要安装 jdk 和 hadoop,且都要修改配置文件,并且配置 ssh 免密登录。

假设集群由 3 台主机组成,一台作为主节点,另外两台作为从节点。主机通过网络连接起来。

配置 IP 地址

在 VirtualBox 中,为了保证虚拟机能够正常上网,同时也保证这几个虚拟机的 IP 地址固定,我们给虚拟机设置两个网卡。第一个网卡连接方式设置为网络地址转换(NAT),这个网卡用于与互联网进行通信。另一个网卡连接方式设置为仅主机(Host-only)网络,用于虚拟机之间的通信。

转到 /etc/netplan 目录下,超级用户权限修改 01-network-manager-all.yaml 文件,配置使用 Host-Only 网卡的地址,以下代码配置为自己的 IP 地址就好。

networks:
  ethernets:
    enp0s8:
      dhcp4: no
      addresses: [192.168.101.11/24]
      optional: true
      gatway4: 192.168.101.1

由于设置了 2 个网卡,因此要通过 MAC 地址分清楚哪个网卡是用了 Host-Only 模式,才能进行配置。

修改之后,进行激活,并查看是否配置成功。

sudo netplay apply
ifconfig

同时,修改 /etc/hosts 添加映射。

192.168.101.11 master
192.168.101.12 slave1
192.168.101.13 slave2

另外 2 台主机也都进行这样的配置,要设置不同的 ip 地址。

SSH 免密登录

Hadoop 安装一文中提到了 SSH 免密登录。现在要求主节点可以免密登录从节点,因此略有不同,还需要把主节点上的密钥输入到节点机的授权列表中。

scp ~/.ssh/id_rsa.pub slave1@192.168.101.12:/home/slave1/.ssh

在从节点机上把密码要加授权列表。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

这样一来,主机可以免密登录从机。

ssh slave1

如果无法免密登录,可能是由于主机和从机中的用户名不同造成的,那么要在主机中修改 ~/.ssh/config 文件(没有该文件则创建)。

Host slave1
  user slave1
Host slave2
  use slave2

两台从节点上都要进行相同操作,并且也要把自己的公钥给主节点和其它从节点。

配置主节点

配置文件都在 hadoop 安装目录的 etc/hadoop 目录下。这里的配置与伪分布模式类似。

由于 NameNode、SecondaryNameNode 和 ResourceManager 非常消耗资源,因此我们把这三个分别放在不同的节点上面,分担各节点的压力。

  1. hadoop-env.sh

删除掉导入 Java 环境的前的注释符,并修改环境变量路径。

export JAVA_HOME=/opt/jdk1.8.0_311
  1. 修改 core-site.xml
<configuration>
	<!-- 指定HDFS中NameNode的地址 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://master:9000</value>
	</property>
	<!-- 指定Hadoop运行时产生文件的存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/hadoop-2.10.1/data/tmp</value>
	</property>
</configuration>
  1. hdfs-site.xml
<configuration>
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
</configuration>

为了修改 SecondaryNameNode 的配置,还需要加上下面这个属性。这样的话 SecondaryNameNode 会在 cslave2 上启动,否则在主节点上。

<!-- 指定 Hadoop 辅助名称节点主机配置 -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>cslave2:50090</value>
</property>
  1. yarn-env.sh

删除掉导入 Java 环境的前的注释符,并修改环境变量路径。

export JAVA_HOME=/opt/jdk1.8.0_311
  1. yarn-site.xml

在这之中我们制定了 ResourceManager 的地址,如果不指定的话则是主节点。

<configuration>
	<!-- Reducer获取数据的方式 -->
	<property>
    	<name>yarn.nodemanager.aux-services</name>
       	<value>mapreduce_shuffle</value>
    </property>
    <!-- 指定 YARN 的 ResourceManager 的地址 -->
    <property>
    	<name>yarn.resourcemanager.hostname</name>
        <value>cslave1</value>
    </property>
</configuration>
  1. mapred-env.sh

同样也是导入 Java 环境变量地址。

export JAVA_HOME=/opt/jdk1.8.0_311
  1. mapred-site.xml
<configuration>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>
  1. slaves

把默认的 localhost 删掉,把主从节点都写入。

cmaster
cslave1
cslave2

不要有空格或空行。

配置从节点

一方面,需要把主节点的公钥复制到从节点上,并添加到从节点已授权列表中。上文已经讲解了。

另一方面,把 hadoop文件夹也复制到从节点上,配置文件也一起复制过去了。

scp -r /opt/hadoop cslave1@192.168.101.12:/tmp
scp -r /opt/hadoop cslave2@192.168.101.13:/tmp

由于权限原因,先复制到 /tmp 目录下,再移动到其它目录。

复制过来的文件记得要改所有者和所有者组。

sudo chown cslave1:cslave1 -R /opt/hadoop-2.10.1

更详细的配置方法及参数解释可以查看官网

格式化并启动

  1. 格式化文件系统

在主节点上格式化文件系统。同样,只需要第一次使用的时候格式化。如果不是第一次使用,首先要删除 logs/ 和 data/ 目录,每个节点都要删除。

cd /opt/hadoop-2.10.1
bin/hdfs namenode -format
  1. 启动 NameNode 和 DataNode

在主节点 cmaster 上启动 NameNode 和 DataNode。

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

使用 jps 命令查看进程,在主节点 cmaster 上运行着 NameNode 和 DataNode,其它节点上没有运行程序。

在从节点 cslave1 和 cslave2 上启动 DataNode。

sbin/hadoop-daemon.sh start datanode

使用 jps 命令查看进程,在 cslave1 上运行着 DataNode。

在 cslave2 上还要启动 SecondaryNameNode。

sbin/hadoop-daemon.sh start secondarynamenode

使用 jps 命令查看进程,在 cslave2 上运行着 DataNode 和 SecondaryNameNode。这是由于我们之前在 hdfs-site.xml 上配置了 SecondaryNameNode。如果不做配置默认在主节点上。

上面启动 NameNode 和 DataNode 的命令可以用下面这一条来代替,前提是按照该上一小节的方式配置了 SSH 免密登录。

sbin/start-dfs.sh

这种方式更简便也更常用。

  1. 启动 YARN

由于我们之前修改了 yarn-site.xml,把 ResourceManager 设置在了 cslave1 上,因此我们要在 cslave1 中启动 YARN。如果不做这个修改,则在主节点上启动。

sbin/start-yarn.sh

输入 jps 查看,在各节点上可以看到新增加了 NodeManager,cslave1 上还增加了 ResourceManger。

  1. 验证、查看

上文用到了 jps 查看进程是否启动成功。还可以在浏览器中查看资源。

因为在 cmaster 上运行着 NameNode,因此输入 cmaster:50070/,能看到节点数目和文件系统。我们开了 3 个节点,因此能看到存活节点数为 3.

由于在 cslave2 上运行着 SecondaryNameNode,因此输入 cslave2:50090/ 能看到辅助节点的信息。

由于在 cslave1 上运行着 RecesourceManager,输入 cslave1:8088/,可以看到执行的任务信息。

  1. 停止服务
sbin/stop-yarn.sh
sbin/stop-dfs.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值