hadoop平台搭建(四)-伪分布式的配置及运行
摘要:本文主要讲述Linux环境下搭建hadoop平台过程中,基于hadoop单机模式运行正确的基础上,配置hadoop的伪分布式模式,并在配置完毕的基础上运行hadoop的伪分布式实例。
环境说明:文章延续hadoop平台搭建(3)中的步骤,因为只涉及hadoop自身配置文件的修改,所以操作步骤适用于所有版本的Linux系统。
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode。(注意,伪分布式读取的是 分布式文件系统hdfs 中的文件。)
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。(注意,在比较老的版本比如hadoop1.x中,没有core-site.xml文件,需要做相应调整)
1修改配置文件core-site.xml、hdfs-site.xml
打开core-site.xml文件
命令:
sudo gedit ./etx/hadoop/core-site.xml
将文件内容修改为如下:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/develop/hadoop/myhadooptemp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
其中,hadoop.tmp.dir属性表示hadoop的临时目录,可以自定义;若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。fs.defaultFS表示提供HDFS服务的主机名和端口号
打开hdfs-site.xml文件
命令:sudo gedit ./etc/hadoop/hdfs-site.xml
将文件内容修改为如下
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/develop/hadoop/myhadooptemp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/develop/hadoop/myhadooptemp/dfs/data</value>
</property>
</configuration>
其中,dfs.replication表示HDFS中同一份文件的数目,表示有value-1份冗余。dfs.namenode.name.dir配置namenode的元数据存放的本地文件系统路径,dfs.datanode.data.dir设置datanode存放数据的本地文件系统路径。
注意:Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
2执行NameNode的格式化命令
命令:
./bin/hdfs namenode -format
注意,因为已经配置好hadoop的环境变量,所以可以不进入bin目录直接调用bin目录下的工具
格式化成功后,会有如下输入结果
此外,格式化成功后,会根据配置文件,生成相应的目录
3运行伪分布式实例
开启NameNode 和 DataNode 守护进程
命令:
./sbin/start-dfs.sh
注意:start-dfs.sh是个完整的可执行脚本,中间没有空格。
启动完成后,用jdk的jps命令查看进程启动是否成功,若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”
(1)如果 SecondaryNameNode 没有启动,执行如下操作
命令:sbin/stop-dfs.sh
#关闭进程
命令:sbin/start-dfs.sh
#尝试再次启动(2)若是 DataNode 没有启动,可尝试执行如下操作
命令:./sbin/stop-dfs.sh
# 关闭进程
命令:rm -r ./tmp
# 删除 tmp 文件,注意这会删除 HDFS 中原有的所有数据
命令:./bin/hdfs namenode -format
# 重新格式化 NameNode
命令:./sbin/start-dfs.sh
# 重启
成功启动后,可以访问 Web 界面localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件
单机模式中,读取的是本地的数据;伪分布式模式中,读取的是HDFS上的数据。要使用HDFS数据,首先在HDFS上创建用户目录
命令:
hdfs dfs -mkdir -p ./HDFS
#创建hdfs格式的输入输出根目录HDFS
命令:hdfs dfs -mkdir -p ./HDFS/input
#在HDFS目录下创建hdfs文件类型的输入目录
注意,使用hdfs dfs -mkdir <新目录名> 命令时,默认创建HDFS类型的/user/<用户名> 目录,并将此目录作为当前的HDFS型默认父目录,即便当前路径是hadoop安装根目录或其它,一律创建目录/user/<用户名>/<新目录名>。若想在hadoop安装根目录下创建HDFS文,则创建或调用时必须给出完整路径名,如:
hdfs dfs -mkdir -p /home/hadoop/develop/hadoop/HDFS
hdfs dfs -ls -R /home/hadoop/develop/hadoop
注意,如果此时出现错误Cannot create directory /user/hadoop/HDFS. Name node is in safe mode则表示NameNode节点处于安全模式,需要关闭安全模式,执行如下命令
命令:
hadoop dfsadmin -safemode leave
解读:关闭安全模式
在此,我们选择系统为HDFS文件提供的默认根路径,在根路径下创建输入目录input。在根目录下,统一删除HDFS型目录,重新创建HDFS型目录。
向输入目录里添加待处理文件
注意:再次强调,HDFS类型的默认根目录是user/<用户名>,也是HDFS的默认当前目录。
运行伪分布式实例
命令:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep ./HDFS/input ./HDFS/output 'du[a-z.+]'
执行无误后会有如下输出
查看输出路径以及输出文件
注意,由于伪分布式模式更改了配置文件,所以与单机模式运行结果不同
也可以将结果去回到本地,执行命令 hdfs dfs -get <源路径> <目标路径>
无论是单机模式还是伪分布式模式,运行之前输出路径不能存在,所以运行结束后先删除输出路径,避免出错
如果需要关闭hadoop则运行如下命令
./sbin/stop-dfs.sh
下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh
就可以
再次强调:Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项