Hadoop:设置单节点群集。

目的

本文档介绍如何设置和配置单节点 Hadoop 安装,以便您可以使用 Hadoop MapReduce 和 Hadoop 分布式文件系统 (HDFS) 快速执行简单操作。

重要:所有生产 Hadoop 群集都使用 Kerberos 对调用者进行身份验证并保护对 HDFS 数据的访问以及限制对计算服务的访问(YARN 等)。

这些说明不涵盖与任何 Kerberos 服务的集成,- 每个启动生产群集的人都应将连接到其组织的 Kerberos 基础设施作为部署的关键部分。

有关如何保护群集的详细信息,请参阅 安全性

先决条件

受支持的平台

  • GNU/Linux 受支持作为开发和生产平台。Hadoop 已在拥有 2000 个节点的 GNU/Linux 群集上得到演示。

必需的软件

Linux 的必需软件包括

  1. 必须安装 Java™。建议的 Java 版本在 HadoopJavaVersions 中进行描述。

  2. 如果要使用管理远程 Hadoop 守护进程的 Hadoop 脚本,则必须安装 ssh 且 sshd 必须正在运行,以使用可选的启动和停止脚本。此外,建议还安装 pdsh 以便更好地管理 ssh 资源。

安装软件

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

例如,在 Ubuntu Linux 上

  $ sudo apt-get install ssh
  $ sudo apt-get install pdsh

下载

要获取 Hadoop 发行版,请从 Apache 下载镜像 下载最近的稳定版本。

准备启动 Hadoop 集群

解压下载的 Hadoop 发行版。在发行版中,编辑文件 etc/hadoop/hadoop-env.sh 以按如下方式定义一些参数

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

尝试以下命令

  $ bin/hadoop

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

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

独立操作

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

以下示例复制解压的 conf 目录以用作输入,然后查找并显示给定正则表达式的每个匹配项。输出将写入给定的输出目录。

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

伪分布式操作

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

配置

使用以下内容

etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</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

现在检查您是否可以在没有密码的情况下 ssh 到本地主机

  $ ssh localhost

如果您无法在没有密码的情况下 ssh 到本地主机,请执行以下命令

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

执行

以下说明是在本地运行 MapReduce 作业。如果您想在 YARN 上执行作业,请参阅 单节点上的 YARN

  1. 格式化文件系统

      $ bin/hdfs namenode -format
    
  2. 启动 NameNode 守护进程和 DataNode 守护进程

      $ sbin/start-dfs.sh
    

    hadoop 守护进程日志输出将写入 $HADOOP_LOG_DIR 目录(默认为 $HADOOP_HOME/logs)。

  3. 浏览 NameNode 的网络界面;默认情况下,它可在以下位置找到

    • NameNode - http://localhost:9870/
  4. 创建执行 MapReduce 作业所需的 HDFS 目录

      $ bin/hdfs dfs -mkdir -p /user/<username>
    
  5. 将输入文件复制到分布式文件系统中

      $ bin/hdfs dfs -mkdir input
      $ bin/hdfs dfs -put etc/hadoop/*.xml input
    
  6. 运行一些提供的示例

      $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
    
  7. 检查输出文件:将输出文件从分布式文件系统复制到本地文件系统并检查它们

      $ bin/hdfs dfs -get output output
      $ cat output/*
    

    在分布式文件系统上查看输出文件

      $ bin/hdfs dfs -cat output/*
    
  8. 完成后,使用以下命令停止守护进程

      $ sbin/stop-dfs.sh
    

单个节点上的 YARN

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

以下说明假定已执行上述说明的 1. ~ 4. 步骤。

  1. 按如下方式配置参数

    etc/hadoop/mapred-site.xml:

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        <property>
            <name>mapreduce.application.classpath</name>
            <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
        </property>
    </configuration>
    

    etc/hadoop/yarn-site.xml:

    <configuration>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <name>yarn.nodemanager.env-whitelist</name>
            <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>
        </property>
    </configuration>
    
  2. 启动 ResourceManager 守护进程和 NodeManager 守护进程

      $ sbin/start-yarn.sh
    
  3. 浏览 ResourceManager 的网络界面;默认情况下,它可在以下位置找到

    • ResourceManager - http://localhost:8088/
  4. 运行 MapReduce 作业。

  5. 完成后,使用以下命令停止守护进程

      $ sbin/stop-yarn.sh
    

完全分布式操作

有关设置完全分布式、非平凡集群的信息,请参阅集群设置