Hadoop集群节点规划与搭建

搭建多节点hadoop集群

1. 主机规划

编号 主机 zookeeper namenode datanode journalnode resourcemanager
1 master1
2 master2
3 slave1
4 slave2

2. 关闭防火墙

  1. 查看防火墙状态: systemctl status firewalld.service

  2. 关闭防火墙: systemctl stop firewalld.service

  3. 禁用防火墙开机自启 : systemctl disable firewalld.service

3. 配置ssh密码登录

  1. 在四台机器上执行ssh-keygen -t rsa,会在当前用户目录下的 .ssh文件夹下生成公钥和私钥

  2. 将master2,slave1,slave2的 id_rsa.pub复制副本,发送给master1

    [hadoop@master2 ~]$ cp /root/.ssh/id_rsa.pub /root/.ssh/id_rsa.pub.m2
    [hadoop@master2 ~]$ scp /root/.ssh/id_rsa.pub.m2 master1:/root/.ssh 
    
  3. 在master1上将创建authorized_keys ,追加密钥并授权

    [hadoop@master2 ~]$ cat /root/.ssh/id_rsa.pub.* >> /root/.ssh/authorized_keys
    [hadoop@master2 ~]$ chmod 700 /root/.ssh/ 
    
  4. 将authorized_keys传输给master2, slave1 和 slave2(第一次传输需要输入密码)

  5. 登陆测试

    [hadoop@master ~]$ ssh slave1

4. 安装zookeeper

  1. 解压zookeeper

  2. 进入zookeeper目录,创建data和logs文件夹

  3. 进入刚创建的data目录下,新建myid文件,并写入数字 ‘1’

  4. 进入conf目录下,复制zoo_simple.cfg为zoo.cfg

  5. 修改zoo.cfg

    dataDir=${ZK_HOME}/data
    dataLogDir=${ZK_HOME}/logs
    
    server.1=master1:2888:3888
    server.2=master2:2888:3888
    server.3=slave1:2888:3888 
    
  6. 分发zookeeper到其他节点,并且修改各个节点的myid

5. 安装hadoop

  1. 修改core-site.xml

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/src/hadoop/tmp</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master1:2181,master2:2181,slave1:2181</value>
    </property>
    <property>
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>30000</value>
    </property>
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property> 
    
  2. 修改hdfs-site.xml

    <!--指定 hdfs 的 nameservice 为 mycluster,要和 core-site.xml 中的保持一致 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <!-- mycluster 下面有两个 NameNode,分别是 master1,master2 -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>master1,master2</value>
    </property>
    <!-- master 的 RPC 通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.master1</name>
        <value>master1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.master2</name>
        <value>master2:8020</value>
    </property>
    <!-- master 的 http 通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.master1</name>
        <value>master1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.master2</name>
        <value>master2:50070</value>
    </property>
    <!-- 指定 NameNode 的 edits 元数据的共享存储位置。也就是 JournalNode 列表,默认端口号是:8485 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://master1:8485;master2:8485;slave1:8485/mycluster</value>
    </property>
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
    <!-- 指定副本数 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <!-- 开启 NameNode 失败自动切换 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!-- 配置失败自动切换实现方式 -->
    <property>
     <name>dfs.client.failover.proxy.provider.mycluster</name>
     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
                sshfence
                shell(/bin/true)
        </value>
    </property>
    <!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/src/hadoop/tmp/dfs/journal</value>
    </property>
    <!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    <!-- 配置 sshfence 隔离机制超时时间 -->
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
    <!-- journalnode 集群之间通信的超时时间 -->
    <property>
        <name>dfs.qjournal.start-segment.timeout.ms</name>
        <value>60000</value>
    </property> 
    
  3. 修改mapred-site.xml

    <!-- 指定 mr 框架为 yarn 方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 指定 mapreduce jobhistory 地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master1:10020</value>
    </property>
    <!-- 任务历史服务器的 web 地址 -->
    <property> 
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master1:19888</value>
    </property> 
    
  4. 修改yarn-site.xml

    <!-- 开启 RM 高可用 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 指定 RM 的 cluster id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>
    <!-- 指定 RM 的名字 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 分别指定 RM 的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>master1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>master2</value>
    </property>
    <!-- 指定 zk 集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>master1:2181,master2:2181,slave1:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 启用自动恢复 -->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <!-- 制定 resourcemanager 的状态信息存储在 zookeeper 集群上 -->
    <property>
      <name>yarn.resourcemanager.store.class</name>
      <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property> 
    
  5. 修改slaves

    slave1
    slave2 
    

6. 启动集群(严格按照此步骤进行)

  1. 启动zookeeper集群
    zkServer.sh start

  2. 先启动四台机器的journalnode

    hadoop-daemons.sh start journalnode

  3. 格式化HDFS(必须关闭所有集群的防火墙)
    hdfs namenode -format

  4. 格式化ZKFC
    hdfs zkfc -formatZK

  5. 在主节点上启动dfs与yarn

    start-dfs.sh
    start-yarn.sh

  6. 同步主节点的元数据

    scp -r ${HADOOP_HOME}/tmp/dfs/name master2:${HADOOP_HOME}/tmp/dfs

  7. 在master2启动resourcemanager

    yarn-daemon.sh start resourcemanager

  8. 在master2启动namenode

    hadoop-daemon.sh start namenode

7. 查看节点情况

  1. 使用指令查看状态

    hdfs haadmin -getServiceState master1

    yarn rmadmin -getServiceState rm1

如有错误,欢迎私信纠正,谢谢支持!

posted @ 2022-11-16 18:05  杨业壮  阅读(136)  评论(0编辑  收藏  举报