美文网首页我爱编程
hadoop学习之hadoop简易安装配置

hadoop学习之hadoop简易安装配置

作者: 你看见皮卡丘了吗 | 来源:发表于2018-04-06 18:22 被阅读107次

    学习环境清单
    ubuntu 16.04
    windows 7
    hadoop 2.9.0
    jdk 8

    一 下载安装hadoop

    首先创建好目录,用于后续文件的归类存放,执行下述命令

    sudo mkdir -p /data/software #用于存放下载的软件

    接下来都用默认账户进行操作

    1.下载hadoop

    访问 http://hadoop.apache.org/releases.html进行下载,我学习的版本是2.9.0,选择binary文件进行下载

    image.png image.png

    下载完成后将hadoop-2.9.0.tar.gz文件传输到ubuntu服务器上.

    也可以直接在服务器中输入下面命令直接在服务器上下载
    sudo wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz -P /data/software

    2.下载jdk

    hadoop依赖于jdk,所以需要再下载一下jdk。
    访问 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html进行下载

    image.png

    下载完成后,传输到服务器上。

    3.配置环境变量

    此时在/data/software下已经有hadoop和jdk的安装包了,下面需要配置环境变量来让他们正常工作。


    image.png

    先将两个文件解压
    tar -zxvf jdk-8u161-linux-x64.tar.gz
    tar -zxvf hadoop-2.9.0.tar.gz

    解压完成后

    image.png

    由于目录名比较长,为两个目录建立一下软连接,以便后续好设置环境变量
    ln -s hadoop-2.9.0/ hadoop
    ln -s jdk1.8.0_161/ jdk

    image.png

    使用vim编辑/etc/environment文件sudo vim /etc/environment,在其中加入如下配置

    JAVA_HOME="/data/software/jdk"
    HADOOP_HOME="//data/software/hadoop" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin"

    编辑完成之后执行source /etc/environment命令

    然后执行javac命令和hadoop version命令,出现如下界面,即证明环境变量安装成功

    image.png image.png

    不过这样当我们重启机器或者切换用户,环境变量将会丢失,需要重新source /etc/environment
    可以vim编辑一下/etc/bash.bashrc这个文件sudo vim /etc/bash.bashrc,在这个文件的末尾追加一下这个命令

    image.png

    这个脚本是每次进入bash都会执行,就省去了我们手动source /etc/environment这个操作。

    二 hadoop简单配置

    1. 单机模式(本地模式)

    hadoop的默认模式就是单机模式,在/data/software/hadoop/sbin下有一些用于启动的脚本文件。

    image.png
    先直接用start-all.sh启动一下(hadoop启动会使用ssh程序,请确保已经安装,如果没有,执行sudo apt-get install openssh-server)
    image.png

    因为单机模式使用的是本地文件系统,可以看到没有启动名称节点和数据节点,而启动的ResourceManager和NodeManager是用于资源调度的,所以单机模式适合用于本地调试mapreduce程序。

    执行一下 hadoop fs命令可以看到如下提示

    image.png

    然后再执行一下hadoop fs -ls /看一下有什么文件

    image.png

    可以看到hadoop直接使用的就是本地文件系统。

    2.伪分布式

    单机模式一般只适用于编写mapreduce程序的测试运行,不适合hadoop学习和实际运用。
    伪分布式是hadoop在单机环境下模拟运行一个集群,会启动hadoop的所有进程,适合用来学习hadoop的基本组件。

    hadoop的主要配置文件都在/data/software/hadoop/etc/hadoop下

    image.png

    下面来修改这4个文件来完成伪分布式的配置
    创建目录用于存放hadoop文件系统的数据
    sudo mkdir -p /data/hadoop

    1. core-site.xml(hadoop的核心配置)

    vim core-site.xml

    image.png
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
          <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://localhost/</value>
           </property>
          <property>
                    <name>hadoop.tmp.dir</name>
                    <value>/data/hadoop</value>
           </property>
    </configuration>  
    
    1. hdfs-site.xml(hdfs的相关配置)
      vim hdfs-site.xml
    image.png
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
            <property>
                    <!--配置hdfs中文件的副本数,默认为3,伪分布式下置为1-->
                    <name>dfs.replication</name>
                    <value>1</value>
            </property>
    </configuration>
    
    1. mapred-site.xml(mapreduce的相关配置)
      这个文件目录下默认是没有的,执行cp mapred-site.xml.template mapred-site.xml获取,然后再编辑
      vim mapred-site.xml
      image.png
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
            <property>
                    <!--配置mapreduce的框架名称-->
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
    </configuration>
    
    1. yarn-site.xml(yarn的相关配置)
      vim yarn-site.xml
    image.png
    <?xml version="1.0"?>
    <configuration>
            <property>
                    <!--配置yarn调度的主机-->
                    <name>yarn.resourcemanager.hostname</name>
                    <value>localhost</value>
            </property>
            <property>
                    <!--NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序-->
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
    </configuration>
    

    配置完毕,执行hadoop namenode -format格式化一下文件系统

    image.png

    格式化完成后再执行一下start-all.sh

    image.png

    可以看到所有节点都已经启动了。

    通过ifconfig获取一下服务器的ip

    image.png

    这时可以访问一下hdfs的webui来看一下,ip地址:50070。
    我的是http://192.168.92.141:50070/

    image.png

    至此,伪分布式配置完成。伪分布式是属于麻雀虽小,但五脏俱全,适合去了解一下hadoop的基本操作。

    3.分布式

    伪分布式虽然可以满足我们的基本学习,但是在真正环境下,都是多节点协同工作的,伪分布式属于单节点,不利于我们了解多节点下hadoop的工作流程。

    我使用了5个节点进行学习

    一个namenode名称节点 hadoop01
    一个secondeNamenode辅助名称节点 hadoop05
    三个datanode数据节点 hadoop02、hadoop03、hadoop04

    image.png

    我根据ubuntu01 克隆了其他四台机器

    1. 规划ip

    首先我们得规划一下每台机器的ip,然后配置一下hosts

    选择虚拟机->设置

    image.png

    可以看到网络为nat模式

    image.png

    再查看虚拟网络编辑器


    image.png

    配置一下子网ip和子网掩码


    image.png

    然后修改每台虚拟机的这个文件,配置一下ip
    sudo vim /etc/network/interfaces

    image.png
    auto lo
    iface lo inet loopback
    auto ens33
    iface ens33 inet static
    address 192.168.92.141 #ip地址
    netmask 255.255.255.0 #子网掩码
    gateway 192.168.92.2 #网关
    dns-nameservers 192.168.92.2 #dns服务器地址
    

    配置完之后再修改每台主机的/etc/hosts文件,将自己配置的ip地址和自己想的域名映射上去,这样之后就可以用域名进行访问了

    image.png
    2. 修改hadoop配置

    对伪分布式下的配置进行修改以变成分布式

    1. core-site.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
            <property>
                    <!--hadoop文件系统地址-->
                    <name>fs.defaultFS</name>
                    <value>hdfs://hadoop01:8020/</value>
            </property>
            <property>
                    <!--hadoop文件系统文件的存放目录-->
                    <name>hadoop.tmp.dir</name>
                    <value>/data/hadoop</value>
            </property>
    </configuration>  
    
    1. hdfs-site.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
            <property>
                <!--hadoop的文件副本数-->
                 <name>dfs.replication</name>
                 <value>3</value>
            </property>
            <property>
                <!--辅助名称节点的webui访问地址-->
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop05:50090</value>
            </property>
    </configuration>
    
    1. mapred-site.xml

    不做更改

    1. yarn-site.xml
    <?xml version="1.0"?>
    <configuration>
        <property>
            <!--yarn的资源管理主机地址-->
            <name>yarn.resourcemanager.hostname</name>
            <value>hadoop01</value>
        </property>
        <property>
            <!--NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序-->
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
     </configuration>
    
    1. slaves
      这个配置文件是用来配置所有数据节点的


      image.png

    将数据节点三个hadoop02、hadoop03、hadoop04写入即可

    3.同步文件

    修改完hadoop配置之后需要将配置同步到所有节点。

    如果在每个节点中都去vim编辑修改的话,无疑是一个很让人烦躁的工作。

    我们可以通过rsync这个工具把文件同步到其他节点上

    在使用这个工具之前,先配置一下免密登录,以便之后不需要每次都去输入密码。我以hadoop01这台机器为主机,执行下述命令,以使hadoop01可以免密登录到hadoop02、hadoop03、hadoop04、hadoop05上

    ssh-keygen -t rsa  #生成密钥
    ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop02 #将密钥添加到远程机器hadoop02上
    ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop03 #将密钥添加到远程机器hadoop03上
    ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop04 #将密钥添加到远程机器hadoop04上
    ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop05 #将密钥添加到远程机器hadoop05上
    ssh hadoop02 #这样就可以不用输入密码登录到hadoop02上(第一次使用还是需要输入密码的,之后就不需要了)
    

    免密登录配置完成之后,下面我们可以使用如下命令,将指定文件同步到其他机器上

    rsync -rvl 文件路径 user@host:文件路径
    rsync -rvl /data/hadoop/etc/hadoop/ hadoop@hadoop01:/data/hadoop/etc/hadoop/
    

    我们有四个节点,同步一个文件或者目录也需要执行四次,也是比较麻烦的,根据这个命令的固定格式,我们可以写一个脚本文件,只调用一次就可以完成所有节点的同步。

    可以在/usr/local/sbin下建立一个文件,命名为mysync。这个目录默认是配置在环境变量下的,在其下的可执行脚本可以在任意处执行。
    sudo touch /usr/local/sbin/mysync

    然后给其赋予执行权限

    sudo chmod a+x /usr/local/sbin/mysync

    脚本内容如下

    #!/bin/bash
    pcount=$#
    #如果没有参数,那么给出提示
    if((pcount < 1));then
     echo no args
     exit;
    fi
    #如果给出了路径,获取其绝对路径
    p1=$1;
    #获取文件名
    fname=`basename $p1` 
    #获取目录名
    dname=`cd -P $(dirname $p1);pwd`
    #获取当前用户
    cuser=`whoami`;
    #循环节点,同步文件,用于hadoop01节点
    for((host=2;host < 6;host=host+1));do
      echo -------------  start send hadoop0$host    --------------------
      rsync -rvl $dname/$fname $cuser@hadoop0$host:$dname
      echo -------------    finished hadoop0$host    --------------------
    done
    

    这样我们只需执行一下 mysync /data/software/hadoop/etc/hadoop即可将文件同步到所有节点上了

    image.png

    同样的我们根据这个可以再写一个脚本,用于所有节点的命令的调用
    sudo touch /usr/local/sbin/mycall
    sudo chmod a+x /usr/local/sbin/mycall

    脚本内容如下

    #!/bin/bash
    pcount=$#
    if(( pcount < 1));then
       echo no args
       exit;
    fi
    
    for((host=1;host<6;host=host+1));do
      echo ------- start operate hadoop0$host  -----------
      #ssh远程执行命令
      ssh hadoop0$host $@
      echo -------   finished hadoop@$host     ------------
    done
    

    这样我们就可以看到每个节点的命令执行情况了

    image.png
    4.启动hadoop

    所有节点文件同步完成之后

    然后清空一下每台机器下的/data/hadoop目录

    rm -rf /data/hadoop

    因为克隆过去的时候将之前hadoop01的机器的节点信息带过去了,不删除的话可能会导致启动出错

    然后再hadoop namenode -format格式化一下文件,然后start-all.sh启动hadoop

    image.png

    使用刚才写的脚本,看一下每一个节点启动的进程情况
    mycall jps

    image.png

    可以看到hadoop01启动了名称节点和资源管理器节点,由hadoop01进行统一调度,hadoop02、hadoop03、hadoop04三个节点启动了数据节点和节点管理器,用于数据的存储和被调度,hadoop05启动了辅助名称节点,用于同步名称节点的数据。至此,hadoop的分布式搭建完成

    可以通过webui查看节点情况


    image.png

    其他的webui端口
    secondNamenode 50090
    datanode 50075

    三 hadoop的文档

    可以访问http://hadoop.apache.org/docs/r2.9.0/获取hadoop 2.9.0的文档
    对hdfs和mapreduce都有很好的说明

    image.png

    最下方有四个配置文件的所有配置项的说明。


    image.png

    相关文章

      网友评论

        本文标题:hadoop学习之hadoop简易安装配置

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