前言:说真的我是真不喜欢搭建Hadoop,什么奇葩问题都有。最近有个课程需要做这个实验,无奈自己的mac空间不够我折腾,特意租了三个服务器来做这个实验。我其实也是差不多照着网上的教程来的,但他们说的都不是很细,遇到的问题也很多。下面这篇博客记录了我在三台服务器上搭建Hadoop完全分布式的记录。本地的搭建也适用,并不要求是云服务器。如果是用云服务器来搭建的朋友,推荐使用xshell6来操作。

OK进入正题。我的结构是用阿里云(Centos7.5)作为master,腾讯云(Centos6.3)作为两个slave。博客分成三个部分: 

一、环境设置

二、设置主从节点间的免密登录

三、安装Hadoop并配置

四、运行结果

 


 

一、环境设置:

在安装好Linux系统的基础上,在master节点上先做以下准备工作:(云服务器自带操作系统)

自行切换到root模式下,可以避免权限的 干扰。虽然不推荐这样,但学习阶段不用care。

1.安装jdk1.8:到甲骨文的官网自行下载jdk1.8 linux版本的,当然也可以通过wget+下载网址来下载。

下载完之后

在usr下面创建一个java文件夹:mkdir java

然后通过解压指令:tar -zxvf +jdk的名字  -C +解压路径(也就是/usr/java)

等待解压完成,输入指令vi /etc/profile配置java环境变量。推荐大家这样配置!profile是对全局用户均有效。

.barshrc那个是运行时有效,具体百度。然后加入下面的内容。注意路径的替换:

export JAVA_HOME=/usr/java/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

然后通过指令:source /etc/profile

控制台输入:jave -version(注意空格)

ok配置成功!三台主机都要配置!!

2.关闭防火墙:其实centos的防火墙默认是关闭了,但是为了防止这个问题的影响,还是要关闭一下:

防火墙一定要关闭!不然后面会影响我们访问hadoop的本地web页面

没有任何输出则证明执行成功。

3.修改hosts文件:(root模式)

这一步非常关键!一定不能填错IP地址。(如果是本地的话则没有这个限制)云服务器一般会有公网和内网两个IP。首先在master上hosts文件需要填入的是:master内网ip(我这里是阿里云服务器,因此填入阿里云的内网ip),然后填入两个slave的外网IP。然后再修改两个slave的hosts文件,内容填入三台服务器的外网IP即可。

打个码。。毕竟是我自己的服务器。配置完master,务必配置两台slave,网上说的什么发送这个hosts配置给其它两台slave,其实没必要也不需要。按照我下面说的去配。

这里给大家的建议是:在哪台机器上配置就用自己的内网IP,其它机器用外网IP。在这里解释一下内网和外网ip。外网ip是服务器映射提供的,可以自由更改,内网ip则是你服务器的真实ip,不可更改,就是我们常说的每台主机都有一个独一无二的ip地址。

4.创建Hadoop用户:(这一步可以跳过,全在root模式下,可以避免权限问题)

后面Hadoop环境的配置都要在这个用户下面了。

adduser hadoop --> passward hadoop 然后输入密码。

之后切换到Hadoop用户:su hadoop。

到此准备工作完成!

二、设置master和slave之间免密登录

这是搭建Hadoop最恶心的部分了,很多奇怪的问题都是从这产生的。废话不多话进入正题。

1.创建公匙:

创建完后,在三台主机上都执行下面的指令:

ssh-copy-id localhost

ssh-copy-id slave1

ssh-copy-id slave2

也可以将名字替换成IP,但前面已经在host文件映射过Ip和名字的关系了。执行完三条指令,分别测试:ssh localhost、ssh slave1 ssh slave2.可以看到成功免密登录。

三、安装hadoop并配置:

以前博客给的其实都不太能用了,那些安装包的地址都失效了,如果你有可视化的操作界面,直接到hadoop官网下载然后解压,安装包大小在300MB左右。如果是服务器这边只有大黑框,可以通过wget指令来实现安装:这里贴一个还能用的下载源:http : //archive.apache/dist/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz

下面开始配置hadoop的文件:

1.修改core-site.xml:

<configuration>

<!--配置hdfs文件系统的命名空间--> 
  <property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://master:9000</value> <!--这里注意替换自己的主机名字-->
  </property> 

<!-- 配置操作hdfs的存冲大小 --> 
  <property> 
    <name>io.file.buffer.size</name> 
    <value>4096</value> 
  </property> 
<!-- 配置临时数据存储目录 --> 
  <property> 
    <name>hadoop.tmp.dir</name> 
    <value>/opt/hadoop/hadoop-2.8.5/tmp</value> <!--这里注意替换自己的hadoop路径,这里需要在hadoop-2.8.5的目录创建一个tmp文件夹-->
  </property>

</configuration>

2.修改hdfs-site.xml

用mkdir命令在hadoop-2.8.5目录下创建hdfs文件夹,然后再hdfs里面分别创建name和data文件夹。

<configuration>

<!--配置副本数--> 
    <property> 
        <name>dfs.replication</name> 
        <value>3</value> 
    </property> 
<!--hdfs的元数据存储位置--> 
    <property> 
        <name>dfs.namenode.name.dir</name> 
        <value>/opt/hadoop/hadoop-2.8.5/hdfs/name</value> <!--注意替换-->
    </property> 
<!--hdfs的数据存储位置--> 
    <property> 
        <name>dfs.datanode.data.dir</name> 
        <value>/opt/hadoop/hadoop-2.8.5/hdfs/data</value> <!--注意替换-->
    </property> 
<!--hdfs的namenode的web ui 地址--> 
    <property> 
        <name>dfs.http.address</name> 
        <value>Master:50070</value> <!--注意替换-->
    </property> 
<!--hdfs的snn的web ui 地址--> 
    <property> 
        <name>dfs.secondary.http.address</name> 
        <value>0.0.0.0:50090</value> <!--这里照着我输入就好了,改成这个后面才能正常访问hadoop本地的web页面-->
    </property> 
<!--是否开启web操作hdfs--> 
    <property> 
        <name>dfs.webhdfs.enabled</name> 
        <value>true</value> 
    </property> 
<!--是否启用hdfs权限(acl)--> 
    <property> 
        <name>dfs.permissions</name> 
        <value>false</value> </property>

</configuration>

3.配置mapred-site.xml

这里注意一下,如果没有这个文件,对mapred.site.xml.template编辑也是一样的。

<configuration>

<!--指定maoreduce运行框架--> 
    <property> 
        <name>mapreduce.framework.name</name> 
        <value>yarn</value> </property> 
<!--历史服务的通信地址--> 
    <property> 
        <name>mapreduce.jobhistory.address</name> 
        <value>Master:10020</value> <!--注意替换-->
    </property> 
<!--历史服务的web ui地址--> 
    <property> 
        <name>mapreduce.jobhistory.webapp.address</name> 
        <value>Master:19888</value> <!--注意替换-->
    </property>

</configuration>

4.配置yarn-site.xml

凡是涉及到主机名和路径的自行替换成自己的。

<configuration>

<!-- Site specific YARN configuration properties -->

<!--指定resourcemanager所启动的服务器主机名--> 
    <property> 
        <name>yarn.resourcemanager.hostname</name> 
        <value>slave1</value> 
    </property> 
<!--指定mapreduce的shuffle--> 
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property> 
<!--指定resourcemanager的内部通讯地址--> 
    <property> 
        <name>yarn.resourcemanager.address</name> 
        <value>Master:8032</value> 
    </property> 
<!--指定scheduler的内部通讯地址--> 
    <property> 
        <name>yarn.resourcemanager.scheduler.address</name> 
        <value>Master:8030</value> 
    </property> 
<!--指定resource-tracker的内部通讯地址--> 
    <property> 
        <name>yarn.resourcemanager.resource-tracker.address</name> 
        <value>Master:8031</value> 
    </property> 
<!--指定resourcemanager.admin的内部通讯地址--> 
    <property> 
        <name>yarn.resourcemanager.admin.address</name> 
        <value>Master:8033</value> 
    </property> 
<!--指定resourcemanager.webapp的ui监控地址--> 
    <property> 
        <name>yarn.resourcemanager.webapp.address</name> 
        <value>Master:8088</value> 
    </property>

</configuration>

5.配置slaves:直接加入slave1 slave2 。替换成自己的主机名字。

6.配置hadoop-env.sh、yarn-env.sh、mapred-env.sh 在里面加入自己的jdk路径。如果不知道jdk路径输入whereis java。加入下面的内容:/usr/java/jdk1.8.0_231。注意替换自己的路径。

7.配置完成!将该文件打包发送到其它两台服务器上面。

打包指令:tar -zcvf +新压缩的文件名 +被压缩的文件名。

发送指令: scp +待发送的文件名+ 用户名@主机名:/接受路径

如: scp hadoop-2.8.5.tar.gz root@slave1:/home/hadoop

8.配置hadoop的环境变量:

vi  /etc/profile

添加下面的内容,注意替换自己的路径:如果用到的路径没有相应的文件夹就自己创建。请注意三台主机都要配置!!

export HADOOP_HOME=/usr/opt/hadoop/hadoop-2.8.5
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_LOG_DIR=/usr/opt/hadoop/hadoop-2.8.5/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR

执行指令source  /etc/profile 然后控制台输入 hadoop version 输出hadoop的版本说明配置成功。

四、运行结果

1.启动hadoop:

首先进入hadoop的sbin目录,格式化namenode:hdfs namenode -format

输入指令:start-all.sh会启动所有的服务,就不需要到salve1在去启动yarn。

等待它完成。

然后控制台输入jps:

可以看到hadoop所有的服务都已经成功启动。

然后我们访问hadoop的本地web页面:

浏览器输入:http://116.62.111.210:50070/  这里注意替换成自己服务器的公网ip!!

然后可以看到下面的界面:

对了还可以访问9000端口跑wordcount程序,可以看到结果。这里演示了。修改任何hadoop文件都要先运行stop-all.sh停掉所有的hadoop服务器,修改完成后务必记得格式化namenode。到此一个hadoop-2.8.5正式搭建完成!

这里说一下博主搭建的心得吧。其实hadoop搭建不难,网上有些人写的帖子确实垃圾,漏了很多内容,但我这篇绝对是我踩了诸多的坑后总结的。

更多推荐

超简单:在阿里云和腾讯云搭建完全分布式Hadoop环境(踩坑无数,含泪总结的)