CentOS7搭建Hadoop集群环境

本文章为云计算课程实验总结。

前言

  • CentOS7虚拟机搭建hadoop集群,共3个节点:master、slave1、slave2

  • 软件:java1.8 hadoop2.6.0

  • 3台虚拟机都装有CentOS7(最小化安装)系统,一台机命名为 master 作为 namenode,另两台为slave1和slave2,作为 datanode。

虚拟机配置

用户名 Host-IP 网关 HostName(互 ping 时的机器名) 内存 硬盘 HDFS YARN 备注
Master 172.16.24.38 172.16.24.254 master 2GB 40GB NameNode ResourcesManager 集群主节点
Slave1 172.16.24.79 172.16.24.254 slave1 1GB 20GB DataNode NodeManager 计算调度
Slave2 172.16.24.48 172.16.24.254 slave2 1GB 20GB DataNode NodeManager 数据计算节点

注:虚拟机安装及IP地址等信息比较简单,这里不给出。

搭建Hadoop集群环境

(1)设置主机名和 IP 地址分配(/etc/hosts):修改系统文件需要root权限

master、slave1、slave2三台机器都需要设置,可先在master配置,在复制到slave1、slave2中(也可单独设置):vi /etc/hosts

 

CentOS7搭建Hadoop集群环境_第1张图片

scp /etc/hosts root@slave1:/etc/    #复制/etc/hosts文件到slave1
scp /etc/hosts root@slave2:/etc/

(2)使用root用户为三台虚拟机各自创建一个hadoop账户并为其设置密码,专门负责操作与 hadoop 相关的业务。

useradd hadoop  #创建hadoop用户
passwd hadoop   #为hadoop设置密码

(3)设置三台机器之间免密码登陆:(使用 hadoop 用户)

  1. 在 master 机器上使用 hadoop 用户生成 master 机器节点的 hadoop 账户密钥对:ssh-keygen -t rsa

     

    CentOS7搭建Hadoop集群环境_第2张图片

     

  2. 在 master 机器上为 slave1 和 slave2 生成各自的密钥对。

    ssh slave1 ssh-keygen -t rsa
    ssh slave2 ssh-keygen -t rsa
  3. 将所有的公钥文件汇总到master机器上的一个总的授权key文件 authorized_keys 中。

    scp hadoop@slave1:~/.ssh/id_rsa.pub ~/.ssh/slave1.pub
    scp hadoop@slave2:~/.ssh/id_rsa.pub ~/.ssh/slave2.pub
    cat ~/.ssh/*.pub > /.ssh/authorized_keys
  4. 出于安全性考虑,将这个授权 key 文件 authorized_keys 赋予 600 权限

    chmod 600 .ssh/authorized_keys
  5. 将authorized_keys 认证文件复制到所有节点主机的~/.ssh/目录下,并进行验证互信。

    scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh     #将authorized_keys认证文件复制到slave1的hadoop用户家目录的.ssh目录下
    scp ~/.ssh/authorized_keys hadoop@slave2:~/.ssh 

    测试免密码连接

    ssh slave1
    ssh slave2

(4)安装java

  1. 创建统一管理 java 和 hadoop 的父级目录chadoop,位于 hadoop 用户主目录下/home/hadoop

    mkdir ~/chadoop         #父级目录
    mkdir ~/chadoop/java    #java安装目录
  2. 解压 jdk 安装包并把解压内容移至~/chadoop/java目录下

    tar zxf jdk-8u201-linux-x64.tar.gz      #解压jdk
    mv jdk1.8.0_201 ~/chadoop/java          

    CentOS7搭建Hadoop集群环境_第3张图片

  3. 修改环境变量(~/.bash_profile):加入 JAVA_HOME,CLASSPATH 和 PATH

    注:HADOOP_HOME 与 HADOOP_CONF_DIR为hadoop环境变量,这里提前配置好(当然,你也可以稍后安装hadoop再配置)。

    export JAVA_HOME=~/chadoop/java/jdk1.8.0_201 
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export HADOOP_HOME=~/chadoop/hadoop/hadoop-2.6.0
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH 
    

    CentOS7搭建Hadoop集群环境_第4张图片

    配置后使用 . ~/.bash_profile 立即生效,使用 java –version 命令进行检测 java 是否安装成功。

    CentOS7搭建Hadoop集群环境_第5张图片

(5)安装hadoop(与安装java类似)

  1. 解压hadoop

    tar zxf hadoop-2.6.0.tar.gz
    mkdir ~/chadoop/hadoop
    mv hadoop-2.6.0 ~/chadoop/hadoop
  2. 创建 hadoop 相关的 tmp 目录和 dfs 目录(以及其下的 name 和 data 目录)

    mkdir ~/chadoop/tmp
    mkdir -p ~/chadoop/dfs/name ~/chadoop/dfs/data 
  3. 为 hadoop 配置环境变量(~/.bash_profile)

    注:配置java环境时已配置(HADOOP_HOME 与 HADOOP_CONF_DIR)

  4. 修改 hadoop 内置文件,配置集群模式。

    涉及修改文件:core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xmlhadoop-env.shmapred-env.shyarn-env.shslaves(均位于$HADOOP_HOME 下的/etc/hadoop 文件夹下)

    ①配置core-site.xml

    
        
            fs.defaultFS
            hdfs://master:9000
        
        
        
            hadoop.tmp.dir
            file:/home/hadoop/chadoop/tmp
        
        
        
            io.file.buffer.size
            131072
        
    

    ②配置hdfs-site.xml

     
        
            dfs.namenode.name.dir
            /home/hadoop/chadoop/dfs/name
            namenode 的目录位置
        
        
        
            dfs.datanode.data.dir
            /home/hadoop/chadoop/dfs/data
            datanode 的目录位置
        
        
        
            dfs.replication
            2
            hdfs 系统的副本数量
        
        
        
            dfs.namenode.secondary.http-address
            master:9001
            备份 namenode 的 http 地址
        
        
        
            dfs.webhdfs.enabled
            true
            hdfs 文件系统的 webhdfs 使能标致
        
    

    ③配置mapred-site.xml

    mapred-site.xml需要先复制模板生成配置文件后修改内容:cp mapred-site.xml.template mapred-site.xml

    
        
            mapreduce.framework.name
            yarn
            指明 MapRreduce 的调度框架为 yarn
        
        
        
            mapreduce.jobhistory.address
            master:10020
            知名 MapReduce 的作业历史地址
        
        
        
            mapreduce.jobhistory.webapp.address
            master:19888
            指明 MapReduce 的作业历史 web 地址
        
     

    ④配置yarn-site.xml

    
        
            yarn.resourcemanager.address
            master:18040
        
        
        
            yarn.resourcemanager.scheduler.address
            master:18030
        
        
        
            yarn.resourcemanager.webapp.address
            master:18088
        
        
        
            yarn.resourcemanager.resource-tracker.address
            master:18025
        
        
        
            yarn.resourcemanager.admin.address
            master:18141
        
        
        
            yarn.nodemanager.aux-services
            mapreduce_shuffle
        
        
        
            yarn.nodemanager.aux-services.mapreduce.shuffle.class
            org.apache.hadoop.mapred.ShuffleHandler
        
    

    ⑤配置hadoop-env.sh:指明 JAVA_HOME 位置

    CentOS7搭建Hadoop集群环境_第6张图片

    ⑥配置mapred-env.sh:指明JAVA_HOME 位置,同上。

    ⑦配置yarn-env.sh:指明JAVA_HOME 位置,同上。

    ⑧配置slaves:加入两个节点的名称。

    CentOS7搭建Hadoop集群环境_第7张图片

(6)将 master 主节点以上配置复制到 slave1、slave2 节点。

scp ~/.bash_profile hadoop@slave1:~/    #将.bash_profile文件复制到slave1
scp ~/.bash_profile hadoop@slave2:~/
​
ssh hadoop@slave1. ~/.bash_profile      #使slave1的.bash_profile文件生效
ssh hadoop@slave2. ~/.bash_profile
​
scp -r chadoop/ hadoop@slave1:~         #将chadoop文件夹内容复制到slave1:包括java与hadoop
scp -r chadoop/ hadoop@slave2:~ 

(7)在 master 主节点上格式化 hdfs 文件系统。

hdfs namenode -foramt

(8)关闭3台虚拟机的防火墙:需要root权限

systemctl stop firewalld        #关闭防火墙
systemctl disable firewalld     #禁止开机自启动
​
#关闭slave机器可通过ssh方式关闭,也可在slave主机关闭
#ssh slave1
#....关闭防火墙
#ssh slave2
#....关闭防火墙

(9)在 master 机器上启动 hadoop,并用 jps 检验 hadoop 进程。

  • master 主节点有 4 个:ResourceManager,Jps,NameNode,SecondaryNamenode

  • slave1 节点与 slave2 节点各有 3 个:NodeManager,DataNode,Jps

start-all.sh    #启动hadoop
jps             #查看hadoop节点信息
stop-all.sh     #关闭hadoop

CentOS7搭建Hadoop集群环境_第8张图片

CentOS7搭建Hadoop集群环境_第9张图片

 

以上,hadoop三节点(master、slave1、slave2)集群环境也搭建完毕。

 

问题1:为啥集群要关闭防火墙?

答:不关闭防火墙的话,集群之间操作容易出现错误。

问题2:关闭了防火墙,集群岂不是保障不了安全?

答:集群其实没什么安全性考虑的。因为都是内网搭建的,对外还有一个服务器的,那个服务器有防火墙,由它来访问内网集群,如果内网内开启防火墙,内网集群之间通信会出现很多问题。

你可能感兴趣的:(Hadoop)