搭建Hadoop伪分布式环境
写在前面
前面对Hadoop进行了一个基础的学习,接下来开始学习如何安装Hadoop平台。这里使用VMware Workstation Pro、CentOS7.7、Hadoop使用CDH5.7版本。
本篇主要学习如何在VMware Workstation虚拟机上安装的CentOS系统上搭建Hadoop伪分布式环境。
注意关于VMware Workstation Pro和CentOS7.7的安装这里就跳过,假设现在已经成功在VMware Workstation Pro虚拟机上成功安装了CentOS7.7系统,那么接下来就正式进入Hadoop伪分布式环境搭建。
所谓伪分布式是指在一台机器上启动Hadoop需要的所有进程进行工作;而分布式是指在多台机器上都启动Hadoop,按照集群的规划在不同的机器上启动各自需要的Hadoop进程进行相互协调工作。
Hadoop伪分布式环境搭建
CentOS系统上软件下载存放地址为/home/soft
,软件安装地址为/envy
。
Java安装
请注意,推荐使用Oracle JDK,因此需要卸载CentOS默认安装的OpenJDK,操作步骤如下:
(1)使用rpm -qa|grep java
命令查看CentOS是否安装OpenJDK:
(2)使用rpm -e --nodeps
命令来删除不需要的jdk安装包,就是两个以java-1.8.0-openjdk
开头的包:
1 | rpm -e --nodeps java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64 |
其余三个可以不删除,之后再次使用(1)的命令来检验是否卸载成功。
(3)在/home/soft
目录下新建一个java目录,然后使用如下命令下载jdk,如下所示:
1 | wget https://d6.injdk.cn/oracle/8/jdk-8u251-linux-x64.tar.gz |
之后将其解压到/envy
目录下,使用如下命令:
1 | tar -zxvf jdk-8u251-linux-x64.tar.gz -C /envy |
接着使用vi /etc/profile
打开配置文件,往里面新增如下内容:
1 | #Java environment |
之后使用source /etc/profile
命令刷新配置文件,再使用java -version
命令验证jdk是否安装成功:
1 | [root@elk-1 java]# java -version |
Hadoop安装
本篇系列笔记使用的是CDH版本的hadoop-2.6.0-cdh5.7.0,相关内容的下载地址可以点击 这里 ,如下所示:
请注意这个版本信息hadoop-2.6.0-cdh5.7.0,hadoop-2.6.0是代表Hadoop版本为2.6.0,而cdh5.7.0代表的是CDH版本为5.7.0,如果开发者需要使用HBase,那么此时配套的版本信息应该为hbase-xx-cdh5.7.0,然后在之前那个地址进行查找,可以找到如下信息:
在/home/soft
目录下新建一个hadoop目录,然后使用如下命令下载hadoop,如下所示:
1 | wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz |
之后将其解压到/envy
目录下,使用如下命令:
1 | tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz -C /envy |
接着使用vi /etc/profile
打开配置文件,往里面新增如下内容:
1 | #Hadoop environment |
注意这里必须添加JAVA_LIBRARY_PATH,且目录为hadoop目录下的/lib/native
目录。之后使用source /etc/profile
命令刷新配置文件,再使用hadoop version
命令验证hadoop是否安装成功:
1 | [root@elk-1 envy]# hadoop version |
这样Hadoop就安装成功了。注意开发者除了可以将上述配置信息写在/etc/profile
文件中,还可以写在~/.bash_profile
文件中,但是这两种只能选择一种。
Hadoop伪分布式环境搭建
Hadoop启动后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的进程,因此首先需要在本机上实现SSH免密登录,可使用如下命令:
1 | ssh-keygen -t rsa |
成功执行上述两条命令后即可使用ssh localhost
命令来免密码登录到本机,注意其中的localhost可以为主机名或者IP地址。
第一步,使用useradd hadoop hadoop
命令来新建一个hadoop用户和组。
第二步,赋予hadoop用户可以编辑/envy
文件夹的权限,使用的命令如下:
1 | chown -R hadoop /envy/ |
之后查看一下/envy
文件夹的权限:
1 | [root@elk-1 envy]# ll |
第三步,切换到hadoop用户,并进入到hadoop配置目录:
1 | [root@elk-1 envy]# su hadoop |
这里就有我们需要配置的文件,接下来一步步的进行配置。
(1)修改hadoop-env.sh
、mapred-env.sh
和yarn-env.sh
三个配置中JAVA_HOME的配置,将其中的export JAVA_HOME=${JAVA_HOME}
修改为 JAVA_HOME=/envy/jdk1.8.0_251
,即之前配置的JAVA_HOME目录。
(2)修改Hadoop核心文件core-site.xml
,在里面新增如下内容,用于配置NameNode的主机名和端口号:
1 | <configuration> |
之后记得使用hadoop账户新建/envy/hadoop_tmp
目录,这一点非常重要。
(3)修改HDFS文件hdfs-site.xml
,在里面新增如下内容,用于设置HDFS元数据文件存放路径、文件副本数、其他用户操作会提示没有权限、页面访问端口等内容:
1 | <configuration> |
之后需要创建/envy/dfs/name
和/envy/dfs/data
目录,并赋予hadoop用户可执行权限,当然最简答的方式就是利用hadoop用户自己创建那两个文件。
请注意,各目录必须是非/tmp
下的目录,否则默认是在/tmp
目录下,如果是在虚拟机环境中操作,那么每次重启虚拟机都会删除/tmp
目录中的文件,但是该文件又会在Hadoop启动时自动创建,也就是说此时的数据是被清空了,这一点需要格外注意。
(4)修改MapReduce的mapred-site.xml
文件,由于不存在这个文件,因此开发者需要将mapred-site.xml.template
文件拷贝一份为mapred-site.xml
,使用的命令如下:
1 | [hadoop@elk-1 hadoop]$ cp mapred-site.xml.template mapred-site.xml |
之后在里面新增如下内容:
1 | <configuration> |
(5)修改YARN的yarn-site.xml
文件,在里面新增如下内容:
1 | <configuration> |
请注意这里的master就是前面配置的NameNode主机名。
(6)修改从节点配置文件slaves
,修改其中的内容为如下所示:
1 | master |
(7)在本机的/etc/hosts
中添加本机的IP映射,添加内容如下所示:
1 | 192.168.31.100 master |
请注意192.168.31.100
这个IP是我本机IP,这个需要自己进行修改。
第四步,格式化HDFS系统。开发者进入/envy/hadoop-2.6.0-cdh5.7.0/bin
目录下,执行如下命令来格式化HDFS系统:
1 | hadoop namenode -format |
如果出现下面所示的信息,则说明格式化成功了:
1 | 20/07/10 19:19:54 INFO common.Storage: Storage directory /envy/dfs/name has been successfully formatted. |
请注意,格式化HDFS操作只有第一次才使用,如果对于已有的集群再次执行格式化操作,那么已有集群上的数据会全部丢失。
第五步,启动Hadoop并验证安装成功,注意本步骤是一次性启动所有的Hadoop服务。
(1)给hadoop用户下赋予可执行/envy/hadoop-2.6.0-cdh5.7.0/sbin/
目录的权限:
1 | chmod +x -R /envy/hadoop-2.6.0-cdh5.7.0/sbin/ |
(2)启动Hadoop,并以hadoop用户身份进入到/envy/hadoop-2.6.0-cdh5.7.0/sbin/
目录,执行如下命令来一次性启动所有的Hadoop服务:
1 | ./start-all.sh |
之后使用jps命令来检测是否启动成功,启动成功会有如下五个进程(Jps进程不包括):
1 | [hadoop@master sbin]$ jps |
这样关于hadoop伪分布式的搭建就完成了,最后可以执行./stop-all.sh
命令来一次性停止所有的Hadoop服务。
请注意,如果在执行诸如./start-all.sh
命令的时候,每次还都提示输入密码时,那么就需要给新建的hadoop用户赋予权限了,依次执行如下命令:
1 | d ~/.ssh/ |
接着依次执行如下命令,注意hadoop是之前新添加的用户:
1 | chown hadoop: /home/hadoop/.ssh |
之后使用ssh master
命令来进行测试,可以发现已经可以免密码登录了。
当开发者不需要一次性启动所有的Hadoop服务时,如只需启动HDFS或者YARN可以参看如下内容。
启动HDFS
单独启动HDFS
HDFS常用的启动方式有两种,下面分别进行学习。
方式一:一次启动所有进程。开发者可以进入到$HADOOP_HOME
目录下的sbin目录中(即/envy/hadoop-2.6.0-cdh5.7.0/sbin
目录),然后执行./start-dfs.sh
命令来一次启动所有进程。启动成功后可以使用jps命令来检测是否启动成功,启动成功会有如下三个进程(Jps进程不包括):
1 | [hadoop@master sbin]$ jps |
前面是进程ID,后面是进程名称。
方式二:单独启动每个进程。这里以启动namenode为例进行说明,开发者可以使用如下命令:
1 | hadoop-daemon.sh start namenode |
之后可以使用jps命令来检测namenode是否启动成功,如果出现进程信息则表明启动成功。
那么就可以使用类似的方法来启动datanode、secondarynamenode了。
使用命令操作HDFS文件系统
关于如何使用命令来操作HDFS文件系统会在后续内容进行学习,这里简单提两个命令:
(a)创建HDFS目录。使用hadoop fs -mkdir /helloworld
命令来创建helloworld目录;
(b)查看目录是否创建成功。使用hadoop fs -ls/
查看目录是否创建成功。
访问HDFS浏览器页面
开发者可以通过访问http://master:50070
链接来查看HDFS浏览器页面,前提是本机(不是虚拟机)已经将192.168.31.100这一虚拟机IP地址映射到master,否则推荐使用http://192.168.31.100:50070
这一链接来进行访问:
启动YARN
这个其实和启动HDFS的步骤非常相似,可以参考学习。
单独启动YARN
YARN常用的启动方式有两种,下面分别进行学习。
方式一:一次启动所有进程。开发者可以进入到$HADOOP_HOME
目录下的sbin目录中(即/envy/hadoop-2.6.0-cdh5.7.0/sbin
目录),然后执行./start-yarn.sh
命令来一次启动所有进程。启动成功后可以使用jps命令来检测是否启动成功,启动成功会有如下两个进程(Jps进程不包括):
1 | [hadoop@master sbin]$ jps |
前面是进程ID,后面是进程名称。
方式二:单独启动每个进程。这里以启动nodemanager为例进行说明,开发者可以使用如下命令:
1 | yarn-daemon.sh start nodemanager |
之后可以使用jps命令来检测nodemanager是否启动成功,如果出现进程信息则表明启动成功。
那么就可以使用类似的方法来启动resourcemanager了。
#####运行wordcount测试案例
Hadoop安装包中自带了wordcount的应用程序,jar包所在位置为$HADOOP_HOME/share/hadoop/mapreduce\hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar
即(/envy/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce\hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar
)。在/envy
目录中新建一个hello.txt,其中的内容如下:
1 | hello world hello |
之后将这个hello.txt文件上传到HDFS文件系统上去,使用的命令如下:
1 | hadoop fs -put /envy/hello.txt / |
接着提交mapreduce作业到yarn上运行,使用的命令如下:
1 | hadoop jar $HADOOP_HOME/share/hadoop/mapreduce\hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /hello.txt /wc_out/ |
或者进入到$HADOOP_HOME/share/hadoop/mapreduce\
目录下执行以下命令:
1 | hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /hello.txt /wc_out/ |
之后使用如下命令来查看wordcount的统计结果:
1 | hadoop fs -text /wc_out/part* |
执行结果如下所示:
访问YARN浏览器页面
开发者可以通过访问http://master:8088
链接来查看YARN浏览器页面,前提是本机(不是虚拟机)已经将192.168.31.100这一虚拟机IP地址映射到master,否则推荐使用http://192.168.31.100:8088
这一链接来进行访问:
OK,那么本篇关于如何搭建Hadoop伪分布式的学习就到此为止,后续学习其他内容。