说明:
刚刚开始尝试搭建Hadoop平台,主要还是参考别的博客上的内容,但是没有找到一个可以完全按照他的步骤来完成的,期间遇到了很多问题,也是自己慢慢找,希望能切实可行的写出一个完整可用的搭建过程出来,也是自己记录一番,但也是初次写博客,很难写得很好。
搭建环境:
windows10 系统,VMware 14 PRO,三台虚拟机,都是Ubuntu 16.04系统,一个master,两个slave。
搭建过程:
首先,我是参照了其他博客上的步骤,在这里我先引用一下:史上最详细的Hadoop搭建教程,还要一个就是:从零开始搭建Hadoop-2.7.1分布式集群。这两个里面的内容已经是很完整并且详细的了。
1.创建一个虚拟机
我也是参照了教程上的内容,首先只创建了一个虚拟机,额,在创建虚拟机的时候,内存给个2G可能会好点,以为在之后出现的问题中,有解答是运行内存可能需要大一点,我不确定是不是,但我还是调到了每台2GB。其实这个配置,比如说内存和硬盘容量,不是说就是给他那么多就要用那么多了,是说最大可用的额度吧,这是我的理解,所以暂时分的多一点不代表内存就会爆炸了。
2.安装Hadoop,配置相关文件
在此之前,需要安装java,再在虚拟机上面安装Hadoop-2.7.4,首先是下载,然后解压缩。这里下载的时候注意一点就是不要下载那个.src后缀的文件,那个文件小点,但是没用。下载之后按照教程上说的解压缩就行了,但是这个目录的话,尽量还是靠外点吧,因为之后要频繁地输入这个路径,如果太长,就会很麻烦。安装Hadoop-2.7.4之后,要对其中的很多配置文件进行修改。主要是hdfs-site.xml,yarn-site.xml,core-site.xml,mapred-site.xml,这几个配置文件还是很有讲究,到了后面都是他们的搞得我头疼。其中,mapred-site.xml我后面是没有修改过了,而core-site.xml,hdfs-site.xml在初次配置时需要注意一下,其实就是文件放置的位置,也问题不大,就是yarn-site.xml,问题比较多。其实在这里的时候我都是按照教程里的(就是我之前贴的两个链接)配置的。先配了再说吧,之后再去改。
3.复制虚拟机
用VMware复制虚拟机的功能,复制两个出来,作为两个slave结点。在这里配置网络IP的时候,我是参照的 第一个教程(史上最详细)配置的,但是我并没有遇到需要修改MAC地址的情况,不知道是不是VMware版本高了帮我解决了这个问题。之后还有修改hosts文件,修改每个虚拟机的名字,修改master结点的slaves文件,这个教程里都有的。
4.配置SSH免密连接
在这个问题上我纠缠了很久,其实这个教程很多,也很详细,主要的问题就是出在,Linux文件权限上,我起初用本地用户解决了SSH连接问题,后来在下一步的工作时,本地用户没有文件权限,我又改成root用户,结果root用户又不能连接SSH了,所以搞得很愚蠢,后来给本地用户赋予文件权限就好。我在这个步骤还是卡了蛮久。
5.格式化namenode
先进入Hadoop目录下的bin/hdfs,再用下面的命令:
bin/hdfs namenode -format
6.启动集群
使用下面的命令:
sbin/start-all.sh
这是Hadoop目录下的sbin目录。
7.查看进程
使用 jps 命令查看进程,mater结点应该是四个,slave结点应该是三个,但是,如果是按照第一个教程(史上最详细),master结点是没有namenode的,没有这个没有办法运行下面的程序。在这里要修改yarn-site.xml文件
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
此时,还有一点要注意!起初我以为,既然slave结点是由master结点复制过去的,那么他们的配置文件应该是保持一致的,但是,当我把这个yarn-site.xml复制到slave中后,发现后面启动之后,slave结点中的nodemanager会启动之后再停止,我只能再次寻找原因,还是把slave文件的yarn-site.xml文件中的内容换回了我之前参考的教程里(就是上面贴的两个链接)的样子,这样才没有问题。
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
8.运行示例程序
运行自带的Wordcount程序,这个可以按照之前贴的教程来做。但是有一点要注意的就是要用 dfs 命令来创建文件夹和复制文件,就是说要严格按照教程里的步骤来,如果自己偷偷建一个,然后再让他来运行时找不到的,而且用dfs命令来创建的input文件夹是不可见的,别担心,直接运行没有报错说不见了就行。还有就是每次format之后,这个文件就会消失,你需要重新再新建,再复制进去。
9.补充问题
在每次format,格式化namenode的之前,都要把配置文件里的目录,主要是core-site.xml和hdfs-site.xml里的东西删掉,不然可能下次运行时,会显示CID 不一致导致运行错误,此时你也可是直接复制日志里的master的CID 到Hadoop目录下的hdfs/name/current下的version文件里改掉,让他和master一致。期间我还遇到了卡在map:0%,reduce:0%这个阶段的情况,具体原因我甚至都是不清楚,但是应该是和yarn-site.xml文件的配置有关,我也是查了多个资料,改了很多,甚至都不太清楚是哪个起了作用,最后还是终于跑通了Wordcount这个示例程序。
在搭建这个环境的过程中,首先要对Linux的各个基本操作有所了解,比如文件操作,权限控制这些,当然这都是要学习的,慢慢来吧。
最后结语
这是我初次搭建Hadoop平台,也是我第一次写博客,学习之路刚刚开始,希望自己砥砺前行,慢慢积累,有所惭愧,但好在为时未晚,加油。