Hadoop伪分布模式安装
启动Hadoop支持三种模式操作,分别是单机模式操作、伪分布模式操作和全分布模式操作。
单机模式操作是Hadoop的默认操作模式,当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,会保守地选择最小配置,即单机模式。该模式主要用于开发调试MapReduce程序的应用逻辑,而不会和守护进程交互,避免增加额外的复杂性。
伪分布模式操作是指在“单节点集群”上运行Hadoop,其中所有的守护进程都运行在同一台机器上。该模式在单机模式操作之上多了代码调试功能,可以查阅内存的使用情况、HDFS的输入输出以及守护进程之间的交互。
全分布模式操作是指一种实际意义上的Hadoop集群,其规模可从几个节点的小集群到成百上千个节点的大集群,甚至是成千上万的超大集群。
单机模式操作和伪分布模式操作均用于开发与调试的目的。真实的Hadoop 集群是全分布模式操作。
伪分布模式操作Hadoop集群,具体步骤如下。
此安装将在已经安装了单机hadoop的环境基础上进行,即接下来直接部署hadoop、配置hadoop相关文件。
建议开始之前,先对hadoop单机环境做一验证,以hadoop用户登录,执行如下命令,能正常显示结果即可。
$cd /apps/hadoop/bin
$./hadoop version
开始安装:
1 准备好两个目录:/apps与/data
(1)创建这两个目录
因为安装单机模式的时候已经建立了/apps目录,这里只需创建目录/data,命令为:
$sudo mkdir /data
(2)更改这两个目录所属的用户、用户组,均为hadoop
$sudo chown -R hadoop:hadoop /apps
$sudo chown -R hadoop:hadoop /data
如下操作可以验证,两个目录的所属用户和用户组均已经改好。
2修改环境变量文件,添入hadoop的路径
这里仍然选择hadoop用户的~/.bashrc文件,打开在其尾部添加如下几行:
export HADOOP_HOME=/apps/hadoop
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
让变量生效:
$source ~/.bashrc
如下图所示的操作可以验证hadoop环境变量的配置是否正常。
3 修改hadoop配置文件
在/apps/hadoop/etc/hadoop目录下提供了hadoop的多个配置文件,如图所示。
其中,伪分布模式配置需要修改如下的几个文件。
(1)hadoop-env.sh文件
在文件中找到“export JAVA_HOME=${JAVA_HOME}”一行,在行首插入字符“#”将该行注释掉,再在此处插入如下的一行文本,效果如图所示。
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
(2)core-site.xml文件
打开该文件看到,在<configuration>与</configuration>标签之间没有内容,对其进行编辑,使其达到如图所示的最终效果。这里共做了两项配置,一项是fs.defaultFS——配置hadoop HDFS文件系统的地址,另一项是hadoop.tmp.dir——配置hadoop处理过程中,临时文件的存储位置(特别注意,目录/data/tmp/hadoop/tmp需要提前创建)。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/tmp/hadoop/tmp</value>
</property>
</configuration>
创建需要的临时目录:
$ cd /data
$ mkdir -p tmp/hadoop/tmp
(3)hdfs-site.xml文件
打开该文件看到,在<configuration>与</configuration>标签之间没有内容,现将如下文本添加到两个标签之间,使其达到如图所示的最终效果。
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/tmp/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/tmp/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
这里共配置了四项:
dfs.namenode.name.dir——配置元数据信息存储位置。
dfs.datanode.data.dir——配置具体数据存储位置。
dfs.replication——配置每个数据块的副本数量,这里只使用1台节点,所以设置为1,如果设置为2的话,运行会报错。
dfs.permissions.enabled——配置hdfs是否启用权限认证。
将/data/tmp/hadoop/hdfs目录创建出来:
$ mkdir /data/tmp/hadoop/hdfs
4 格式化文件系统
$ /apps/hadoop/bin/hdfs namenode –format
执行过程会有许多的信息产生,如果成功则会看到“Storage directory /data/tmp/hadoop/hdfs/name has been successfully formatted”。
5 启动NameNode和DataNode的守护进程
$ /apps/hadoop/sbin/start-dfs.sh
守护进程日志将写入 $HADOOP_LOG_DIR 目录,默认是$HADOOP_HOME/logs。
6 HDFS的状态检查
jps执行结果可用来判断前边的安装是否成功。如果显示有NameNode 、DataNode 、SecondaryNameNode3个进程,如图所示,则表示成功,否则不成功。
另外,也可以Web方式检查。访问Web界面http://ip:50070 ,如图所示,表明安装成功。从中可以看到NameNode、DataNode的信息,也可以浏览到HDFS文件系统中的文件。
至此,HDFS安装完毕。
7 本步骤选做。这是一个本地化运行MapReduce作业的例子,随着后续步骤的完成,到时候就可以在YARN上运行MapReduce 作业了。
(1)在HDFS上创建目录,以便能运行这个作业
$ cd /apps/hadoop
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/hadoop
(2)复制本地/apps/hadoop/etc/hadoop目录下的文件到HDFS的input目录
$ bin/hdfs dfs -put etc/hadoop input
注意,复制时虽然提示有异常,但是不影响。最终复制到了HDFS的/user/hadoop/input。
(3)运行作业
$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.11.0.jar grep input output 'dfs[a-z.]+'
(4)查看统计结果
bin/hdfs dfs -cat output/*
查看结果如图所示。
8 YARN启用前的配置
YARN是一个对集群资源进行统一管理和调度的工具,可以大大提高集群的资源利用率。为了能够在YARN上运行MapReduce作业,首先需要配置两个相关文件。
(1)mapred-site.xml文件
步骤如下:
1)将存在的模板文件mapred-site.xml.template改名为mapred-site.xml
$ cd /apps/hadoop/etc/hadoop
$ mv mapred-site.xml.template mapred-site.xml
2)在该文件的<configuration>标签后增加如下文本,如图所示。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
作用是将mapreduce任务处理所使用的框架配置为yarn。
(2)yarn-site.xml文件
在该文件的<configuration>标签后增加如下文本,如图所示。
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
目的是指定所用服务,默认为空。
9 YARN的启动
配置完文件之后,就可以启动YARN了:
$cd /apps/hadoop/sbin/
$ ./start-yarn.sh
这样会启动两个守护进程——ResourceManager、NodeManager。
输入jps,查看当前运行的进程,如图所示。可以看到,比HDFS启动时多了ResourceManager与NodeManager2个进程。
此时,也可以访问Web界面http://ip:8088 ,如图所示,从中可以了解job的运行情况。
10 将第7步的例子在YARN方式下再运行一次
由于output是运行中自动生成的目录,现在有可能存在,为了顺利运行,先将其删除。
$ /apps/hadoop/bin/hadoop fs -rm -r output
然后运行:
$/apps/hadoop/bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.11.0.jar grep input output 'dfs[a-z.]+'
当看到有如图所示的流程时,表示作业已正常运行,hadoop环境没有问题。
此时,在8088端口也可以监控到1个作业正在运行,如图所示。
至此,Hadoop的伪分布式已经成功安装。
停止:
stop-dfs.sh
stop-yarn.sh