美文网首页我用 Linux程序员玩转大数据
CentOS7下搭建hadoop完全分布式环境

CentOS7下搭建hadoop完全分布式环境

作者: 泰克尼客 | 来源:发表于2017-02-22 21:51 被阅读1775次

    单机伪分布式环境的搭建请参考这篇文章

    1. 实验环境的相关信息

    • 操作系统:
      CentOS7.2.1511
    • hadoop版本:
      2.7.3
    • 节点信息:
    角色 地址
    Namenode 192.168.1.231
    Datanode 192.138.1.232
    Datanode 192.168.1.233

    2. 安装和配置JDK

    这里我们选择安装JDK8。

    • 下载
    curl -LO -H "Cookie: oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u71-b15/jdk-8u71-linux-x64.rpm"
    
    • 安装
    rpm -Uvh jdk-8u71-linux-x64.rpm
    
    • 配置环境变量
      打开/etc/profile,在文件最后面添加如下内容:
    export JAVA_HOME=/usr/java/default
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
    
    • 使环境变量生效
      执行如下命令:
    source /etc/profile
    

    使环境变量及时生效。

    • 选择正确的JDK版本
      为防止系统里存在多个版本的JDK,需要使用alternatives选择正确的版本:
    alternatives --config java
    

    请选择/usr/java/jdk1.8.0_71/jre/bin/java对应的数字标号。

    3. 设置hostname

    为方便节点之间的互相访问,在每个节点的/etc/hosts文件中添加如下内容:

    192.168.1.231 hadoop-namenode
    192.168.1.232 hadoop-datanode-1
    192.168.1.233 hadoop-datanode-2
    

    4. 创建hadoop用户

    在每个节点上创建hadoop用户:

    useradd -d /usr/hadoop hadoop  #用户家目录设置为/usr/hadoop
    chmod 755 /usr/hadoop 
    passwd hadoop  #设置用户密码
    

    5. 设置SSH免密钥登录

    由于Namenode会执行一系列脚本去控制Datanode,因此需要设置SSH免密钥登录,省去输入密码的麻烦。

    • 登录到Namenode节点,切换用户为hadoop
    su hadoop
    
    • 生成SSH KEY并将其拷贝到各个节点主机上
      依次执行如下命令:
    ssh-keygen 
    ssh-copy-id localhost #免密钥登录本机 
    ssh-copy-id hadoop-datanode-1
    ssh-copy-id hadoop-datanode-2
    

    设置完成后,尝试在Namenode节点上用SSH连接各个节点,如果无需输入密码即可登录,则表示设置成功:

    ssh localhost
    ssh hadoop-datanode-1
    ssh hadoop-datanode-2
    

    6. 安装hadoop

    本步骤需要在每个节点下载和安装hadoop,并做简单的配置。

    • 下载和安装,这里选择2.7.3版本
    su hadoop #切换到hadoop用户
    #下载2.7.3版本hadoop
    curl -O http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
    #安装到/usr/hadoop目录
    tar zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop --strip-components 1
    
    • 配置环境变量
      hadoop用户的身份,打开~/.bashrc文件,在文件末添加如下内容:
    export HADOOP_HOME=/usr/hadoop
    export HADOOP_COMMON_HOME=$HADOOP_HOME
    export HADOOP_HDFS_HOME=$HADOOP_HOME
    export HADOOP_MAPRED_HOME=$HADOOP_HOME
    export HADOOP_YARN_HOME=$HADOOP_HOME
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
    
    • 使环境变量生效
      执行如下命令:
    source ~/.bashrc
    

    使环境变量及时生效。

    7. 配置hadoop

    本节对hadoop集群进行具体的配置。首先请以hadoop用户的身份登录Namenode节点。

    • 创建Datanode文件目录
    su hadoop
    # Namenode兼做Datanode
    mkdir ~/datanode 
    # 远程到Datanode节点创建对应的目录
    ssh hadoop-datanode-1 "mkdir ~/datanode" 
    ssh hadoop-datanode-2 "mkdir ~/datanode" 
    
    • 配置hdfs
      首先打开~/etc/hadoop/hdfs-site.xml文件,在<configuration> - </configuration>之间添加如下内容:
      <property>
        <name>dfs.replication</name>
        <value>2</value>
      </property>
      <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/hadoop/datanode</value>
      </property>
    

    接下来将配置文件同步到Datanode:

    scp ~/etc/hadoop/hdfs-site.xml hadoop-datanode-1:~/etc/hadoop/
    scp ~/etc/hadoop/hdfs-site.xml hadoop-datanode-2:~/etc/hadoop/
    
    • 配置hadoop core
      首先打开~/etc/hadoop/core-site.xml文件,在<configuration> - </configuration>之间添加如下内容:
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-namenode:9000/</value>
      </property>
    

    接下来将配置文件同步到Datanode:

    scp ~/etc/hadoop/core-site.xml hadoop-datanode-1:~/etc/hadoop/
    scp ~/etc/hadoop/core-site.xml hadoop-datanode-2:~/etc/hadoop/
    
    • 在hadoop中设置JAVA_HOME环境变量
      首先通过如下命令在本机修改hadoop-env.sh文件中的环境变量:
    sed -i -e 's/\${JAVA_HOME}/\/usr\/java\/default/' ~/etc/hadoop/hadoop-env.sh
    

    接下来将配置文件同步到Datanode:

    scp ~/etc/hadoop/hadoop-env.sh hadoop-datanode-1:~/etc/hadoop/
    scp ~/etc/hadoop/hadoop-env.sh hadoop-datanode-2:~/etc/hadoop/
    
    • 创建Namenode文件目录
      本步骤只需在Namenode上操作。
      首先创建目录:
    mkdir ~/namenode 
    

    编辑~/etc/hadoop/hdfs-site.xml文件,增加如下的配置项:

      <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/hadoop/namenode</value>
      </property>
    
    • 配置map-reduce:
      本步骤只需在Namenode上操作。
      打开~/etc/hadoop/mapred-site.xml文件,新增如下内容:
    <configuration>
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
      </property>
    </configuration>
    
    • 配置yarn
      首先打开~/etc/hadoop/yarn-site.xml文件,在<configuration> - </configuration>之间添加如下内容:
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-namenode</value>
      </property>
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
      </property>
    

    接下来将配置文件同步到Datanode:

    scp ~/etc/hadoop/yarn-site.xml hadoop-datanode-1:~/etc/hadoop/
    scp ~/etc/hadoop/yarn-site.xml hadoop-datanode-2:~/etc/hadoop/
    
    • 配置slave
      打开etc/hadoop/slaves文件,添加如下内容:
    hadoop-namenode
    hadoop-datanode-1
    hadoop-datanode-2
    

    8. 运行示例进行验证

    • 请暂时关闭防火墙:
    systemctl stop firewalld
    
    • 在Namenode上运行如下命令,分别启动hdfs和yarn服务:
    start-dfs.sh
    start-yarn.sh
    

    在Namenode上运行jps命令,应该会看到如下进程:

    NameNode
    SecondaryNameNode
    NodeManager
    DataNode
    ResourceManager
    Jps
    

    在Datanode上运行jps命令,应该会看到如下进程:

    NodeManager
    Jps
    DataNode
    
    • 通过web界面查看
      访问http://192.168.1.231:50070,可以看到如下图所示的页面,用来了解文件系统信息:
    namenode-info.png
    访问http://192.168.1.231:8088/,可以看到如下图所示的页面,用来监控任务的执行情况: res-node-manager
    • 运行示例程序
      接下来就可以运行示例程序了,hadoop2.7.3提供的示例程序做了这件事:用正则表达式dfs[a-z.]+来搜索所有的输入文件,并汇总和统计搜索到的结果。简单来说,map过程就是对每个文件分别进行处理,reduce过程就是将这些结果进行汇总。
      在Namenode上使用如下命令,开始这个过程:
    su hadoop
    cd ~
    hdfs dfs -mkdir /user
    hdfs dfs -mkdir /user/test
    hdfs dfs -put etc/hadoop /user/test
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep /user/test/hadoop /user/test/output 'dfs[a-z.]+'
    

    在如上命令中,我们把文件系统中的/user/test/hadoop文件夹下的文件作为示例程序的输入,并告知示例程序将结果存储到/user/test/hadoop目录中。
    执行命令时,可以刷新http://192.168.1.231:8088/这个页面,来获取任务执行情况。
    任务执行成功后,执行如下命令查看结果:

    $ hdfs dfs -cat /user/test/output/*
    6   dfs.audit.logger
    4   dfs.class
    3   dfs.server.namenode.
    2   dfs.period
    2   dfs.audit.log.maxfilesize
    2   dfs.audit.log.maxbackupindex
    1   dfsmetrics.log
    1   dfsadmin
    1   dfs.servers
    1   dfs.replication
    1   dfs.file
    

    可以看到该程序的输出,就是所有输入文件中被正则表达式匹配到的内容以及这些内容被匹配到的次数的统计。

    相关文章

      网友评论

        本文标题:CentOS7下搭建hadoop完全分布式环境

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