Hadoop安装教程_单机/伪分布式配置

作者: 羽恒 | 来源:发表于2018-09-13 00:35 被阅读1次

    最近在实践中感觉Hadoop避无可避,而安装往往就体验一把从入门到放弃。尽管环境搭建现在越来越简单,但是还是有很多坑,尤其对于linux环境不熟悉的同学们来讲。
    本教程适用于原生Hadoop2.7,主要参考了官方安装教程,按照步骤,基本能够顺利安装并体验Hadoop的精彩之处。

    环境

    系统版本

    本教程使用Ubuntu17.10 64位作为安装系统(16.04以上版本均可)请自行配置安装

    Hadoop 版本

    Hadoop 版本
    Hadoop主要有三个版本,Hadoop1.x.y、Hadoop2.x.y和Hadoop3.x.y系列,本教程主要集中处理Hadoop2.7及以上。
    新版兼容旧版,低版本代码可在高版本使用(欢迎验证反馈)

    创建Hadoop用户

    • 在终端窗口,输入如下命令创建用户
      sudo useradd -m hadoop -s /bin/bash
    • 使用如下命令设置密码,按照提示输入两次密码
      sudo passwd hadoop
    • 为用户增加管理员权限,减少权限问题
      sudo adduser hadoop sudo
    • 使用如下命令切换用户
      su - hadoop

    安装Java 环境

    Java 环境可使用Oracle的JDK或者OpenJDK,可依据该链接步骤安装https://wiki.apache.org/hadoop/HadoopJavaVersions
    或通过如下命令安装 OpenJDK
    sudo apt install openjdk-7-jre openjdk-7-jdk

    JRE和JDK区别
    JRE(Java Runtime Environment Java运行环境)是Java运行所需环境。
    JDK(Java Development Kit Java软件开发工具包)既包括JRE,还包括开发Java所需的工具和类库

    • 配置环境变量
      vi ~/.bashrc
      export JAVA_HOME=JDK安装路径
    • 运行如下命令,使环境变量生效
      source ~/.bashrc

    安装Hadoop2

    Hadoop可通过http://mirror.bit.edu.cn/apache/hadoop/common/或者https://mirrors.cnnic.cn/apache/hadoop/common/下载,一般选择稳定版本,下载是建议下载Hadoop-2.x.y.tar.gz

    • Hadoop安装至/usr/local/
      sudo tar -zxf ~/下载/hadoop-2.7.7.tar.gz -C /usr/local    # 解压到/usr/local中
      cd /usr/local/
      sudo mv ./hadoop-2.7.7/ ./hadoop            # 将文件夹名改为hadoop
      sudo chown -R hadoop ./hadoop       # 修改文件权限
      
    • Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
        cd /usr/local/hadoop
      ./bin/hadoop version
      

      相对路径与绝对路径的区别
      请务必注意命令中的相对路径与绝对路径,本文后续出现的 ./bin/...,./etc/... 等包含 ./ 的路径,均为相对路径,以 /usr/local/hadoop 为当前目录。例如在 /usr/local/hadoop 目录中执行 ./bin/hadoop version 等同于执行 /usr/local/hadoop/bin/hadoop version。可以将相对路径改成绝对路径来执行,但如果你是在主文件夹 ~ 中执行 ./bin/hadoop version,执行的会是 /home/hadoop/bin/hadoop version,就不是我们所想要的了。

    Hadoop单机配置(非分布式)

    Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。

    现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.07.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。

    在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。

      cd /usr/local/hadoop
      mkdir ./input
      cp ./etc/hadoop/*.xml ./input   # 将配置文件作为输入文件
      ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input     ./output 'dfs[a-z.]+'
      cat ./output/*   # 查看运行结果
    

    执行成功后如下所示,输出了作业的相关信息,输出的结果是符合正则的单词 dfsadmin 出现了1次


    注意:Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。

    Hadoop伪分布式配置

    Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。

    Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

    修改配置文件 core-site.xml (通过 gedit 编辑会比较方便: gedit ./etc/hadoop/core-site.xml),将当中的

      <configuration>
      </configuration>
    

    修改为下面配置:

    <configuration>
            <property>
                  <name>hadoop.tmp.dir</name>
                 <value>file:/usr/local/hadoop/tmp</value>
                 <description>Abase for other temporary directories.</description>
            </property>
            <property>
                 <name>fs.defaultFS</name>
                 <value>hdfs://localhost:9000</value>
            </property>
    </configuration>
    

    同样的,修改配置文件 hdfs-site.xml:

    <configuration>
            <property>
                 <name>dfs.replication</name>
                 <value>1</value>
            </property>
            <property>
                 <name>dfs.namenode.name.dir</name>
                 <value>file:/usr/local/hadoop/tmp/dfs/name</value>
            </property>
            <property>
                 <name>dfs.datanode.data.dir</name>
                 <value>file:/usr/local/hadoop/tmp/dfs/data</value>
            </property>
    </configuration>
    

    Hadoop配置文件说明
    Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
    此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。

    • 配置完成后,执行 NameNode 的格式化:
      ./bin/hdfs namenode -format


      如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误,则说明之前设置 JAVA_HOME 环境变量那边就没设置好,请按教程先设置好 JAVA_HOME 变量,否则后面的过程都是进行不下去的。若JAVA_HOME设置正确,则修改./etc/hadoop/hadoop-env.sh添加环境变量expect JAVA_HOME=JDK安装路径
    • 接着开启 NameNode 和 DataNode 守护进程。
      ./sbin/start-dfs.sh

      启动 Hadoop 时提示 Could not resolve hostname
      如果启动 Hadoop 时遇到输出非常多“ssh: Could not resolve hostname xxx”的异常情况
      这个并不是 ssh 的问题,可通过设置 Hadoop 环境变量来解决。首先按键盘的 ctrl + c 中断启动,然后在 ~/.bashrc 中,增加如下两行内容(设置过程与 JAVA_HOME 变量一样,其中 HADOOP_HOME 为 Hadoop 的安装目录):
      export HADOOP_HOME=/usr/local/hadoop
      export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
      保存后,务必执行 source ~/.bashrc 使变量设置生效,然后再次执行 ./sbin/start-dfs.sh 启动 Hadoop。

    启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。

    • 成功启动后,可以访问 Web 界面 http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。

    运行Hadoop伪分布式实例

    上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:
    ./bin/hdfs dfs -mkdir -p /user/hadoop

    接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
    ./bin/hdfs dfs -mkdir input
    ./bin/hdfs dfs -put ./etc/hadoop/*.xml input

    复制完成后,可以通过如下命令查看文件列表
    ./bin/hdfs dfs -ls input

    伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
    ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

    查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
    ./bin/hdfs dfs -cat output/*

    我们也可以将运行结果取回到本地:
    rm -r ./output # 先删除本地的 output 文件夹(如果存在)
    ./bin/hdfs dfs -get output ./output # 将 HDFS 上的 output 文件夹拷贝到本机
    cat ./output/*
    ./bin/hdfs dfs -rm -r output # 删除 output 文件夹

    关闭Hadoop :./sbin/stop-dfs.sh

    相关文章

      网友评论

        本文标题:Hadoop安装教程_单机/伪分布式配置

        本文链接:https://www.haomeiwen.com/subject/mcdigftx.html