前言:说真的我是真不喜欢搭建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。
到此准备工作完成!
这是搭建Hadoop最恶心的部分了,很多奇怪的问题都是从这产生的。废话不多话进入正题。
1.创建公匙:
创建完后,在三台主机上都执行下面的指令:
ssh-copy-id localhost
ssh-copy-id slave1
ssh-copy-id slave2
也可以将名字替换成IP,但前面已经在host文件映射过Ip和名字的关系了。执行完三条指令,分别测试:ssh localhost、ssh slave1 ssh slave2.可以看到成功免密登录。
以前博客给的其实都不太能用了,那些安装包的地址都失效了,如果你有可视化的操作界面,直接到hadoop官网下载然后解压,安装包大小在300MB左右。如果是服务器这边只有大黑框,可以通过wget指令来实现安装:这里贴一个还能用的下载源:http : //archive.apache.org/dist/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
下面开始配置hadoop的文件:
1.修改core-site.xml:
fs.defaultFS
hdfs://master:9000
io.file.buffer.size
4096
hadoop.tmp.dir
/opt/hadoop/hadoop-2.8.5/tmp
2.修改hdfs-site.xml
用mkdir命令在hadoop-2.8.5目录下创建hdfs文件夹,然后再hdfs里面分别创建name和data文件夹。
dfs.replication
3
dfs.namenode.name.dir
/opt/hadoop/hadoop-2.8.5/hdfs/name
dfs.datanode.data.dir
/opt/hadoop/hadoop-2.8.5/hdfs/data
dfs.http.address
Master:50070
dfs.secondary.http.address
0.0.0.0:50090
dfs.webhdfs.enabled
true
dfs.permissions
false
3.配置mapred-site.xml
这里注意一下,如果没有这个文件,对mapred.site.xml.template编辑也是一样的。
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
Master:10020
mapreduce.jobhistory.webapp.address
Master:19888
4.配置yarn-site.xml
凡是涉及到主机名和路径的自行替换成自己的。
yarn.resourcemanager.hostname
slave1
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.address
Master:8032
yarn.resourcemanager.scheduler.address
Master:8030
yarn.resourcemanager.resource-tracker.address
Master:8031
yarn.resourcemanager.admin.address
Master:8033
yarn.resourcemanager.webapp.address
Master:8088
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搭建不难,网上有些人写的帖子确实垃圾,漏了很多内容,但我这篇绝对是我踩了诸多的坑后总结的。