1、Hadoop:设置单节点集群

1.1、目的

本文档介绍了如何安装和配置单节点Hadoop,使您可以快速地使用Hadoop MapReduce和HDFS进行简单的操作。

1.2、先决条件

1.2.1、支持的平台

  • GNU/Linux支持作为开发和生产平台。Hadoop已经在拥有2000个节点的GNU/Linux集群上进行了演示。
  • Windows也是一个受支持的平台,但下面的步骤仅适用于Linux。要在Windows上设置Hadoop,请参阅wiki页面

1.2.2、所需软件

Linux操作系统所需软件包括:

  1. 必须安装Java™。推荐的Java版本在hadoopjavaverversions中有描述。
  2. 如果要使用可选的启动和停止脚本,必须安装ssh并运行sshd来使用管理远程Hadoop守护进程的Hadoop脚本。此外,还建议安装pdsh,以便更好地进行ssh资源管理。

1.2.3、安装软件

如果您的集群没有必要的软件,那么您将需要安装它。

例如在Ubuntu Linux上:

  1. $ sudo apt-get install ssh
  2. $ sudo apt-get install pdsh

1.3、下载

要获得Hadoop发行版,请从Apache下载镜像下载一个最近的稳定发行版

1.4、准备启动Hadoop集群

解包下载的Hadoop发行版。在分发版中,编辑文件etc/hadoop/hadoop-env.sh,定义如下参数:

  1. # set to the root of your Java installation
  2. export JAVA_HOME=/usr/java/latest

尝试以下命令:

  1. $ bin/hadoop

这将显示hadoop脚本的使用文档。

现在您已经准备好以三种支持模式之一启动Hadoop集群了:

  • 本地(独立)模式
  • 伪分布模式
  • 全分布模式

1.5、单机操作

默认情况下,Hadoop被配置为以非分布式模式运行,即作为单个Java进程。这对调试很有用。

下面的示例将unpacked conf目录复制为输入,然后查找并显示给定正则表达式的每个匹配项。输出被写入给定的输出目录。

  1. $ mkdir input
  2. $ cp etc/hadoop/*.xml input
  3. $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar grep input output 'dfs[a-z.]+'
  4. $ cat output/*

1.6、伪分布操作

Hadoop还可以以伪分布式模式运行在单节点上,其中每个Hadoop守护进程运行在单独的Java进程中。

1.6.1、配置

使用以下:

etc/hadoop/core-site.xml:

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://localhost:9000</value>
  5. </property>
  6. </configuration>

etc/hadoop/hdfs-site.xml:

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. </configuration>

1.6.2、设置免密登录

现在检查你是否可以ssh到本地主机而不需要密码短语:

  1. $ ssh localhost

如果没有密码短语无法ssh到localhost,请执行以下命令:

  1. $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  2. $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. $ chmod 0600 ~/.ssh/authorized_keys

1.6.3、执行

以下说明是在本地运行MapReduce作业。如果你想在YARN上执行一个作业,请参阅Single Node上的YARN。

  1. 格式化文件系统:
  1. $ bin/hdfs namenode -format
  1. 启动NameNode和DataNode守护进程:
  1. $ sbin/start-dfs.sh
  1. 浏览网页界面的NameNode;默认情况下,它在以下地方可用:
    NameNode - http://localhost:9870/

  2. 制作执行MapReduce任务所需的HDFS目录:

  1. $ bin/hdfs dfs -mkdir /user
  2. $ bin/hdfs dfs -mkdir /user/<username>
  1. 将输入文件复制到分布式文件系统中:
  1. $ bin/hdfs dfs -mkdir input
  2. $ bin/hdfs dfs -put etc/hadoop/*.xml input
  1. 运行所提供的一些示例:
  1. $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar grep input output 'dfs[a-z.]+'
  1. 检查输出文件:将输出文件从分布式文件系统复制到本地文件系统并检查它们:
  1. $ bin/hdfs dfs -get output output
  2. $ cat output/*
  1. 查看分布式文件系统上的输出文件:
  1. $ bin/hdfs dfs -cat output/*
  1. 当你完成时,停止守护进程:
  1. $ sbin/stop-dfs.sh

1.6.4、单节点上的YARN

通过设置一些参数,再运行ResourceManager守护进程和NodeManager守护进程,可以在YARN上以伪分布式模式运行MapReduce作业。

下面的说明假设1.~ 4.上述指令的步骤已经执行。

  1. 配置参数如下:

etc/hadoop/mapred-site.xml:

  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. <property>
  7. <name>mapreduce.application.classpath</name>
  8. <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
  9. </property>
  10. </configuration>

etc/hadoop/yarn-site.xml:

  1. <configuration>
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <property>
  7. <name>yarn.nodemanager.env-whitelist</name>
  8. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
  9. </property>
  10. </configuration>
  1. 启动ResourceManager和NodeManager守护进程:
  1. $ sbin/start-yarn.sh
  1. 浏览ResourceManager的web界面;默认情况下,它在以下地方可用:
    ResourceManager http://localhost:8088

  2. 运行MapReduce作业。

  3. 当你完成时,停止守护进程:

  1. $ sbin/stop-yarn.sh

1.7、全分布操作

有关设置完全分布的、重要的集群的信息,请参见集群设置