centos7上部署单机模式和伪分布式模式Hadoop2.6

Hadoop集群的部署方式方式分为三种,分别是独立模式(Standalone mode)、伪分布式模式(Pseudo-Distributed mode)、完全分布式模式(Cluster mode),具体介绍如下。
(1)独立模式:又称为单机模式,在该模式下,无需运行任何守护进程,所有的程序都在单个JVM上执行。独立模式下调试Hadoop集群的MapReduce程序非常方便,所以一般情况下,该模式在学习或者开发阶段调试使用。
(2)伪分布式模式:Hadoop程序的守护进程运行在一台节点上,通常使用伪分布式模式用来调试Hadoop分布式程序的代码,以及程序执行是否正确,伪分布式模式是完全分布式模式的一个特例。
(3)完全分布式模式:Hadoop的守护进程分别运行在由多个主机搭建的集群上,不同节点担任不同的角色,在实际工作应用开发中,通常使用该模式构建企业级Hadoop系统。

1. 资源准备

环境:Centos7,安装教程可参考链接
软件:
a. 下载JDK,可参考链接 ,选择第一个:
在这里插入图片描述
注意:下载的JDK版本不能太高,hadoop与jdk的版本对应表如下

Hadoop版本 JDK版本
hadoop-3.1.3 JDK 1.8
hadoop-2.10.2 JDK 1.7 or 1.8
hadoop-2.9.2 JDK 1.7 or 1.8
hadoop-2.8.2 JDK 1.7+
hadoop-2.7.1 JDK 1.7+

b. 下载Hadoop2.6,下载链接,选择如图:
在这里插入图片描述
c. 下载终端软件mobaxterm
用来操作Linux终端和向虚拟机中上传安装包;
下载链接,随着时间流逝此链接可能会失效,如失效请自行查找下载,也可其他终端软件:XShell、SecureCRT。

2. 解压,配置环境变量

2.1 上传安装包

使用mobaxterm把jdk和hadoop2.6安装包:
打开mobaxterm,点击“New session
在这里插入图片描述
输入虚拟机ip、用户名:

虚拟机ip、用户名根据自己的虚拟机配置进行设置;
勾选记住用户名;
端口号用默认的22;
在这里插入图片描述
这是连上以后的界面,因为是用root用户登录,所以连上以后左边区域显示root用户的家目录/root/。
在这里插入图片描述
进入到/usr/local/src/目录,把下载好的jdk8和Hadoop2.6安装包拖入到/usr/local/src/目录:
在这里插入图片描述

2.2 解压缩

进入到/usr/local/src目录,/usr/local/src相当于Windows系统的C:\Program Files,把jdk和Hadoop压缩包解压到当前目录:
hadoop-2.6.0和jdk8u292-b10是解压后的文件
在这里插入图片描述
ls hadoop-2.6.0看一下hadoop的目录结构:
在这里插入图片描述

bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
sbin目录:存放启动或停止Hadoop相关服务的脚本
share目录:存放Hadoop的依赖jar包、文档、和官方案例

2.3 配置环境变量

环境变量是指在操作系统中用来指定操作系统运行环境的一些参数,比如Java的安装路径只有配置到环境变量中,才能被系统识别和使用。
首先查看是否已经安装了jdk,查看命令:java -version
在这里插入图片描述
如果出现jdk的版本号,说明已经安装了jdk,命令which java查看jdk的安装路径。如果没有安装,则直接安装下载好的JDK。
如果已经安装,为了后期方便修改和配置,把自带的JDK卸载,重新安装JDK。
卸载方法
首先查看已经安装的JDK,查看命令:rpm -qa | grep java
如下:红框圈起来的是已经安装的jdk,卸载命令是:rpm -e --nodeps 包名
卸载后才用命令java -version查看,显示“未找到命令”说明卸载成功。如下图:
在这里插入图片描述
卸载完成后,安装自己下载的JDK,有两种配置环境变量的方法:

  1. 修改/etc/profile,这个文件对所有的用户都生效。
  2. 修改用户家目录下的.bash_profile文件,直对当前用户生效。
    我采用的方法2,修改root用户家目录下的.bash_profile(/root/.bash_profile)。
    命令vi /root/.bash_profile(vi编辑器的使用参考链接
    在最下面添加如下内容:
JAVA_HOME=/usr/local/src/jdk8u292-b10
HADOOP_HOME=/usr/local/src/hadoop-2.6.0
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME HADOOP_HOME CLASSPATH PATH

在这里插入图片描述

修改完以后用命令 source /root/.bash_profile,使其生效。
java -version查看java版本,检查是否安装成功:
在这里插入图片描述

hadoop version查看Hadoop版本:
在这里插入图片描述

如果提示如下错,是说明jdk配置错误,检查jdk的配置。
在这里插入图片描述

3. 本地模式

3.1 修改Hadoop配置文件

本地模式不需修改任务配置文件

修改完成后再运行hadoop version,如下图表示本地模式部署成功,可看到hadoop的版本是2.6:
在这里插入图片描述
到这里hadoop本地模式就部署成功了,下面是MapReduce程序的一个应用。

3.2 运行wordcount程序

wordcount是官网提供一个MapReduce案例程序,作用是统计单词出现的个数,识别以空格或换行为间隔的单词或中文词语。比如:

apple orange banana cat dog apple apple dog dog cat cat cat
统计的结果是:
apple 3
orange 1
banana 1
cat 4
dog 3

接下来用hadoop提供的wordcount程序统计单词出现的次数:
进入到hadoop的家目录,创建input文件夹,创建test.txt:


[root@hadoop01 hadoop-2.6.0]# mkdir input
[root@hadoop01 hadoop-2.6.0]# vi input/test.txt

test.txt内容为:
在这里插入图片描述
运行统计命令:

[root@hadoop01 hadoop-2.6.0]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount input/test.txt output

解释:
hadoop jar表示运行jar文件,把Map Reduce代码捆绑到jar文件中,使用这个命令执行;
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar表示jar包,包中有wordcount程序;
wordcount是类名,表示执行这个类,因为上述jar包中有多个类,所以需要指定;
input/test.txt是需要统计的文件
output:统计后的结果放到output中,这个文件不能提前创建,执行hadoop jar命令会自动创建;

统计后的结果放在output文件夹中,_SUCCESS表示运行成功,part-f-00000内是统计的结果:
在这里插入图片描述

4. 伪分布式模式

伪分布式模式只需要一个节点,所有的进程(NameNode、DataNode、NodeManager、ResourceManager、SecondaryNameNode)都运行在这个节点上。
资源准备、解压缩、环境变量配置参考步骤1和步骤2。

4.1 修改Hadoop配置文件

配置文件所在路径是$HADOOP_HOME/etc/hadoop,此目录中有很多Hadoop的配置文件:
在这里插入图片描述

伪分布式模式只需要修改5个:

1.hadoop-env.sh
2.core-site.xml
3.hdfs-site.xml
4.yarn-site.xml
5.mapred-site.xml
其中hadoop-env.sh告知hadoop一些系统的环境变量,如JAVA_HOME;
core-site.xml和hdfs-site.xml是hdfs相关的配置文件;
yarn-site.xml和mapred-site.xml是yarn相关的配置文件;

4.1.1 配置hadoop-env.sh

添加如下一句(由自己jdk安装路径确定)

export JAVA_HOME=/usr/local/src/jdk8u292-b10

在这里插入图片描述
注:#表示注释掉了,不起作用

4.1.2 hdfs相关配置

1)配置core-site.xml,其中有很多配置项,我们只配置以下两项就可,其他采用默认配置。

<!-- 指定HDFS中NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop01:9820</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/usr/local/src/hadoop-2.6.0/data/tmp</value>
</property>

如下:
在这里插入图片描述

注:hadoop01是你的主机名

2)配置:hdfs-site.xml

<!-- 指定HDFS副本的数量 -->
<property>
	<name>dfs.replication</name>
	<value>1</value>
</property>

如下图:
在这里插入图片描述

由于只有一个节点,所以副本数设置1,如果不设置,默认为3.

格式化
hdfs相关配置完成以后就可以格式化NameNode:

[root@hadoop01 hadoop-2.6.0]# hdfs namenode -format

如果没有报错则格式化成功,根据core-site.xml中的配置,hadoop家目录下会多出data文件夹:
在这里插入图片描述
注:在进行多次格式化是要删除hadoop家目录下的data和logs文件夹,否则会格式化不成功

启动NameNode和DataNode

[root@hadoop01 hadoop-2.6.0]# hadoop-daemon.sh start namenode
[root@hadoop01 hadoop-2.6.0]# hadoop-daemon.sh start datanode

在这里插入图片描述
启动之后用jps命令查看,可看到NameNode和DataNode的进程。
用浏览器打开:虚拟机ip:50070可看到分布式文件系统的状态:
在这里插入图片描述

运行wordcount
此时未启动yarn,在本地运行wordcount程序;
因为已经配置了hdfs,此时wordcount操作的文件是hdfs上的文件:
在hdfs的根目录创建input文件夹,并把本地的test.txt上传到hdfs:

[root@hadoop01 hadoop-2.6.0]# hdfs dfs -mkdir /input
[root@hadoop01 hadoop-2.6.0]# hdfs dfs -put input/test.txt /input
[root@hadoop01 hadoop-2.6.0]# hdfs dfs -ls /input
Found 1 items
-rw-r--r--   1 root supergroup        420 2021-07-26 23:12 /input/test.txt

执行workcount程序统计单词数:

[root@hadoop01 hadoop-2.6.0]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /input/test.txt /output

执行结果在hdfs上的/output中:
在这里插入图片描述
从web端也能看到:
在这里插入图片描述

4.1.3 yarn相关配置

1)配置yarn-site.xml:

vi etc/hadoop/yarn-site.xml

添加如下内容:

<!-- Reducer获取数据的方式 -->
<property>
 	<name>yarn.nodemanager.aux-services</name>
 	<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop01</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>

在这里插入图片描述

2)配置mapred-site.xml

vi etc/hadoop/mapred-site.xml

添加如下内容:

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

在这里插入图片描述

启动yarn

[root@hadoop01 hadoop-2.6.0]# start-yarn.sh

中间需要输一次密码,启动后用jps命令查看进程,可看到多出两个进程:

70004 ResourceManager
70102 NodeManager

说明配置并启动成功。
在这里插入图片描述
也可通过web端查看yarn中任务的状态:
url是 resourceManager的ip:8088
在这里插入图片描述

使用yarn执行wordcount程序
yarn启动以后,可以配置使用yarn进行资源调度和任务分配,默认是启用的,调用多个namenode进行分布式计算。
执行命令如下,为了和上一次的执行结果进行区分,本次执行结果放在/output2中。

[root@hadoop01 hadoop-2.6.0]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /input/test.txt /output2

从yarn的web端可看到wordcount任务的执行记录:
在这里插入图片描述
执行结果:
在这里插入图片描述
总结:hdfs负责分布式存储,yarn负责分布式计算,两者互不影响。

Guess you like

Origin blog.csdn.net/ljzology/article/details/119087002