Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
Hadoop的伪分布式配置需要设置环境变量,不设置的会报错,伪分布式的配置我们仍然使用主机Master即可,Master既是NameNode,同时也是DataNode。
NameNode:主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等。故这是一个核心节点。
DataNode:数据节点,每台从服务器节点都运行一个,负责把HDFS数据块读、写到本地文件系统。
Hadoop 伪分布式配置
Hadoop的配置文件位于/home/hadoop/installpkgs/hadoop-2.7.3/etc/hadoop (红色部分为Hadoop的安装目录)中,Hadoop 中的配置文件是xml格式,每个配置以声明 property 的 name 和 value 的方式来实现。
Hadoop 伪分布式配置需要修改两个配置文件:core-site.xml 和 hdfs-site.xml
core-site.xml:此文件是Hadoop的核心配置文件
hdfs-site.xml :用于配置NameNode的URI及NameNode和DataNode的存放位置
使用xftp工具,将 core-site.xml 和 hdfs-site.xml 这两个文件从服务上下载到本地,在本地修改完成后直接上传到服务器覆盖即可。
1.修改 core-site.xml 文件
在configuration节点中添加如下内容
<configuration>
<!-- Hadoop 文件系统的临时目录(NameNode和DataNode默认存放在hadoop.tmp.dir目录)-->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/installpkgs/hadoop-2.7.3/tmp</value>
</property>
<!-- 配置NameNode的URI -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
</configuration>
2.修改 hdfs-site.xml 文件
在configuration节点中添加如下内容
<!-- Master可替换为IP -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-master:50090</value>
</property>
<!-- 设置系统里面的文件块的数据备份个数,默认是3 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- NameNode结点存储hadoop文件系统信息的本地系统路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/installpkgs/hadoop-2.7.3/tmp/dfs/name</value>
</property>
<!-- DataNode结点被指定要存储数据的本地文件系统路径,这个值只对NameNode有效,DataNode并不需要使用到它 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/installpkgs/hadoop-2.7.3/tmp/dfs/data</value>
</property>
3.注意:yarn-site.xml配置文件不用修改,默认为localhost,表示服务器即为NameNode,也是DataNode,也就是我们现在做的Hadoop 伪分布式。
4.配置完成后,第一次启动需要使用如下命令格式化 NameNode
hdfs namenode -format
成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错,下图展示为成功:
启动hadoop
start-dfs.sh #开启 NameNode 和 DataNode 守护进程
mr-jobhistory-daemon.sh start historyserver
jobhistoryserver历史服务器,管理者可以通过历史服务器查看已经运行完成的Mapreduce作业记录,比如用了多少个Map、多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。
启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode”和SecondaryNameNode(如果 SecondaryNameNode 没有启动,请运行 stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
如果通过真机win访问hadoop web管理界面需要先配置真机的hosts文件它存在于C:\Windows\System32\drivers\etc 目录中
在文件内容尾部中添加
192.168.196.162 hadoop-master
之后访问 http://hadoop-master:50070 查看节点状态:
创建用户目录
之前的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录
hdfs dfs -mkdir -p /user/hadoop/input
下图为成功:
复制文件
接着将 /etc/hadoop中所有的 xml 文件作为输入文件复制到分布式文件系统中,即将 /home/hadoop/installpkgs/hadoop-2.7.3/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。
hdfs dfs -put /home/hadoop/installpkgs/hadoop-2.7.3/etc/hadoop/*.xml /user/hadoop/input
复制完成后,可以使用如下命令来查看HDFS的文件列表
hdfs dfs -ls input
运行伪分布式实例
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
rm -r /home/hadoop/installpkgs/hadoop-2.7.3/input
rm -r /home/hadoop/installpkgs/hadoop-2.7.3/output
删除之后,运行下列实例:
hadoop jar /home/hadoop/installpkgs/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
出现Successfully表示成功
查看运行结果(查看的是位于 HDFS 中的输出结果)
hdfs dfs -cat output/*
与单机配置方式的运行结果不同,是因为我们使用的是伪分布式,而伪分布式的读取的是HDFS中的文件。单机配置方式会在本地生成一个ouput文件夹。
我们也可以将运行结果取回到本地
hdfs dfs -get output /home/hadoop/installpkgs/hadoop-2.7.3/output # HDFS中的output文件夹取回到本地
单机伪分布式到这里就完成了,关闭HDFS
Stop-dfs.sh