hadoop集群配置

作者: 一杭oneline | 来源:发表于2019-12-08 10:46 被阅读0次

    环境:hadoop 3.1.1
    jdk1.8
    centos7.5
    注意:hadoop3.1.1官方文档明确需要jdk1.7以上版本,但是jdk10以上的版本目录结构发生了变化,jre目录没有了,所以在第一次尝试jdk13时候好像没有启动,并不知道是配置的错误还是Hadoop不能用。
    centos 7.5 中自带了jdk是1.8版本的,但是由于不太方便,所以选择重新安装,在这个过程中涉及到jdk环境变量的设置的问题,在这篇文档中一并给与解答,由于自己也是初次配置Hadoop集群,有很大地方还不是很明白,加上官方文档写的很简单,在搭建过程中参照了清华大学出版社,王雪迎的《Hadoop构建数据仓库实践》中的部分内容,将搭建的过程整理如下:

    网络环境

    使用的虚拟机搭建两个节点,一个master一个slave1
    ip分别是192.168.56.101/24 192.168.56.102/24 static ip

    1.增加host

    分别在虚拟机/etc/hosts文件中增加

    192.168.56.101 master
    192.168.56.102 slave1
    

    加入后重新登录linux终端,可以看到shell提示发生变化

    [grid@master ~]$ 
    

    2.增加用户(在所有虚拟机上操作)

    [root@master grid]# useradd  -d /home/grid -m grid     #增加grid用户和目录
    [root@master grid]# usermod -a -G root          #加入root用户组
    [root@master grid]# echo XXXXXXX|passwd grid --stdin 
    

    3.配置java环境(在所有虚拟机上操作)

    下载jdk 本人下载的 jdk-8u231-linux-x64.tar.gz,使用root用户解压到/usr/local/目录下(根据个人情况定),而后修改/etc/profile文件(此文件开机系统自动读取,若改过之后立即生效可使用source命令)

    #####java configure#######20191206######
    export JAVA_HOME=/usr/local/jdk1.8.0_231
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ###这里一定确保上面的文件都有,而且目录准确
    
    [root@master grid]# source /etc/profile
    [root@master grid]# java -version
    java version "1.8.0_231"
    Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
    ###表示java环境配置已经生效
    

    4. 配置SSH免密登录(切换至grid用户)

    在master/slave1上

    ##进入grid用户home目录
    [grid@master grid]$ssh-keygen -t rsa
    #然后一路回车,使用空字符串生成密钥
    [grid@master grid]$ cd ~/.ssh/
    [grid@master grid]$ ssh-copy-id 192.168.56.101
    [grid@master grid]$ scp /home/grid/.ssh/authorized_keys 192.168.56.102:/home/grid/.ssh/
    #上述拷贝密钥对的过程在每台主机上都要进行,确保每台主机上都有其他的密钥对,能够正常通信
    [grid@master ~]$ ssh slave1
    Last login: Sat Dec  7 23:13:52 2019 from master
    

    Hadoop安装

    确保自己登陆在grid用户下

    1.准备工作

    #在/home/grid目录下
    [grid@master ~]$ tar -zxf hadoop-3.1.1.tar.gz
    #解压出来的目录将作为我们hadoop的主目录,请确保/home有足够的空间
    #建立工作目录,tmp、data 、hdfs和name
    [grid@master ~]$ cd hadoop-3.1.1/
    [grid@master ~]$ mkdir tmp hdfs hdfs/data hdfs/name
    #这几个目录的说明在后面的配置文件中进行说明
    

    2.修改配置文件

    配置文件主要以xml文件形式存在,这也是java环境常用的数据存储格式,包括oracle数据库,也可以导成xml格式进行数据存储,包括core-site.xml核心配置文件,hdfs-site.xml hdfs存储的配置文件,yarn-site.xml 资源管理的配置文件,mapred-site.xml文件(mapreduce),以及最后的workers文件(在文中提到的书中使用的Hadoop是v2版本的,他使用的是slaves文件)

    core-site.xml

    目录 :/home/grid/hadoop-3.1.1/etc/hadoop

    <configuration>
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.56.101:9000</value>
      </property>
      <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/grid/hadoop-3.1.1/tmp</value>
      </property>
      <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
      </property>
    </configuration>
    

    fs.defaultFS:默认文件系统名称,URL形式
    hadoop.tmp.dir:临时文件目录
    io.file.buffer.size:io文件缓冲区,是内存page(4K)大小的整数倍

    hdfs-site.xml

    <configuration>
     <!-- dfs.namenode.name.dir namenode存储fsimage文件,文件会存储在每一个节点的目录上 -->
      <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/grid/hadoop-3.1.1/hdfs/name</value>
      </property>
    <!-- dfs.datanode.data.dir存储数据块,必须创建文件夹  -->
      <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/grid/hadoop-3.1.1/hdfs/data</value>
      </property>
    <!-- dfs.replication重复的份数  -->
      <property>
        <name>dfs.replication</name>
        <value>2</value>
      </property>
    <!-- dfs.namenode.secondary.http-address   secondarynamenode的服务地址,这个只有一个namenode在本机上配置,端口不一样,若有多个,填写另一个的地址-->
      <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>192.168.56.101:9001</value>
      </property>
    <!-- dfs.namenode.servicerpc-address HDFS通信的RPC地址,改参数必须设置,如果设置该值,备份节点、数据节点和其他服务将会连接到指定的位置-->
      <property>
        <name>dfs.namenode.servicerpc-address</name>
        <value>192.168.56.101:10000</value>
      </property>
    <!-- dfs.webhdfs.enabled 这个就是开启webhdfs功能-->
      <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
      </property>
    </configuration>
    

    yarn-site.xml

    <configuration>
    <!-- yarn.nodemanager.aux-services Nodemanage上的附属服务,需要配置mapreduce_shuffle才能运行mapreduce-->
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
      </property>
      <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
      </property>
    <!-- yarn.resourcemanager.address resourcemanager的地址,客户端向这个地址发送命令,提交应用程序和杀死应用程序-->
      <property>
        <name>yarn.resourcemanager.address</name>
        <value>192.168.56.101:8032</value>
      </property>
    <!-- scheduler的地址,客户端向这个地址发送命令,申请资源/释放资源-->
      <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>192.168.56.101:8030</value>
      </property>
    <!-- tracker的地址,客户端向这个地址发送命令,汇报心跳,领取任务-->
      <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>192.168.56.101:8031</value>
      </property>
    <!-- admin的地址,管理员通过这个地址向resourcemanager发送管理指令-->
      <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>192.168.56.101:8033</value>
      </property>
    <!-- webapp的地址,用户通过这个地址查看集群状态-->
      <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>192.168.56.101:8088</value>
      </property>
    <!-- NodeManager总的可用物理内存,不能小于1024-->
      <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>1024</value>
    </property>
    </configuration>
    

    mapred-site.xml

    <configuration>
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
      </property>
      <property>
        <name>mapreduce.jobhistory.address</name>
        <value>192.168.56.101:10020</value>
      </property>
      <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>192.168.56.101:19888</value>
      </property>
    </configuration>
    

    workers

    slave1
    #有几个slave写几个
    

    hadoop-env.sh

    ##增加,就是java环境的
    export JAVA_HOME=/usr/local/jdk1.8.0_231
    

    yarn-env.sh

    ##增加,就是java环境的
    export JAVA_HOME=/usr/local/jdk1.8.0_231
    

    至此,hadoop所有的配置文件完成,将hadoop这个包复制到每一个客户端上

    /etc/profile最关键的一步,所有的主机都要执行

    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
    export HADOOP_HOME=/home/grid/hadoop-3.1.1
    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_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
    export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
    
    source /etc/profile
    

    初始化及运行 master用户

    [grid@master hadoop]$ hdfs namenode -format
    [grid@master hadoop]$ start-dfs.sh
    [grid@master hadoop]$ start-yarn.sh 
    
    image.png

    检验

    [grid@master hadoop]$ jps
    5409 ResourceManager
    4966 NameNode
    8969 Jps
    5164 SecondaryNameNode
    
    [grid@slave1 ~]$ jps
    2579 NodeManager
    4713 Jps
    2461 DataNode
    

    问题解决

    1.关于java error:priority的问题

    因为之前安装过jdk13对相关包进行编译,有些内容在安装jdk8后出现错误,就是版本不一致的问题,需要重新将namenode上的配置文件进行复制。

    2.关于多次format以及系统重启后无法启动datanode,或者datanode启动后启动yarn后自动停掉

    自己排查的是因为HDFS文件clusterID对应不上,可以登录192.168.56.101:9870,检查clusterID,而后对应datanode中的/home/grid/hadoop-3.1.1/hdfs/data/current/VERSION文件中的

    clusterID=CID-709cdb20-5a87-4231-bdeb-2bf0911bb8c0
    
    image.png

    相关文章

      网友评论

        本文标题:hadoop集群配置

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