为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Hadoop

最近在实践中感觉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            # 将文件夹名改为hadoopsudo 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次


webp

注意: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

    webp


    如果在这一步时提示 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 中的文件。

    webp

运行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



作者:羽恒
链接:https://www.jianshu.com/p/99f3b52a5c54


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消