伪分布模式
所谓伪分布模式的含义是:把所有的角色全部运行在一个节点上,就叫做伪分布式。
贴上官方文档:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html
步骤
(1)配置集群
(a) 配置:hadoop-env.sh
Linux系统中获取JDK的安装路径
echo $JAVA_HOME
修改JAVA_HOME路径:
export JAVA_HOME=/opt/module/jdk1.7.0_80
(b)配置core-site.xml
<!-- 指定HDFS中NameNode地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.247.135:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.6.5/data/tmp</value>
</property>
解释:
FS:file system
第一个是改变文件系统,改成了hdfs://localhost:9000 文件系统;要不然的话就是原来的本地文件系统;运行的datanode需要存数据,就存在/data/tmp文件夹里面。
©配置:hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
解释:
指定hdfs副本数量是1;原来的信息默认是三种,为什么?
因为现在只有一个节点,所以设置为1,这就是伪分布式。
(2)启动集群
(a)格式化NameNode(第一次启动时需要格式化,以后就不用格式化)
bin/hdfs namenode -format
表示格式化成功了
(b)启动NameNode
hadoop-daemon.sh start namenode
启动成功
(c) 启动DataNode
hadoop-daemon.sh start datanode
由于是单点式,所以SecondNode就不存在了,但是起码需要启动NN和DN最后访问网页:hdfs的端口一般是50070
这里有踩了一个坑,前面由于电脑的防火墙没有关闭,所以不能访问,关闭防火墙:
systemctl stop firewalld
注意:
格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据;所以,格式NameNode时,一定需要先删除data数据和log日子,然后再格式化NameNode。
可以通过下面的文件去查看data和name的ID:
cat data/tmp/dfs/name/current/
cat data/tmp/dfs/data/current
遇到有问题可以找日志文件:
cd logs
查看某一条日志:
cat hadoop-root-datanode-localhost.localdomain.log
配置yarn伪分布式
(1)配置yarn-env.sh
配置一下JVA_HOME
export JAVA_HOME=/opt/module/jdk1.7.0_80
进入yarn-env.sh
修改前:
修改后:
(2)配置yarn-site.xml
配置代码:
<!-- Reduce获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.247.135</value>
</property>
(4)配置:mapred-env.sh
配置一下:JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.7.0_80
(5)配置:(对mapred-site.xml.template重新命名为)mapred-site.xml
命令:
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
配置文件:
<!-- 指定MR运行在YARN上面 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
前面我们将默认的文件系统改成了hdfs
现在我们则是将它默认的资源调度器改成了yarn
(2)启动集群
(a)启动前必须保证NameNode 和 DataNode 已经启动
(b)启动ResourceManager:启动代码如下:
yarn-daemon.sh start resourcemanager
(c)启动NodeManager,启动代码如下:
yarn-daemon.sh start nodemanager
(3)集群操作
访问网页:
resourcemanager的端口一般是:8088
测试实战,跑一个在hdfs上的yarn的测试程序
(1)本地的文件就不能用了,所以需要将文件上传到HDFS上,这里依然用wcinput,即单词测试的那个样例
操作hdfs的前缀:hadoop fs
上传到hdfs,命令如下:
这里的-put就是之上传文件的意思
hadoop fs -put wcinput /
通过网页访问,查看刚刚上传的文件夹:
(2)执行jar包
运行的命令:
这里注意:此时的输入文件应是:/wcinput ,含义是去hdfs的更目录下去找到wcinput文件,所以前面会有一个‘/’
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /wcinput /wcoutput
执行命令效果图:
去网页上寻找刚才产生的输出文件:
(3)最后查看刚才的输出文件
执行的命令如下:
通过命令查看:
hadoop fs -cat /wcoutput/*
直接在网上下载下来看:
That’s all.