搭建VM的虚拟机下hadoop集群环境

来源:互联网 发布:网络适应广电总局 编辑:程序博客网 时间:2024/05/19 10:55

前言

大家都知道,Hadoop的部署方式可分为

  • 单机模式
  • 伪分布式
  • 完全分布式

本篇主要讲解的就是完全分布式。

搭建完全分布式的集群环境,需要多台的硬件设备,作为初学者,为了搭建集群去买多台电脑,多少有点不现实,所以这里我采用的是VM虚拟机,模拟搭建一个由三台机器组成的集群。

要想成功搭建hadoop的分布式环境,需要具备安装和操作VM虚拟机,使用Ubuntu系统的基本命令,Linux下安装Java以及Hadoop等相关技能。不过不会的话,也不用太担心,我会尽量把我的操作过程写得详细一点。

具体的搭建过程可以分为以下几个阶段:

  • 安装虚拟机
  • 安装和配置Ubuntu
  • 安装和配置Java环境
  • 安装和配置Hadoop

安装虚拟机

VMware Workstation 下载 http://rj.baidu.com/soft/detail/13808.html?ald
激活码百度一搜一大堆,这里就不写了,安装过程也比较简单,实在不会的,百度上也有图解的教程,请自行搜索。

安装和配置Ubuntu

Ubuntu 下载https://www.ubuntu.com/download

下面介绍如何在虚拟机中安装Ubuntu操作系统,我们需要安装三台虚拟机,分别命名为Hadoop Master(以下简称master),Hadoop Slave1(以下简称slave1)和Hadoop Slave2(以下简称slave2),以下以安装master为例

1、首先,打开安装好的虚拟机VMware Workstation 12 Pro(以下简称VM) 
这里写图片描述

2、依次点击 文件 → 新建虚拟机 
这里写图片描述

3、选择 自定义(高级)(C),点击 下一步 
这里写图片描述

4、硬件的兼容性选择,使用默认的设置,直接点击 下一步 
这里写图片描述

5、点击 浏览,选择下载好的Ubuntu的iso文件,点击 下一步 
这里写图片描述

6、填写安装信息,点击 下一步 
这里写图片描述

7、命名虚拟机,为了方便我们后续识别,安装第一个系统时,我们命名使用Hadoop Master(当我们安装第二个和第三个系统时分别使用Hadoop Slave1Hadoop Slave2,用于表示第一个是主服务器,第二个和第三个属于从服务器),点击浏览,选择一个本机的空间稍微大一点的目录用于存放我们安装系统的物理文件,点击 下一步 
这里写图片描述

8、处理器配置,根据自己机器的CPU情况来设置,比如我的是四核的,处理器数量就选择4,处理器的核心数量使用默认的1就行,点击 下一步 
这里写图片描述

9、设置内存,注意,必须是4MB的倍数,根据自己机器的内存来设置。比如,我的PC主机内存是8G,我为每台虚拟机设置1.5G(1536MB)的内存,主机剩余3.5G内存,这样主机不卡,虚拟机内存也足够使用。原则上说,给虚拟机设置的内存总和不要超过PC主机的物理内存就行,只不过设置太高,主机就会变慢。 
这里写图片描述

10、网络类型,这里选择使用桥接网络,因为我们需要主机与虚拟机与互联网,这三者都是通的,在安装的过程中,才不会遇到麻烦。 
这里写图片描述

11、I/O控制器和磁盘类型,都使用默认的选项即可,点击 下一步 
这里写图片描述 
这里写图片描述

12、选择磁盘,选择创建新的虚拟磁盘,点击 下一步 
这里写图片描述

13、指定磁盘容量,也就是设置虚拟机系统占用主机的物理空间的大小,使用默认值即可。 
这里写图片描述

14、指定磁盘文件,默认即可,点击 下一步 
这里写图片描述

15、点击 完成,等待虚拟机系统安装完成,安装过程中,请保持网络畅通。

16、同理,安装另外两台虚拟机Hadoop Slave1Hadoop Slave2,都安装好后,如下图 
这里写图片描述

17、分别设置每台虚拟机的固定IP,保证虚拟机与虚拟机与主机之间都能够相互ping通。具体操作这里就不赘述了,网上资料有很多,如果是公司电脑,让网络管理员帮忙设置下,如果是自己的机器,看下自己的路由器的IP分配情况 
这里写图片描述

18、我们要搭建一个由三台机器组成的集群,先配置虚拟机的hostshostname,以便虚拟机与虚拟机与主机之间不用使用IP,使用hostname就可以相互识别,很方便。

192.168.8.230    master192.168.8.231    slave1192.168.8.232    slave2
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

以master为例,通过命令:

hadoop@master:~$ vi /etc/hostname
  • 1
  • 1

设置为master,另外两台虚拟机分别设置为slave1slave2 
这里写图片描述

hadoop@master:~$ vi /etc/hosts
  • 1
  • 1

三台虚拟机都设置成以下的配置 
这里写图片描述

19、配置三台虚拟机之间的SSH无密码登录

首先通过命令生成公匙:

hadoop@master:~$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  • 1
  • 1

这里写图片描述

将公匙添加到authorized_keys文件中:

hadoop@master:~$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  • 1
  • 1

这样,localhost就可以无密码登录了,看下效果:

hadoop@master:~$ ssh localhostWelcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-123-generic x86_64) * Documentation:  https://help.ubuntu.com/722 packages can be updated.356 updates are security updates.New release '14.04.5 LTS' available.Run 'do-release-upgrade' to upgrade to it.Last login: Tue Mar  7 14:40:15 2017 from slave1hadoop@master:~$
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

同理,将公匙复制到slave1slave2authorized_keys文件中,就可以让master无密码登录slave1slave2了。

通过命令远程复制:

hadoop@master:~$ scp ~/.ssh/id_dsa.pub hadoop@slave1:~/hadoop@master:~$ scp ~/.ssh/id_dsa.pub hadoop@slave2:~/
  • 1
  • 2
  • 1
  • 2

这里写图片描述

分别到slave1slave2机器上,添加master的公匙信息到authorized_keys文件中:

hadoop@slave1:~$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
  • 1
  • 1
hadoop@slave2:~$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
  • 1
  • 1

master上,测试一下效果: 
这里写图片描述

同理:

  • slave1生成公匙,然后复制到masterslave2authorized_keys文件中,这样slave1就可以无密码登录masterslave2
  • slave2生成公匙,然后复制到masterslave1authorized_keys文件中,这样slave2就可以无密码登录masterslave1

以上就是三台虚拟机的SSH无密码登录配置方法,大家可以根据实际的使用情况来设置,并不一定非要三台都支持双向的无密码登录。



安装和配置Java环境

安装JDK: 下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

1、以master为例,下载完,解压,这些最好都在hadoop用户的根目录下执行,可以避免在其他目录没有权限的问题,解压完在移动到/usr/lib/jvm/jdk1.8.0_121目录下面,这个不是必须的,大家也可以移到其他目录:

hadoop@master:~$ cd ~hadoop@master:~$ tar -zxvf ~/jdk-8u121-linux-x64.tar.gzhadoop@master:~$ sudo mv ~/jdk1.8.0_121 /usr/lib/jvm/
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

这里写图片描述

2、配置环境变量

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_121export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

将上面的内容添加到~/.bashrc文件中,注意,JAVA_HOME后面的路径改成自己的安装路径:

hadoop@master:~$ vi ~/.bashrchadoop@master:~$ source ~/.bashrc
  • 1
  • 2
  • 1
  • 2

这里写图片描述

使用Java -version命令查看版本,如果出现以下信息,说明配置成功了: 
这里写图片描述

同样,也把slave1slave2安装和配置好java环境



安装和配置Hadoop

hadoop下载 http://hadoop.apache.org/releases.html

hadoop集群中每台机器的配置都基本相同,我们先配置好master,然后复制到slave1slave2

1、下载并解压,并重命名目录为hadoop,移动到/usr目录下去

hadoop@master:~$ tar -zxvf hadoop-2.2.0_x64.tar.gzhadoop@master:~$ mv hadoop-2.2.0 hadoop
  • 1
  • 2
  • 1
  • 2

这里写图片描述

hadoop@master:~$ sudo mv ~/hadoop /usr/
  • 1
  • 1

2、创建几个关键目录,以备后用:

hadoop@master:~$ mkdir dfshadoop@master:~$ mkdir dfs/namehadoop@master:~$ mkdir dfs/datahadoop@master:~$ mkdir tmp
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

这里写图片描述

3、修改配置文件:

~/hadoop/etc/hadoop/hadoop-env.sh~/hadoop/etc/hadoop/yarn-env.sh~/hadoop/etc/hadoop/slaves~/hadoop/etc/hadoop/core-site.xml~/hadoop/etc/hadoop/hdfs-site.xml~/hadoop/etc/hadoop/mapred-site.xml~/hadoop/etc/hadoop/yarn-site.xml
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.1 修改hadoop-env.sh,将JAVA_HOME后面填写上自己的JDK路径 
这里写图片描述

3.2 修改yarn-env.sh,将JAVA_HOME后面填写上自己的JDK路径 
这里写图片描述

3.3 修改slaves,填写所有的slave节点 
这里写图片描述

3.4 修改core-site.xml,说明:

  • hdfs://master:8020中的masterhostname,如果你们设置的跟我的不一样请修改
  • file:/home/hadoop/tmp就是刚才第2步设置的目录,如果你们设置的跟我的不一样请修改
  • hadoop.proxyuser.hadoop.hostshadoop.proxyuser.hadoop.groups中的第二个hadoop换成自己的用户名
<configuration>       <property>                <name>fs.defaultFS</name>                <value>hdfs://master:8020</value>       </property>       <property>                <name>io.file.buffer.size</name>                <value>131072</value>        </property>       <property>               <name>hadoop.tmp.dir</name>               <value>file:/home/hadoop/tmp</value>               <description>Abase for other temporary directories.</description>       </property>        <property>               <name>hadoop.proxyuser.hadoop.hosts</name>               <value>*</value>       </property>       <property>               <name>hadoop.proxyuser.hadoop.groups</name>               <value>*</value>       </property></configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

3.5 修改hdfs-site.xml,说明:

  • master:9001中的masterhostname,如果你们设置的跟我的不一样请修改
  • file:/home/hadoop/dfs/namefile:/home/hadoop/dfs/data就是刚才第2步设置的目录,如果你们设置的跟我的不一样请修改
<configuration>       <property>                <name>dfs.namenode.secondary.http-address</name>               <value>master:9001</value>       </property>     <property>             <name>dfs.namenode.name.dir</name>             <value>file:/home/hadoop/dfs/name</value>       </property>      <property>              <name>dfs.datanode.data.dir</name>              <value>file:/home/hadoop/dfs/data</value>       </property>       <property>               <name>dfs.replication</name>               <value>3</value>        </property>        <property>                 <name>dfs.webhdfs.enabled</name>                  <value>true</value>         </property></configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3.6 修改mapred-site.xml,说明:其中的masterhostname,如果你们设置的跟我的不一样请修改

<configuration>          <property>        <name>mapreduce.framework.name</name>                <value>yarn</value>           </property>          <property>                  <name>mapreduce.jobhistory.address</name>                  <value>master:10020</value>          </property>          <property>                <name>mapreduce.jobhistory.webapp.address</name>                <value>master:19888</value>       </property></configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.7 修改yarn-site.xml,说明:其中的masterhostname,如果你们设置的跟我的不一样请修改

<configuration>        <property>               <name>yarn.nodemanager.aux-services</name>               <value>mapreduce_shuffle</value>        </property>        <property>               <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>               <value>org.apache.hadoop.mapred.ShuffleHandler</value>        </property>        <property>               <name>yarn.resourcemanager.address</name>               <value>master:8032</value>       </property>       <property>               <name>yarn.resourcemanager.scheduler.address</name>               <value>master:8030</value>       </property>       <property>            <name>yarn.resourcemanager.resource-tracker.address</name>             <value>master:8031</value>      </property>      <property>              <name>yarn.resourcemanager.admin.address</name>               <value>master:8033</value>       </property>       <property>               <name>yarn.resourcemanager.webapp.address</name>               <value>master:8088</value>       </property></configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

4、master配置完成,我们把hadoop整个目录复制到slave1slave2上去

hadoop@master:~$ sudo scp -r /usr/hadoop hadoop@slave1:~/hadoop@master:~$ sudo scp -r /usr/hadoop hadoop@slave2:~/
  • 1
  • 2
  • 1
  • 2

5、使用ssh分别到slave1slave2机器上将hadoop目录移动到和master相同的目录中去

hadoop@master:~$ ssh slave1hadoop@slave1:~$ sudo mv ~/hadoop/ /usr/
  • 1
  • 2
  • 1
  • 2
hadoop@master:~$ ssh slave2hadoop@slave2:~$ sudo mv ~/hadoop/ /usr/
  • 1
  • 2
  • 1
  • 2

6、添加hadoop路径到环境变量中

hadoop@master:~$ vi /etc/environmenthadoop@master:~$ source /etc/environment
  • 1
  • 2
  • 1
  • 2

添加以下红框的内容,如果你们的hadoop路径和我的不一样,请修改 
这里写图片描述

7、启动hadoop

格式化namenode

hadoop@master:~$ hdfs namenode –format
  • 1
  • 1

启动hdfs

hadoop@master:~$ start-dfs.sh
  • 1
  • 1

启动yarn

hadoop@master:~$ start-yarn.sh
  • 1
  • 1

8、查看进程

先看master的:

hadoop@master:~$ jps
  • 1
  • 1

这里写图片描述

slave1上查看进程:

hadoop@master:~$ ssh slave1hadoop@slave1:~$ jps
  • 1
  • 2
  • 1
  • 2

这里写图片描述

也可以到浏览器中输入http://master:8088/查看: 
这里写图片描述

搞定!


ps:

1.  安装3个客户机

     sudo passwd root密码:123456

2.  etc/hostname  修改为master、slavel1、slavel2

3.   sudo gedit etc/hosts和 sudo geditetc/hosts~  修改相应ip和hostname

      三个主机各自(1ssh-keygen -t dsa -P'' -f ~/.ssh/id_dsa

            2cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

  ---》即可ssh localhost

4.      三个客户机ssh-keygen -t rsa

----

cat ~/.ssh/id_rsa.pub | ssh -p 22 hadoop@slavel1 'cat>> ~/.ssh/authorized_keys'

至另外两台

原创粉丝点击