Hadoop: 单节点集群设置

目的

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

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

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

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

先决条件

支持的平台

  • GNU/Linux 被支持作为开发和生产的平台。Hadoop 已在具有2000个节点的GNU/Linux集群上得到验证。

所需软件

Linux所需的软件包括:

  1. 必须安装Java™。推荐的Java版本请参阅HadoopJavaVersions

  2. 如果要使用可选的启动和停止脚本管理远程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.4.1.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连接到localhost,请执行以下命令:

  $ 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 on Single Node

  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/
    
  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.4.1.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

    
        
            mapreduce.framework.name
            yarn
        
        
            mapreduce.application.classpath
            $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*
        
    
    

    etc/hadoop/yarn-site.xml

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

      $ sbin/start-yarn.sh
    
  3. 浏览ResourceManager的网页界面;默认情况下可通过以下地址访问:

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

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

      $ sbin/stop-yarn.sh
    

完全分布式操作

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