hadoop的单机模式和伪分布式模式可以说是学习hadoop的入门搭建环境,主要通过简单环境的搭建,对hadoop的MapReduce和HDFS有一个基础的认识。为分布式集群的搭建和学习起到引领的作用。
对于搭建所需的平台和软件如下:Ubuntu16.04、Hadoop2.7.2、java、sshd。以上软件都是到目前为止最新的版本。以下由于只是单机学习的目的,不考虑系统使用上的安全性,因此直接使用root用户进行操作,不再新建用户。
一、安装
2、java安装:Ubuntu16.04默认安装后并不安装java,由于hadoop是java语言写的,需要使用java的运行环境,因此必须要先安装java。在终端中使用"sudo su -"命令切换到root用户,再使用"apt-get install openjdk-9-jre-headless"安装最新的java包。
3、sshd安装:同样,Ubuntu16.04默认安装后并不安装sshd。使用命令"apt-get install openssh-server"安装。安装后使用"ps aux | grep sshd"命令查看sshd是否启动,如果有如下信息"root 7093 0.0 0.2 65612 6116 ? Ss 22:22 0:00/usr/sbin/sshd -D",表明sshd已启动,如果没有启动,则使用命令"/etc/init.d/ssh start"启动sshd进程。
二、配置
在安装完hadoop后使用命令"./bin/hadoop",会有如下提示,需要我们先配置JAVA_HOME。使用vim的话,请用"apt-get install vim"命令安装。
至此,前期准备已基本完成,下面我们先进行单机模式的测试,再进行伪分布式模式的配置测试。
1、单机模式
默认情况下,hadoop配置为运行在非分布式模式下的,作为一个单独的java进程。这对于调试是非常有用的。操作如下:
$ mkdir input
$ cd input
$ echo "hello world" > test1.txt
$ echo "hello hadoop" > test2.txt
$ cd ..
$ ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount input output
执行如上命令后如下所示:
可以看到hadoop已经执行,执行结束后通过命令"cat output/*"查看结果如下:
可以看到执行结果是正确的。即有一个单词hadoop、一个单词world、两个单词hello。至此单机模式验证完毕。
2、伪分布式模式
hadoop可以在单节点上运行伪分布式模式,首先进行hadoop的配置文件的设置。
配置文件"etc/hadoop/core-site.xml":
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
配置文件"etc/hadoop/hdfs-site.xml":
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
接下来配置ssh:首先编辑"vim /etc/ssh/sshd_config",取消"AuthorizedKeysFile %h/.ssh/authorized_keys"选项的注释,如下图所示:
接下来设置自动登陆,操作如下:
$ ssh-keygen
之后一路回车使用系统提供的默认值即可。
$ cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
接下来通过"ssh localhost"命令验证登陆,第一次需要输入“yes”,之后就可以直接免密码登陆。如下图所示:
当输入"exit"时可退出登陆,如上图所示,显示"Connectino to localhost closed."
接下来在本地启动MapReduce任务。首先格式化文件系统
$ ./bin/hdfs namenode -format
看到如下标红的部分就表示格式化文件系统成功。
启动NameNode守护进程和DataNode守护进程。
$ ./sbin/start-dfs.sh
接下来使用jps命令来查看节点守护进程启动情况,当敲入jps后发现需要安装openjdk-8-jdk-headless和openjdk-9-jdk,因此我们使用apt-get安装这两个安装包。安装后:
$ jps
我们可以使用浏览器查看 NameNode节点,在浏览器中输入:http://localhost:50070/
$ ./bin/hdfs dfs -mkdir /user
$ ./bin/hdfs dfs -mkdir /user/root
然后我们将之前input文件夹拷贝到hdfs文件系统中:
$ ./bin/hdfs dfs -put input /user/root
我们可以使用如下命令查看,是否将input文件夹拷贝到了hdfs文件系统中:
./bin/hdfs dfs -ls /user/root/input/*
以上操作如下图所示:
接下来让我们将当前文件系统中的input和output文件夹删除:
$ rm -rf input output
再运行hadoop命令:
$ ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount input output
同样检查输出文件,将hdfs文件系统中的输出复制到本地文件系统,命令如下:
$ ./bin/hdfs dfs -get /user/root/output ouput
$ cat output/*
或者直接查看hdfs文件系统中的输出结果,而不用先复制到本地文件系统中,命令如下:
$ ./bin/hdfs dfs -cat output/*
可看到运行结果与之前单机模式时相同。当你做完测试,记得关闭服务,使用如下命令:
$ ./sbin/stop-dfs.sh
3总结
以上都是最简单的单机模式和伪分布式模式的配置,希望对大家有那么一点的帮助。
参考:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html