hadoop支持三种方式来搭建,分别是
1.单击模式,即Local (Standalone) Mode
2.伪分布式,即Pseudo-Distributed Mode
3.集群方式,即Fully-Distributed Mode
单击模式就不说了,没啥用。这次教程我们来看看如何一步步搭建伪分布式的hadoop,所谓伪分布式,也是运行在一台机器上的,hadoop也只需安装一个,知识启动各个服务的时候是不同的java进程罢了。
1.获取64位hadoop安装包并上传到机器上:
[root@node113 ~/installs]#ls
hadoop-2.6.5_x64.tar.gz
2.解压到/usr/local/hadoop目录下:
[root@node113 ~/installs]#mkdir -p /usr/local/hadoop
[root@node113 ~/installs]#tar -zxvf hadoop-2.6.5_x64.tar.gz -C /usr/local/hadoop
3.cd /usr/local/hadoop
4.查看一下目录结构,心里有个谱:
5.解压了hadoop安装包之后,现在开始配置hadoop的配置文件:
[root@node113 /usr/local/hadoop]#cd hadoop-2.6.5/etc/hadoop/
6.要配置哪些文件呢?我用红框都给标出来了,即core-site.xml、hadoop-env.sh、hdfs-site.xml、mapred-site.xml.template、yarn-site.xml这五个文件:
7.vi hadoop-env.sh:
把export JAVA_HOME=${JAVA_HOME}修改为export JAVA_HOME=/usr/local/java/jdk1.7.0_80
8.vi core-site.xml,在configuration标签中加入如下内容:
<property>
<name>fs.defaultFS</name>
<value>hdfs://node113:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data</value>
</property>
其中fs.defaultFS里面的node113是当前机器的hostname,hadoop.tmp.dir用于配置hadoop的工作产生数据的存放目录.
9.创建上一步指定的hadoop的工作目录:
[root@node113 /usr/local/hadoop/hadoop-2.6.5/etc/hadoop]#mkdir -p /usr/local/hadoop/data
10.vi hdfs-site.xml,指定hdfs的datanode保存副本的数量,因为现在就一台机器所以设置为1,集群的时候一般设置为3,就是一个block有3个备份的意思,在configuration中加入如下内容:
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
11.先修改mapred-env.sh里面的JAVA_HOME,再重命名mapred-site.xml.template文件为mapred-site.xml
[root@node113 /usr/local/hadoop/hadoop-2.6.5/etc/hadoop]#cp mapred-site.xml.template mapred-site.xml
12.vi mapred-site.xml,在configuration标签中加入如下内容,用于配置让MapReduce运行在yarn上:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
13. 先修改yarn-env.sh里面的JAVA_HOME,再vi yarn-site.xml,yarn.resourcemanager.hostname用于配置yarn的rm所在的机器,这里的使用机器的hostname,即node113:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node113</value>
</property>
14.添加hadoop的环境变量,vi ~./bashrc:
HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.5
PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_HOME PATH
15.使配置生效:
[root@node113 /usr/local/hadoop/hadoop-2.6.5/etc/hadoop]#source ~/.bashrc
16.配置完成,接下来就是测试了。
在hadoop2.6.5的伪分布式环境搭建完成之后,再来进行测试是否搭建成功的工作。
1.先格式化hdfs的工作目录,这里的工作目录就是我们搭建环境时指定的/usr/local/hadoop/data目录,执行命令"hdfs namenode -format"即可,如下:
[root@node113 /usr/local/hadoop/hadoop-2.6.5/bin]#hdfs namenode -format
看到如下红框中的内容说明格式化工作目录成功:
2.cd /usr/local/hadoop/data目录下查看,可以看到hadoop已经帮助我自动创建了子目录:
[root@node113 /usr/local/hadoop/data]#ls
dfs
3.cd /usr/local/hadoop/hadoop-2.6.5/sbin,查看有哪些文件:
[root@node113 /usr/local/hadoop/hadoop-2.6.5/sbin]#ls
distribute-exclude.sh hdfs-config.cmd kms.sh slaves.sh start-balancer.sh
start-secure-dns.sh stop-all.cmd stop-dfs.cmd stop-yarn.cmd yarn-daemons.sh
hadoop-daemon.sh hdfs-config.sh mr-jobhistory-daemon.sh start-all.cmd start-dfs.cmd
start-yarn.cmd stop-all.sh stop-dfs.sh stop-yarn.sh
hadoop-daemons.sh httpfs.sh refresh-namenodes.sh start-all.sh start-dfs.sh
start-yarn.sh stop-balancer.sh stop-secure-dns.sh yarn-daemon.sh
[root@node113 /usr/local/hadoop/hadoop-2.6.5/sbin]#
4.启动hdfs,执行 ./start-dfs.sh:
可以看到启动了hdfs的namenode datanode secondarynamenode,但是每次启动之前都要输入密码,这是因为hadoop使用ssh localhost登录到localhost的时候需要密码,配置免密码登录请参见“linux配置免密码登录”这篇文章。
5.启动yarn,执行 ./start-yarn.sh,结果如下:
[root@node113 /usr/local/hadoop/hadoop-2.6.5/sbin]#./start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/hadoop-2.6.5/logs/yarn-root-resourcemanager-node113.out
root@localhost's password:
localhost: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.6.5/logs/yarn-root-nodemanager-node113.out
可以看到启动了yarn的resourcemanager(rm)和nodemanager(nm).
6.使用java的jps命令查看是否都启动成功:
[root@node113 /usr/local/hadoop/hadoop-2.6.5/sbin]#jps
25137 ResourceManager
24853 DataNode
25414 NodeManager
25516 Jps
24742 NameNode
24994 SecondaryNameNode
8.通过浏览器查看hdfs的管理界面是否可以访问:http://node113:50070(注意关闭防火墙,并在本地windows的hosts文件配置node113的映射“192.168.28.113 node113”):
ok,说明hdfs正常。
9.通过浏览器查看yarn的管理界面是否可以访问:http://node113:8088,如下:
说明yarn也是正常的。
10.现在我们做下面一个功能:把linux本地目录/root/xing.txt上传到hdfs的工作目录上去,怎么完成呢?如下,hadoop fs -put命令用于把本地文件上传到hdfs上,hdfs://node113:9000/表示hdfs工作目录的根路径,hdfs的根路径在我们搭建环境是指定的目录/usr/local/hadoop/data下面:
[root@node113 /usr/local/hadoop/hadoop-2.6.5/bin]#hadoop fs -put /root/xing.txt hdfs://node113:9000/xing.txt
xing.txt的内容如下:
11.在hdfs的管理界面上查看是否已经把本地文件xing.txt上传上去了:
12.再实现一个这样的功能,从hdfs上下载一个文件到linux本地,可以使用命令"hadoop fs -get hdfs://node113:9000/xing.txt /root/haha.txt"来完成,如下图:
13.hdfs是没有问题了,现在来测试一下MapReduce吧,怎么测试呢?hadoop安装完成之后,hadoop已经给我们提供了一个可以直接拿来运行的MapReduce程序,放在/usr/local/hadoop/hadoop-2.6.5/share/hadoop/mapreduce目录下,就是下面的hadoop-mapreduce-examples-2.6.5.jar,它完成的功能是统计文件中的字符个数:
[root@node113 /usr/local/hadoop/hadoop-2.6.5/share/hadoop/mapreduce]#ls
hadoop-mapreduce-client-app-2.6.5.jar hadoop-mapreduce-client-hs-2.6.5.jar
hadoop-mapreduce-client-jobclient-2.6.5-tests.jar lib
hadoop-mapreduce-client-common-2.6.5.jar hadoop-mapreduce-client-hs-plugins-2.6.5.jar
hadoop-mapreduce-client-shuffle-2.6.5.jar lib-examples
hadoop-mapreduce-client-core-2.6.5.jar hadoop-mapreduce-client-jobclient-2.6.5.jar
hadoop-mapreduce-examples-2.6.5.jar sources
14.运行命令“hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount hdfs://node113:9000/xing.txt hdfs://node113:9000/xing_statistics.out”,上面的命令表示运行hadoop-mapreduce-examples-2.6.5.jar这个java程序,主类是wordcount,输入(数据源)是hdfs上的xing.txt,程序运行完之后,把MapReduce统计的结果放到hdfs上的xing_statistics.out这个目录中(这个文件不需要你自己创建)去,运行截图:
15.我们到hdfs的管理界面“http://node113:50070”去查看是否有这个文件:
16.点击上边红框里面的“xing_statistics.out”超链接之后,可以看到两个文件:
其中_SUCCESS表示MapReduce执行成功,part-r-0000就是结果文件,下载下来查看其内容:
我们回头看xing.txt里面的内容,比较一下是不是这样的结果呢,当然是了,由此说明MapReduce也是没有问题的
17.在yarn的管理界面http://node113:8088也可以看到刚才执行MapReduce程序wordcount的信息:
18.hadoop的伪分布式的hdfs相关的东西和MapReduce相关的东西都测试完成