完全分布式环境搭建实操
1.前提条件
默认你已经安装好了一台 伪分布式环境,我的是bigdata121
默认你已经看了前面的第5篇文章,完全分布式的规划和步骤,现在只讲实际操作
2.修改伪分布式环境的几个hadoop的配置文件
需要配置的文件
bigdata121的配置文件
core-site.xml(不需要改)
<configuration> <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://bigdata121:9000</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/mod/hadoop-2.8.4/data</value> </property> </configuration>
这个文件不需要修改!!
hdfs-site.xml(需要改)
<configuration> <!--数据冗余数--> <property> <name>dfs.replication</name> <value>1</value> </property> <!--secondary的地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>bigdata121:50090</value> </property> <!--关闭权限--> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
hadoop-env.sh(不需要改)
原来配置的jdk看下,不需要改
yarn-site.xml(需要改)
这里我们想让resouremanager和namendode不在一个机器上,我们把resouremanager放在bigdata122上,故改下,如果你想放在一个机器上,那就不用改了。
<configuration> <!-- reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>bigdata122</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> </configuration>
mapred-site.xml (可以修改)
如果想要yarn的主节点放在bigdata122,那就改下
<configuration> <!-- 指定mr运行在yarn上--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!--历史服务器的地址--> <property> <name>mapreduce.jobhistory.address</name> <value>bigdata121:10020</value> </property> <!--历史服务器页面的地址--> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>bigdata121:19888</value> </property> </configuration>
yarn-env.sh、mapred-env.sh(不需要改)
yarn-env.sh
mapred-env.sh
slaves(需要修改)
bigdata121 bigdata122 bigdata123
自此,bigdtata121上的hadoop配置文件完成了。
现在我们用scp 吧这些配置发送到bigdata122和bigdata123上。
3.克隆bigdata121的hadoop配置文件
查看bigdata122的环境变量
cat /etc/profile
没有问题。
保证/opt/mod下没有hadoop配置文件,我们一会吧bigdata121的scp过来
有hadoop-2.8.4了,我之前拿来测试伪分布式来,干掉,删除。
[root@bigdata122 mod]# rm -rf hadoop-2.8.4/
ok!
同样查看bigdata123的环境变量,吧java环境变量和hadoop的给加上和工作目录/opt/mod完毕。
scp文件传输(重点)
实现两台远程机器之间的文件传输(bigdata112主机文件拷贝到bigdata113主机上)
公式
scp -r [文件] 用户@主机名:绝对路径
注:伪分布式是一台、完全分布是三台
先切换到bigdata121的 /opt/mod下
依次执行2条命令:
1.scp到bigdata122
[root@bigdata121 mod]# scp -r hadoop-2.8.4/ root@bigdata122:/opt/mod
2.scp到bigdata123
[root@bigdata121 mod]# scp -r hadoop-2.8.4/ root@bigdata123:/opt/mod
3.查看
用hadoop version查看是否克隆成功。
如上图,说明ok。
4.格式化Namenode
在bigdata121上执行下面的命令
hdfs namenode -format
为什么要格式化?
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会让两个目录的文件生成在一个目录里
5.统一3台服务器的时间
三台服务器同时执行下面的命令
date -s 20190608
ok,时间设置完成。
6.启动dfs
在bigdata121上执行(因为我们配置的namenode在bigdata121上)
start-dfs.sh
出现上面3个日志,则说明dfs已经启动了。
7.启动yarn
在bigdata122上执行下面的命令(因为我们配置的yarn的主节点ResourceManager在bigdata122上)
start-yarn.sh
和我们规划的一样,说明成功了!!
页面效果图
8.测试
wordcount案例(就是一个mapreduce程序,统计文件的单词次数)的demo的位置:
在/opt/mod/hadoop-2.8.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.4.jar
写个测试文件:
cd 到/opt/mod下
上传到test文件到dfs的根目录上去
[root@bigdata121 mod]# hadoop fs -put /opt/mod/test /
效果可以查看到:
执行wordcount程序
把test执行下mr的wordcount程序,然后把结果放在dfs根目录的dfs下。
切换到/opt/mod/hadoop-2.8.4/share/hadoop/mapreduce下
[root@bigdata121 mapreduce]# hadoop jar hadoop-mapreduce-examples-2.8.4.jar wordcount /test /out
看下结果
点击箭头下载下来,用文件打开
或者用命令的方式:
自此,hadoop完全分布式的环境搭建完成,大功告成!!