一、单台主机的伪分布式配置
伪分布式的配置规划:
bigdata111 | |
HDFS | NameNode SecondaryNameNode DataNode |
YARN | ResourceManager NodeManager |
首先我们不配置 SSH 免密登陆,直接去配置一台伪分布式主机,然后再使用过程中看看免密登陆的好处。
1、配置前的检查
在配置之前需要先检查你的虚拟机已经准备好了;检查防火墙已关闭,IP 已经配置,IP 与主机的映射已做好,JDK 和 HADOOP 已经装好且环境变量也配置好。我前一篇博客中已全部做好,这里就不需要再弄了,直接开始配置。
2、开始配置
首先在 hadoop 的安装目录下创建两个文件夹,一个是logs用于存放hadoop运行时的日志,另一个是data用于存放hadoop运行中产生的文件。
然后进入到 HADOOP 的配置文件目录下:可以看到里面有很多配置文件,其中有四个文件需要配置,下面我们一一打开进行配置。
2.1、配置core-site.xml文件
使用命令 vi core-site.xml 打开该文件,注意输路径的时候用 tab 键配合,一来可以验证路径的正确性,二来自动补全方便输入。在该配置文件的最后插入如下内容:
<!-- 指定HDFS中NameNode的地址,低版本端口号为8020 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://主机名1:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.X.X/data/tmp</value>
</property>
并修改主机名和临时文件的存储目录,注意做过映射这里写主机名才会有效;另外,文件存放的目录就是之前新建的data目录;我修改过后如下,之后保存退出。
2.2、配置hdfs-site.xml文件
使用命令 vi hdfs-site.xml 打开此文件,在文件的最后插入下面的内容:
<!--数据冗余数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--secondary的地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>主机名1:50090</value>
</property>
<!--关闭权限-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
插入过后修改部分数据,之后保存退出。我的设置如下:
2.3、配置yarn-site.xml文件
使用命令 vi yarn-site.xml 打开该文件,在文件最后插入如下内容:
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>主机名1</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天(秒) -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
修改之后保存退出,我的设置如下:
2.4、配置mapred-site.xml文件
使用命令 vi mapred-site.xml.template ,这里注意,使用 tab 自动补全他出现的是这个临时文件,为了保持一致我们可以将它改个名,mv mapred-site.xml.template mapred-site.xml,然后就可以使用 vi mapred-site.xml 打开该文件了,打开之后将下面的内容粘贴到文件最后:
<!-- 指定mr运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--历史服务器的地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>主机名1:10020</value>
</property>
<!--历史服务器页面的地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>主机名1:19888</value>
</property>
修改主机名后保存退出;我的设置如下:
2.5、将JDK 的环境变量配置到多个文件中
首先打开环境变量设置文件拿到自己设置的 JAVA_HOME 的环境变量:export JAVA_HOME=/opt/module/jdk1.8.0_144
然后依次打开 hadoop-env.sh、yarn-env.sh、mapred-env.sh 文件,将 JDK 的环境变量放到文件最后。
另外注意到,我还改了一个 slaves 文件,将文件里面的 localhost 改为 bigdata111;这里只有一台机器的时候改不改无所谓,但是后面如果配三台就必须要改了。
2.6、格式化 NameNode
为什么要格式化?
NameNode主要被用来管理整个分布式文件系统的命名空间(实际上就是目录和文件)的元数据信息,同时为了保证数据的可靠性,还加入了操作日志,所以,NameNode会持久化这些数据(保存到本地的文件系统中)。对于第一次使用HDFS,在启动NameNode时,需要先执行-format命令,然后才能正常启动NameNode节点的服务。
格式化做了哪些事情?
在NameNode节点上,有两个最重要的路径,分别被用来存储元数据信息和操作日志,而这两个路径来自于配置文件,它们对应的属性分别是dfs.name.dir和dfs.name.edits.dir,同时,它们默认的路径均是/tmp/hadoop/dfs/name。格式化时,NameNode会清空两个目录下的所有文件,之后,会在目录dfs.name.dir下创建文件hadoop.tmp.dir 这个配置,会让dfs.name.dir和dfs.name.edits.dir会让两个目录的文件生成在一个目录里。
使用命令 hdfs namenode -format 格式化NameNode。成功执行格式化后会在输出的信息中找到下面这句话:
至此,单机的伪分布式配置完成,下面开始启动伪集群。
3、启动/关闭伪分布式
使用命令 start-all.sh 启动集群,注意,由于没有配置 SSH 免密登陆,因此在启动过程中需要多次输入密码,各个节点在启动、关闭的时候都需要输入密码,非常的麻烦,所以后面我们需要做 SSH 免密登陆。
输入命令 jps 可以看到 HDFS 的三个节点和 yarn 的两个节点都已经启动了。
在集群启动的情况下,随意打开windowws的一个浏览器,输入 主机名/ip + 端口 访问hadoop的文件系统,我这就是访问 192.168.1.111:50070,能访问到说明没问题。
稍微提一下这个页面UI的问题,上面使用 192.168.1.111:50070 打开的是 HDFS 的页面WEBUI,使用 192.168.1.111:8088 打开的是 Yarn 的WEBUI,使用 192.168.1.111:19888 打开历史服务器的 WEBUI;192.168.1.111:9000 是 RPC 的通信端口,浏览器上是打不开的。
关闭伪分布式:使用命令 stop-all.sh 关闭,这时候又要输入很多遍的密码,非常麻烦;全部关闭之后用 jps 查看一下进程,确实没有说明关闭成功了。
4、配置免密登陆
是时候配置免密登陆了;使用命令 ssh-keygen -t rsa 生成公钥和私钥,注意过程中他让你输入东西,不要输入,直接全部回车即可。
使用命令 ssh-copy-id bigdata111 将公钥拷贝到主机上:
根据提示使用命令 ssh bigdata111 来检查免密登陆是否成功,如果还需要输入密码则表示没有配置成功,如下图所示的可以免密切换则表示 SSH 配置成功。
接下来再次启动/关闭集群的时候就不需要输入密码了,很便捷。
至此,单机的伪分布式就配置完成了,下一节就配置完全分布式。