hadoop伪分布式环境搭建

近期学习大数据技术,将通过博客分享它们原理与使用。

本文搭建hadoop3.x伪分布式集群,即在1台服务器上完成hdfs与yarn的搭建,完全根据官方手册进行:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

安装jdk1.8

进入Oracle官网JDK1.8主页:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html,下载Linux x64 Compressed Archive压缩包。

将解压后的目录mv到/usr/local/jdk即可(也可以放到其他路径):

在合适位置将上述bin目录加入PATH环境变量:

重新登录shell,确认java可用:

下载hadoop

选择任意下载源:http://www.apache.org/dyn/closer.cgi/hadoop/common/,下载hadoop-3.3.0.tar.gz即可。

准备目录/root/bigdata,解压hadoop-3.3.0.tar.gz到该目录下:

/root/bigdata/hadoop-3.3.0

编辑/root/bigdata/hadoop-3.3.0/etc/hadoop/hadoop-env.sh,增加JAVA_HOME环境变量:

export JAVA_HOME=/usr/local/jdk

各种hadoop的命令都会先加载该env脚本来初始化一些必要的环境变量。

现在把hadoop的bin也加入到PATH中,再次编辑/etc/profile.d/java.sh,增加如下PATH:

重新登录shell,现在可以直接访问hadoop、hdfs等命令了:

配置hdfs

编辑etc/hadoop/core-site.xml:

关键配置就2项:

  • fs.defaultFS:namenode监听地址,写网卡IP。
  • hadoop.tmp.dir:数据存储根目录(同时影响namenode与datanode)

编辑etc/hadoop/hdfs-site.xml :

配置副本数量为1,也就是总共存储1份数据即可,没有备份。

配置hadoop启动用户

我选择使用root用户启动,但是hadoop不建议这样做,大家可以选择使用其他linux用户作为hadoop启动用户。

据我了解,哪个用户启动hadoop,那么哪个用户就是hadoop的管理员身份。

我们编辑etc/hadoop/hadoop-env.sh,增加几个环境变量即可:

令namenode、secondarynamenode、datanode均用root用户启动。

配置ssh信任

hadoop提供分布式部署脚本,需要通过ssh信任连接到其他机器启动hadoop组件。

现在是伪分布式模式,因此需要配置的就是自己信任自己,所以做如下操作即可:

格式化hdfs

新集群需要为namenode初始化元数据,执行如下命令即可:

启动hdfs

检查进程是否全部启动成功:

应该包含namenode、secondaryNamenode,datanode三个进程,如果不全可以查看/root/bigdata/hadoop-3.3.0/logs目录查看错误原因,同时也注意到核心数据已经写入到了/root/bigdata/hadoop-3.3.0/tmp目录。

执行命令确认hdfs工作正常:

hdfs默认基于登录的linux用户进行文件权限判定,除非我们配置独立的认证机制,这和linux文件系统基本一致。

同时hdfs web管理界面可以访问:http://192.168.2.119:9870/。

配置Yarn

hadoop yarn是一套资源与容器调度框架,mapreduce只是yarn上的一套应用,诸如spark、flink等则是可以运行到yarn上的其他应用。

我们现在要简单配置yarn,让mapreduce可以通过yarn得到调度执行。

编辑etc/hadoop/mapred-site.xml:

该文件配置mapreduce将基于yarn框架调度,并配置mapreduce程序依赖的jar包路径。

编辑etc/hadoop/yarn-site.xml:

前2个配置项是官方指定的必要选项,不仔细研究了。

第3个配置开启了yarn的nodemanager日志采集到HDFS存储:

以mapreducer应用为例,提交给yarn的任务会先拉起一个mapreduce的master容器,再由 master二次向resourceManager索要更多worker容器资源来启动mapper/reducer程序。当mapper/reducer运行退出后,本地日志也随着容器销毁了。

而yarn日志采集可以把这些容器日志收集到hdfs上存储,所以历史日志可以追溯。

启动yarn

执行命令:

将拉起resourceManager和nodeManager和,前者是yarn的master节点负责资源调度,后者是每个服务器上的worker节点负责具体程序(容器)执行。

现在可以命令行查看yarn集群中的application列表:

也可以查看yarn的web控制台:http://192.168.2.119:8088/cluster。

启动MR的historyserver

mapreduce框架只是yarn上的一种应用,其会启动MR的master程序,master又会拉起mapper和reducer容器。

而yarn日志聚合只是把容器的日志保存到了HDFS上,它并不知道容器里跑的是mapper还是reducer,以及到底是哪个mapper和哪个reducer。

为了最终在web界面上可以查看具体某个mapper/reducer容器的日志,当然得通过部署一个针对MR框架的historyserver程序,它负责关联HDFS上的容器日志到mapper和reducer,最终在web界面上提供简单易用的日志查询交互。

启动它:

现在如果你执行MR任务,那么可以通过yarn界面上对应application的history按钮,跳入到该应用对应的historyserver界面,进行具体日志查看。该mr jobhistory server只服务于MR应用,后续spark也会运行自己的historyserver,届时spark application的history就会跳入spark的historyserver了。

可以查看到mapreduce任务的app master日志,以及每个mapper和reducer的容器日志,就不具体展示了。

至此,hadoop伪分布式搭建完成,我们已经具备了一个可用的hdfs和yarn平台,后续可以玩一下mapreduce、spark、flink、flume等大数据组件。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~