Hadoop完全分布式集群安装及配置(基于虚拟机)

来源:互联网 发布:js自定义回调函数 编辑:程序博客网 时间:2024/05/21 11:14

写在前面

因为之前Hadoop伪分布式的安装(参见:Hadoop安装以及伪分布模式搭建过程)是在VirtualBox上安装了Ubuntu虚拟机,所以这次在开始的时候也是在VirtualBox上安装了3个Ubuntu虚拟机,但是3个虚拟机打开之后发现3者的IP地址是一样的(通过ifconfig命令查看IP地址),我尝试着通过设置静态IP、更改网络模式等方法都没有成功,不能够做到3个虚拟机之间互联。所以这里使用的是VMware。
VMware版本: VMware-workstation-full-12.5.7.20721.exe,秘钥:5A02H-AU243-TZJ49-GTC7K-3C61N(来自:https://zhidao.baidu.com/question/1240914582586009779.html)
Ubuntu镜像版本: ubuntu-16.04.2-server-amd64.iso
JDK版本: jdk-8u131-linux-x64.tar.gz
Hadoop版本: hadoop-2.8.0.tar.gz

一、ubuntu安装

下载地址:http://releases.ubuntu.com/?_ga=2.148742000.695831999.1499166942-66111771.1499166942
安装教程:http://jingyan.baidu.com/article/c275f6ba07e269e33d756714.html(写的很好),注意,最后有可能需要更改BIOS设置,链接文末都说明。
如果3个都使用桌面版,电脑估计会卡死,所以这里使用了server版本的,在使用上述方法安装完一个ubuntu虚拟机之后,对于其余2个ubuntu不需要像第一个一样一步一步安装,为了节省精力,可以直接使用VMware的克隆技术。
1、克隆具体操作如下:
(1)务必将之前安装的系统完全关闭,可以使用命令行shutdown -P now.
(2)这里以hadoop_s2的克隆为例,hadoop_s2系统名称右击 –> 管理 –> 克隆 –> 下一步 –> 克隆源选择“虚拟机中的当前状态”–> 下一步 –> 克隆类型选择“创建完整克隆”–> 下一步 –> 填写克隆之后的虚拟机名称即位置 –> 完成即可。


2、ubuntu系统名称:
hadoopm(作为master节点),hadoop_s1和hadoop_s2(作为2个slaver节点)。
在克隆之后,我们需要将linux的主机重命名,分别修改3个主机的hostname文件,命令:

vi /etc/hostname

以hadoopm为例,hostname文件如图:

二、3个虚拟机之间网络互通配置

我们需要使3个虚拟机之间能够网络互通,正常情况下3个虚拟机的IP在同一个网段上且可以互连。但是通过其hostname不能够互联,所以这一步的配置主要使其通过主机名也能够互联。
1、本次hadoopm、hadoop_s1和hadoop_s2的IP如下:

hostname IP hadoopm 192.168.163.128 hadoop_s1 192.168.163.129 hadoop_s2 192.168.163.130

2、配置3个虚拟机的/etc/hosts文件,配置如下:


注:3个虚拟机配置相同,都将这3个的主机名及相应的IP添加进去。

3、验证3个虚拟机之间是否可以互联
以下命令分别在3个虚拟机上验证:

ping 192.168.163.128   //检测是否可以ping通自己的IPping hadoopm     //检测是否可以ping通自己的hostnameping 192.168.163.129   //检测是否可以ping通hadoop_s1的IPping hadoop_s1     //检测是否可以ping通hadoop_s1的hostnameping 192.168.163.130   //检测是否可以ping通hadoop_s2的IPping hadoop_s2     //检测是否可以ping通hadoop_s2的hostname

若可以ping通,则进行以下配置。

三、ssh免密码登录

1、对3个虚拟机分别使用下列命令产生公私密钥:

sudo apt-get install sshssh-keygen -t rsa -P '' -f ~/.ssh/id_rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

使用命令ssh localhost进行测试,若无需输入密码,则单机ssh免密码登录成功。
2、让主节点(hadoopm)免密码登陆两个子节点(hadoop_s1和hadoop_s2)
(1)对hadoop_s1使用下面的命令,进入hadoop_s1的~/.ssh目录下:

scp hadoopm:~/.ssh/id_rsa.pub ./hadoopm_rsa.pub   //复制hadoopm的公钥cat hadoopm_rsa.pub >> authorized_keys   //将hadoopm的公钥追加到hadoop_s1的authorized_keys文件中

通过在hadoopm的~/.ssh目录下执行ssh hadoop_s1验证是否可以免密码登录,若第一次需要需要yes,但是exit退出hadoop_s1之后再次执行ssh hadoop_s1可以免密码登录,则配置成功。注意观察主机名,当登录进去之后主机名便改变了。
(2)对hadoop_s2使用下面的命令,进入hadoop_s2的~/.ssh目录下:

scp hadoopm:~/.ssh/id_rsa.pub ./hadoopm_rsa.pub   //复制hadoopm的公钥cat hadoopm_rsa.pub >> authorized_keys   //将hadoopm的公钥追加到hadoop_s2的authorized_keys文件中

通过在hadoopm的~/.ssh目录下执行ssh hadoop_s2验证是否可以免密码登录,若第一次需要需要yes,但是exit退出hadoop_s2之后再次执行ssh hadoop_s2可以免密码登录,则配置成功。

四、安装JDK

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,如图:

安装方法:Linux(Ubuntu)下如何安装JDK
注意:3个虚拟机都需要安装JDK,我这里3个虚拟机上安装的jdk目录都为:/opt/Applications/Java/jdk1.8

五、安装Hadoop

下载及安装、设置JAVA_HOME环境变量、设置Hadoop安装目录(即HADOOP_INSTALL)的环境变量参见:Hadoop安装以及伪分布模式搭建过程 的《三、安装Hadoop》
注意:3个虚拟机都需要安装Hadoop、设置JAVA_HOME、设置Hadoop安装目录,我这里3个虚拟机上安装的jdk目录都为:/opt/Applications/Hadoop/hadoop-2.8.0

六、配置Hadoop

注意:完全分布式的Hadoop配置内容和伪分布式不同!!
利用hadoop搭建伪分布式环境需要配置4个xml文件,这4个xml文件都在/opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop文件夹中。
先在hadoopm上配置,再通过scp命令复制到hadoop_s1和hadoop_s2中。

(1)修改hadoop-env.sh配置文件

配置hadoop-env.sh过程 S1:打开hadoop-env.sh文件,将当前位置切换了/opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop中,使用命令sudo vi hadoop-env.sh,命令执行后hadoop-env.sh文件被打开。 S2:在hadoop-env.sh文件中修改JAVA_HOME环境变量,将export JAVA_HOME=${JAVA_HOME}(虽然之前的代码也能获取到JAVA_HOME的值,但是有时候会失效)修改为export JAVA_HOME=/opt/Applications/Java/jdk1.8


(2)修改core-site.xml配置文件

配置core-site.xml过程 S1:打开core-site.xml文件,将当前位置切换了/opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop中,使用命令sudo vi core-site.xml,命令执行后core-site.xml文件被打开。 S2:在core-site.xml文件末尾添加上如下代码:


代码如下(和标签原来就有):

<configuration>  <property>     <name>hadoop.tmp.dir</name>     <value>/opt/Applications/Hadoop/hadoop-2.8.0/tmp</value>     <description>Abase for other temporary directories.</description>  </property>  <property>     <name>fs.default.name</name>     <value>hdfs://hadoopm:9000</value>     <final>true</final>  </property></configuration>

注意:hadoop.tmp.dir文件不是一个临时文件,是存放所有hadoop中数据的文件,其目录地址为:/opt/Applications/Hadoop/hadoop-2.8.0/tmp。

(3)修改hdfs-site.xml配置文件

配置hdfs-site.xml过程 S1:打开hdfs-site.xml文件,将当前位置切换了/opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop中,使用命令sudo vi hdfs-site.xml,命令执行后hdfs-site.xml文件被打开。 S2:在hdfs-site.xml文件末尾添加上如下代码:


代码如下(和标签原来就有):

<configuration>  <property>     <name>dfs.replication</name>     <value>2</value>     <final>true</final>  </property>  </configuration>

注意:2是指备份2份(总共2份)。在hadoop中默认有3份文件(含备份),这里总共想要存放2份文件,则改为2。

(4)修改mapred-site.xml配置文件

配置mapred-site.xml过程 S1:
(1)打开mapred-site.xml文件(你会发现在/opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop没有mapred-site.xml文件,只有一个mapred-site.xml.template文件。这是因为mapreduce比较特殊,它可以配置也可以不配置,而其他例如core-site.xml存在因为其必须配置。
(2)这里只需要将mapred-site.xml.template复制一下,并且将文件名改为mapred-site.xml进行修改即可,直接在/opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop下使用sudo cp mapred-site.xml.template mapred-site.xml即可)。
(3)将当前位置切换了/opt/Application/Hadoop/hadoop-2.8.0/etc/hadoop中,使用命令sudo vi mapred-site.xml,命令执行后mapred-site.xml文件被打开。 S2:在mapred-site.xml文件末尾添加上如下代码:


代码如下(和标签原来就有):

<configuration>  <property>     <name>mapred.job.tracker</name>     <value>192.168.163.128:9001</value>  </property></configuration>

这里192.168.163.128是hadoopm的IP地址。
(5)修改yarn-site.xml配置文件

配置yarn-site.xml过程 S1:打开yarn-site.xml文件,将当前位置切换了/opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop中,使用命令sudo vi yarn-site.xml,命令执行后yarn-site.xml文件被打开。 S2:在yarn-site.xml文件末尾添加上如下代码:


代码如下(和标签原来就有):

<configuration>  <property>     <name>yarn.resourcemanager.hostname</name>     <value>hadoopm</value>  </property>  <property>     <name>yarn.nodemanager.aux-services</name>     <value>mapreduce_shuffle</value>  </property></configuration>

(6)配置masters和slaves文件
切换至/opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop,使用ls查看文件,发现只有slaves,这里使用sudo cp slaves masters 命令复制一下。
(1)配置的masters文件如下:


(2)配置的slaves文件如下:

(7)向2个子节点复制hadoop配置

操作 命令 向hadoop_s1中复制hadoop配置 在hadoopm的/home/lina(根目录)下使用下面的命令:scp -r /opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop hadoop_s1:/opt/Applications/Hadoop/hadoop-2.8.0/etc 向hadoop_s2中复制hadoop配置 在hadoopm的/home/lina(根目录)下使用下面的命令:scp -r /opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop hadoop_s2:/opt/Applications/Hadoop/hadoop-2.8.0/etc

其中,/opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop是hadoopm的配置文件hadoop配置文件目录,相当于复制配置文件夹,/opt/Applications/Hadoop/hadoop-2.8.0/etc是hadoop_s1(hadoop_s2)中需要将hadoopm配置文件复制到的地方,即这里需要用hadoopm的hadoop配置文件夹替换为hadoop_s1(hadoop_s2)的hadoop配置文件夹。

七、格式化HDFS文件

在hadoopm上格式化HDFS文件,使用cd命令将当前位置切换到/opt/Applications/Hadoop/hadoop-2.8.0/bin目录下(bin目录下面有一个hdfs),执行命令:

./hdfs namenode -format

出现”Storage directory /opt/Applications/Hadoop/hadoop-2.8.0/etc/hadoop/name has been successfully formatted”说明格式化成功。

八、启动进程检测配置是否正确

1、在主节点hadoopm上操作:
进入/opt/Applications/Hadoop/hadoop-2.8.0/sbin目录,执行下列命令:

start-all.sh

使用jps命令验证,若启动成功,则会出现下图:


2、在2个子节点hadoop_s1和hadoop_s2使用jps验证进程是否已启动(因为主节点已经启动了进程,所以在子节点上不需要再次启动,直接验证即可),若成功开启,则会出现下图
(1)对hadoop_s1,查询结果如图:

(2)对hadoop_s2,查询结果如图:

3、可通过WEB浏览器可视化验证是否服务已成功开启
(1)通过访问192.168.163.128:50070可查看主节点hadoopm的dfs的情况,如下图所示:

(2)通过访问192.168.163.129:50075可查看hadoop_s1的dfs情况,通过访问192.168.163.130:50075可查看hadoop_s2的dfs情况。下图是hadoop_s1的dfs情况:

(3)通过访问192.168.163.128:8088可查看主节点hadoopm的yarn进程的情况,如下图:

(4)通过访问192.168.163.129:8042可查看子节点hadoop_s1的yarn进程,通过访问192.168.163.130:8042可查看子节点hadoop_s2的yarn进程。下图是hadoop_s1的yarn情况:


至此,Hadoop基于虚拟机的完全分布式集群配置完毕。


参考文章:hadoop学习之hadoop完全分布式集群安装