Ubuntu下搭建完全分布式Hadoop集群

  1. Hadoop的运行环境介绍

    hadoop主要有三种运行模式:单机模式、伪分布模式、完全分布模式。

    • 其中在单机模式下所有3个XML文件均为空,当配置文件为空时,Hadoop会完全运行在本地,因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。

    • 在伪分布式模式下是指在“单节点集群”上运行Hadoop,其中所有的守护进程都运行在同一台机器上,即Jobtracker、Tasktracker、Namenode、Datanode、Secondarynamenode进程都运行在同一台主机上。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。

    • 完全分布式模式是将hadoop运行在了一个真正的集群上,该集群内含有一个主节点master,及至少两个的从节点slave;其中主节点上主要运行Namenode、Jobtracker、Secondarynamenode进程,从节点主要运行Datanode、Tasketracker进程。这种模式下可以真正实现hadoop的分布式处理,有主节点对从节点的任务分配调度以及HDFS在主机间的输入输出。

  2. Hadoop集群搭建准备工作

    需要提前下载好的文件:

    • ubuntu-16.04.5-desktop-amd64.iso
    • jdk-8u144-linux-x64.tar
    • hadoop-2.7.2.tar
  3. 虚拟机准备

    在Parallels Desktop中新建一台虚拟机,快照并克隆三次,得到了三台虚拟机

    注意:快照的是为了节省自己的硬盘空间

  4. 使三台虚拟机连通

    先使用命令ifconfig查看三台虚拟机的ip地址

    然后使用命令sudo vim /etc/hostname修改主机名

    这里就拿一个演示,剩下的两台也改

    注意:我是以ip地址末尾来命名的,你也可以使用master,slave1,slave2命名,只要自己可以分辨出虚拟机是哪台就行

    然后我们添加该局域网内的集群中其他虚拟主机ip

    使用命令sudo vim /etc/hosts将和主机名一样的ip地址注释掉并添加三台主机的ip和主机名,修改具体情况如下:

    三台虚拟机都需要这样配置

    然后使用命令ping -c 3 hadoop7测试互相可以ping通

  5. 配置免密登陆

    先使用命令ssh localhost,如果提示输入密码那么就代表你有ssh,如果出现connect to host localhost port 22:Connection refused那么请参考:Ubuntu下 ssh : connect to host localhost port 22:Connection refused

    安装好ssh后可以使用命令ssh-keygen -t rsa -P '',提示输入密钥保存的路径,直接按enter键使用默认值即可

    然后使用命令ssh-copy-id hadoop6将空钥发到本机,同样需要发到hadoop7,hadoop8

    然后另两台服务器也需要这样配置

    配置好后可以使用ssh hadoop6登录虚拟机,使用exit可以推出登录

  6. 安装JDK和Hadoop

    使用命令mkdir /opt/module /opt/software在/opt下创建software和module文件夹

    并使用命令chown lzm:lzm /opt/module /opt/software将所有权赋给当前用户

    可以使用ls -l来进行查看

    将JDK和Hadoop的安装包复制到software文件夹,然后使用命令tar -zxf hadoop-2.7.2.tar.gz -C /opt/moduletar -zxf jdk-8u144-linux-x64.tar.gz -C /opt/module将其安装到module目录下

    同样两台都进行配置

  7. 配置环境变量

    使用命令sudo vim /etc/profile在文件后面添加

    1
    2
    3
    4
    5
    6
    7
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    export PATH=$PATH:$JAVA_HOME/bin

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

    保存后使用命令source /etc/profile重新启动一下配置,然后使用java -versionhadoop version来测试一下环境变量是否配置完成

    另外两个虚拟机也是同样的

  8. 配置Hadoop

    • 注意:所有配置文件都在$HADOOP_HOME/etc/hadoop
    1. 首先配置hadoop-env.sh,yarn-env.sh,mapred-env.sh文件,在每个文件第二行添加 export JAVA_HOME=/opt/module/jdk1.8.0_144

2. 配置`core-site.xml`,在文档中添加

    
1
2
3
4
5
6
7
8
9
10
11
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop6:9000</value><!-- 这里改成自己的主机名 -->
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
![](https://cdn.jsdelivr.net/gh/WhyYouStarted/PhotoGallery@master/images/Hadoop/截屏2020-02-25下午8.11.02.png) 3. 配置`hdfs-site.xml`,在文档中添加
1
2
3
4
5
6
7
8
9
10
<!-- 数据的副本数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop8:50090</value><!-- 这里改成自己的主机名 -->
</property>
![](https://cdn.jsdelivr.net/gh/WhyYouStarted/PhotoGallery@master/images/Hadoop/截屏2020-02-25下午8.39.01.png) 4. 配置`yarn-site.xml`,在文档中添加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- Site specific YARN configuration properties -->
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop7</value><!-- 这里改成自己的主机名 -->
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>

<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
![](https://cdn.jsdelivr.net/gh/WhyYouStarted/PhotoGallery@master/images/Hadoop/截屏2020-02-25下午8.11.35.png) 5. 配置`mapred-site.xml`,这个文档先需要使用命令`cp mapred-site.xml.template mapred-site.xml`复制一份然后在文档中添加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop8:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop8:19888</value>
</property>
![](https://cdn.jsdelivr.net/gh/WhyYouStarted/PhotoGallery@master/images/Hadoop/截屏2020-02-25下午8.12.08.png) 6. 配置`slaves`,在文档中添加
1
2
3
hadoop6
hadoop7
hadoop8
![](https://cdn.jsdelivr.net/gh/WhyYouStarted/PhotoGallery@master/images/Hadoop/截屏2020-02-25下午8.40.16.png) 这样一台虚拟机就配置好了,我们可以讲以上步骤重复一遍或者使用命令`rsync -av/opt/module/hadoop-2.7.2/etc lzm@hadoop7:/opt/module/hadoop-2.7.2/etc`,hadoop8也是一样(如果使用命令操作的话,更换`lzm@hadoop7`为自己的)
  1. 启动hadoop集群

    完成了上述的步骤,伪分布式hadoop集群就搭建好了,下面我们启动集群

    第一步:

    在hadoop6上输入命令hdfs namenode -format,这一步是初始化Namenode

    第二步:

    格式化完成后在hadoop6上输入命令start-dfs.sh启动HDFS

    第三步:

    然后在hadoop7(配置Resourcemanager的机器)上启动yarn,使用命令start-yarn.sh

    这是可以使用jps来查看一下启动的服务是否正确,如果和下图一样就是安装完成了

    这样我就可以在浏览器中输入10.211.55.6:50070和10.211.55.7:8088来查看hadoop的页面