Hadoop-2.4.1学习之以伪分布模式部署Hadoop

       Hadoop-2.x版本与Hadoop-1.x除了整体架构上的变化之外,比如HDFS联盟,YARN等,目录结构、配置管理及执行脚本都有了很大的改变,具体哪些地方做了改变还需要通过持续地学习来掌握。在此之前,先学习如何以单机模式和伪分布模式运行Hadoop。

单机模式

       默认情况下,Hadoop作为单个Java进程以非分布式模式运行,该模式非常适于用作Debugg。下面展示了Hadoop-2.4.1自带的统计单词数量的例子,在Hadoop的部署目录中新建目录input,并将etc/hadoop中的配置文件复制到新目录中input中,使用bin/Hadoop 的jar命令运行统计单词数量的jar包,将结果输出到output目录中:

[[email protected]]$ mkdir input
[[email protected]]$ cp etc/hadoop/*.xml input
[[email protected]]$ ls input
capacity-scheduler.xml  core-site.xml hadoop-policy.xml hdfs-site.xml httpfs-site.xml  yarn-site.xml
[[email protected]]$ bin/hadoop jarshare/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount input output

伪分布模式

       伪分布模式与单机模式的相同点是都运行在单个节点上,不同点是以伪分布模式运行时每个Hadoop守护进程运行在不同的Java进程中。在Hadoop-2.x版本中,配置文件位于etc/hadoop中,而不是Hadoop-1.x中的conf目录中。修改etc/hadoop/core-site.xml的内容为:

<configuration>
    <property>
       <name>fs.defaultFS</name>//Hadoop-1.x中的参数为fs.default.name
       <value>hdfs://localhost:9000</value>
    </property>
</configuration>

       修改etc/hadoop/hdfs-site.xml的内容为:

<configuration>
    <property>
       <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

       检查是否不用输入密码就能够ssh到localhost,如果不能,则在命令行执行下面的命令:

$ ssh-keygen -tdsa -P '' -f ~/.ssh/id_dsa
$ cat~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

       下面介绍如何在本地运行MapReduce作业。

1.       首先需要格式化NameNode,不同Hadoop-1.x中的格式化命令bin/hadoopnamenode –format,在Hadoop-2.x中使用$ bin/hdfs namenode -format命令格式化NameNode,目前还可以使用Hadoop-1.x中的格式化命令,但会输出下面的信息:

[hadoop@hadoop hadoop-2.4.1]$ bin/hadoop namenode -format
DEPRECATED: Use of this script to execute hdfs command isdeprecated.
Instead use the hdfs command for it.
14/07/17 10:08:03 INFO common.Storage: Storage directory/tmp/hadoop-hadoop/dfs/name has been successfully formatted.

2.       守护进程的启停脚本位于sbin目录中,而不是Hadoop-1.x中的bin目录中。格式化NameNode后,使用下面的脚本启动NameNode和DataNode进程:

[hadoop@hadoop hadoop-2.4.1]$ sbin/start-dfs.sh
[hadoop@hadoop hadoop-2.4.1]$ jps
5501 NameNode
5897 Jps
5596 DataNode
5790 SecondaryNameNode

可以使用浏览器查看NameNode,默认的URL为http://localhost:50070/。Hadoop守护进程日志的输出到$HADOOP_LOG_DIR中,默认为$HADOOP_HOME/logs。

3.       在HDFS上创建目录,需要注意的是必须按照下面的顺序执行,不可以直接执行第二条命令,否则创建目录失败:

[hadoop@hadoop hadoop-2.4.1]$ bin/hdfs dfs -mkdir /user
[hadoop@hadoop hadoop-2.4.1]$ bin/hdfs dfs -mkdir /user/Hadoop
oop@hadoop hadoop-2.4.1]$ bin/hdfs dfs -mkdir/user/hadoop/input

[hadoop@hadoop hadoop-2.4.1]$ bin/hdfs dfs -mkdir /user/Hadoop
mkdir: `/user/hadoop': No such file or directory

4.       复制文件到分布式文件系统上:

[hadoop@hadoop hadoop-2.4.1]$ bin/hdfs dfs -putetc/hadoop/*.xml input
[hadoop@hadoop hadoop-2.4.1]$ bin/hdfs dfs -ls -R/user/hadoop/input
-rw-r--r--   1 hadoopsupergroup       3589 2014-07-17 10:38/user/hadoop/input/capacity-scheduler.xml
-rw-r--r--   1 hadoopsupergroup        880 2014-07-17 10:38/user/hadoop/input/core-site.xml
-rw-r--r--   1 hadoopsupergroup       9257 2014-07-17 10:38/user/hadoop/input/hadoop-policy.xml
-rw-r--r--   1 hadoopsupergroup        865 2014-07-17 10:38/user/hadoop/input/hdfs-site.xml
-rw-r--r--   1 hadoopsupergroup        620 2014-07-17 10:38/user/hadoop/input/httpfs-site.xml
-rw-r--r--   1 hadoopsupergroup        690 2014-07-17 10:38/user/hadoop/input/yarn-site.xml

5.       运行Hadoop自带的统计单词数量的例子,将结果输出的output目录中:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jarwordcount input output
[hadoop@hadoop hadoop-2.4.1]$ bin/hdfs dfs -ls -R/user/hadoop/output/
-rw-r--r--   1 hadoopsupergroup          0 2014-07-17 10:44/user/hadoop/output/_SUCCESS
-rw-r--r--   1 hadoopsupergroup       5650 2014-07-17 10:44/user/hadoop/output/part-r-00000

输出的结果保存在part-r-00000中,可以使用下面的命令查看结果:

[hadoop@hadoop hadoop-2.4.1]$ bin/hdfs dfs -cat/user/hadoop/output/*

6.       使用下面的命令停止NameNode和DateNode守护进程:

[hadoop@hadoop hadoop-2.4.1]$ sbin/stop-dfs.sh
[hadoop@hadoop hadoop-2.4.1]$ jps
8337 Jps

单个节点上的YARN

       在伪分布式模式下,可以将作业运行在YARN上,而这只需要设置很少的几个参数,另外还需要运行ResourceManager和NodeManager守护进程。修改etc/hadoop/mapred-site.xml内容如下:

<configuration>
    <property>
       <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

       修改etc/hadoop/yarn-site.xml内容如下:

<configuration>
    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
</configuration>

1.       启动ResourceManager和NodeManager守护进程:

[hadoop@hadoop hadoop-2.4.1]$ sbin/start-yarn.sh
[hadoop@hadoop hadoop-2.4.1]$ jps
8892 NodeManager
8923 Jps
8798 ResourceManager

可以在浏览器中查看ResourceManager,默认的URL为http://localhost:8088/

2.       在NameNode和DataNode守护进程运行的情况下,执行下面的命令运行MapReduce作业:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jarwordcount input output

若NameNode和DataNode守护进程没有运行,运行MapReduce作业会出现如下的错误:

java.net.ConnectException: Call From hadoop/127.0.0.1 tolocalhost:9000 failed on connection exception: java.net.ConnectException:Connection refused;

3.       使用下面的命令停止YARN守护进程:

sbin/stop-yarn.sh

总结

       Hadoop-2.x与Hadoop-1.x存在着很大的不同,通过上面的学习可以发现一些不同的地方,比如目录结构的变化,守护进程的变化,配置参数的变化,执行脚本的变化等。另外在YARN上运行MapReduce作业也对硬件有更多的需求,在实践过程中,内存1GB时会出现作业执行失败的现象,将内存调整到2GB时作业可以成功完成。

你可能感兴趣的:(mapreduce,hdfs,yarn,伪分布模式,Hadoop-2.4.1)