您的位置:首页 > 运维架构

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

2014-07-17 14:00 369 查看
       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目录中:

[hadoop@hadoophadoop-2.4.1]$ mkdir input
[hadoop@hadoophadoop-2.4.1]$ cp etc/hadoop/*.xml input
[hadoop@hadoophadoop-2.4.1]$ ls input
capacity-scheduler.xml  core-site.xml hadoop-policy.xml hdfs-site.xml httpfs-site.xml  yarn-site.xml
[hadoop@hadoophadoop-2.4.1]$ 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时作业可以成功完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息