美文网首页Hadoop系Hadoop程序员
在Ubuntu 16.04上构建多节点的(分布式)Hadoop-

在Ubuntu 16.04上构建多节点的(分布式)Hadoop-

作者: 荧光小炉 | 来源:发表于2017-02-25 19:32 被阅读639次

    实验环境

    • Ubuntu 16.04
    • Hadoop-2.7.3
    • Java 7
    • SSH

    在本篇教程中,我总共使用了两台装有Ubuntu 16.04虚拟机,分别称为master和slave。

    IP 主机名 (hostname) 内存 CPU
    192.168.0.161 hadoop-master 8192 MB 4 cores
    192.168.0.162 hadoop-s1 8192 MB 4 cores

    首先需要在两台机器上各自的/etc/hosts文件中加上彼此的主机名和IP地址:

    h1.png

    安装Java 7

    $ sudo add-apt-repository ppa:openjdk-r/ppa
    $ sudo apt-get update
    $ sudo apt-get install openjdk-7-jdk
    $ java -version
    

    如果java安装成功,那么默认是装在了/usr/lib/jvm下的,我们需要把以下的两句加入~/.bashrc中。

    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
    export PATH=$PATH:/usr/lib/jvm/java-7-openjdk-amd64/bin
    

    SSH免密登录

    Hadoop需要节点之间可以免密访问,因此我们需要生成SSH秘钥并且加入对方的配置文件。
    首先在master上执行:

    $ sudo apt-get install openssh-server
    $ ssh-keygen -t rsa -P ""
    

    然后把生成的id_rsa.pub加入authorized_keys里:

    $ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
    
    

    此时master已经可以对localhost免密访问了

    $ ssh localhost
    

    接下来,为了使master能免密访问slave:

    $ ssh-copy-id -i $HOME/.ssh/id_rsa.pub administrator@hadoop-s1
    $ ssh hadoop-s1
    

    安装Hadoop

    Hadoop的各个版本的Release版本在http://hadoop.apache.org/releases.html

    <u>在Master和Slave节点上</u>

    下载hadoop-2.7.3压缩包,并解压。

    $ cd $HOME
    $ wget http://mirror.fibergrid.in/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
    $ tar -xvf hadoop-2.7.3.tar.gz
    

    此时可以通过以下命令确认hadoop是否成功安装

    $ cd hadoop-2.7.3/
    $ bin/hadoop-2.7.3
    

    如果成功安装,则把hadoop的以下环境变量加入.bashrc文件中。

    # Set Hadoop-related environment variables
    export HADOOP_HOME=$HOME/hadoop-2.7.3
    export HADOOP_CONF_DIR=$HOME/hadoop-2.7.3/etc/hadoop
    export HADOOP_MAPRED_HOME=$HOME/hadoop-2.7.3
    export HADOOP_COMMON_HOME=$HOME/hadoop-2.7.3
    export HADOOP_HDFS_HOME=$HOME/hadoop-2.7.3
    export YARN_HOME=$HOME/hadoop-2.7.3
    
    # Add Hadoop bin/ directory to PATH
    export PATH=$PATH:$HOME/hadoop-2.7.3/bin
    
    $ source .bashrc
    

    然后将JAVA_HOME配置到hadoop-2.7.3/etc/hadoop/hadoop-env.sh里,这个文件指定了Hadoop的守护进程使用的JDK环境变量。

    $ cd hadoop-2.7.3/etc/hadoop/
    $ sudo vim hadoop-env.sh
    

    将以下命令贴到文件中并保存。

    # The java implementation to use.
    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
    

    接下来我们创建NameNode和DataNode的目录。

    $ cd
    $ mkdir -p $HADOOP_HOME/hadoop2_data/hdfs/namenode
    $ mkdir -p $HADOOP_HOME/hadoop2_data/hdfs/datanode
    

    Hadoop有很多的配置文件需要我们根据需求来做相应的配置,下面一个一个地进行配置。

    $ cd hadoop-2.7.3/etc/hadoop/
    $ sudo vim core-site.xml
    

    <u>core-site.xml</u>

    <configuration>
    
        <property>
        
            <name>fs.defaultFS</name>
            
            <value>hdfs://master:9000</value>
        
        </property>
    
    </configuration>
    

    <u>hdfs-site.xml</u>

    $ sudo vim hdfs-site.xml
    
    <configuration>
    
        <property>
        
            <name>dfs.replication</name>
            
            <value>2</value>
        
        </property>
        
        <property>
        
            <name>dfs.permissions</name>
            
            <value>false</value>
        
        </property>
        
        <property>
        
            <name>dfs.namenode.name.dir</name>
            
            <value>/home/ubuntu/hadoop-2.7.3/hadoop2_data/hdfs/namenode</value>
        
        </property>
        
        <property>
        
            <name>dfs.datanode.data.dir</name>
            
            <value>/home/ubuntu/hadoop-2.7.3/hadoop2_data/hdfs/datanode</value>
        
        </property>
    
    </configuration>
    

    <u>yarn-site.xml</u>

    $ sudo vim yarn-site.xml
    
    <configuration>
    
         <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
         </property>
         <property>
               <name>yarn.resourcemanager.address</name>
               <value>hadoop-master:8032</value>
         </property>
         <property>
              <name>yarn.resourcemanager.scheduler.address</name>
              <value>hadoop-master:8030</value>
          </property>
         <property>
             <name>yarn.resourcemanager.resource-tracker.address</name>
             <value>hadoop-master:8031</value>
         </property>
         <property>
             <name>yarn.resourcemanager.admin.address</name>
             <value>hadoop-master:8033</value>
         </property>
         <property>
             <name>yarn.resourcemanager.webapp.address</name>
             <value>hadoop-master:8088</value>
         </property>
    
    </configuration>
    

    <u>mapred-site.xml</u>

    $ cp mapred-site.xml.template mapred-site.xml
    $ sudo vim mapred-site.xml
    
    <configuration>
    
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        
        <property>
            <name>mapreduce.map.memory.mb</name>
            <value>4096</value>
        </property>
        
        <property>
            <name>mapreduce.reduce.memory.mb</name>
            <value>4096</value>
        </property>
        
        <property>
            <name>mapreduce.map.java.opts</name>
            <value>-Xmx3072m</value>
        </property>
        
        <property>
            <name>mapreduce.reduce.java.opts</name>
            <value>-Xmx3072m</value>
        </property>
    
    </configuration>
    
    $ sudo vim hadoop-2.7.3/etc/hadoop/masters
    
    hadoop-master
    
    $ sudo vim hadoop-2.7.3/etc/hadoop/slaves
    
    hadoop-master
    hadoop-s1
    

    现在对Hadoop集群master的配置已经完成了,我们需要按照同样的步骤配置slave节点。当两台机器都安装并配置好hadoop之后,我们就可以启动hadoop集群了。首先要格式化hadoop的文件系统。

    <u>On Master</u>

    $ cd hadoop-2.7.3/bin
    $ hadoop namenode -format
    

    然后就可以启动Hadoop的守护进程了(NameNode, DataNode, ResourceManager和NodeManager)

    $ cd ..
    $ sbin/start-dfs.sh
    

    运行完成后再启动yarn。

    $ sbin/start-yarn.sh
    

    通过在命令行运行jps指令我们可以看到当前运行在master节点上的守护进程。

    h2.png h3.png

    此时可在hadoop-master节点上访问http://hadoop-master:8088/cluster/nodeshttp://hadoop-master:50070/dfshealth.html来查看集群的一些状态信息。

    h4.png

    运行MapReduce示例程序做词频统计

    Hadoop中的所有MapReduce都是运行在HDFS上的。首先我们可以去网上随便找一篇莎士比亚全集,用txt格式保存在某个目录中,本文是保存在master的$HOME下,文件大小为54MB。

    把用来做词频统计的输入文件放到HDFS中,就可以运行wordcount来做词频统计了。

    $ cd $HADOOP_HOME
    $ hdfs dfs -put $HOME/shakespeare.txt /input
    $ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.3.jar wordcount /input /output
    

    程序运行起来后可以在http://hadoop-master:8088/cluster/nodes查看任务的状态。如果运行成功,统计结果会存在HDFS的/output目录下。如果想查看的话可以从HDFS中导入到本地的文件系统。

    hdfs dfs -getmerge /output $HOME/output.txt
    

    如果想了解更多对HDFS的操作方式,可以访问https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/FileSystemShell.html#Overview

    相关文章

      网友评论

        本文标题:在Ubuntu 16.04上构建多节点的(分布式)Hadoop-

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