首页 > 其他分享 >hadoop3.0高可用分布式集群安装

hadoop3.0高可用分布式集群安装

时间:2024-03-31 22:59:09浏览次数:23  
标签:usr zookeeper hadoop dfs hadoop3.0 集群 yarn local 分布式

hadoop高可用,依赖于zookeeper。

用于生产环境, 企业部署必须的模式. 

1. 部署环境规划

1.1. 虚拟机及hadoop角色划分

主机名称

namenode

datanode

resourcemanager

nodemanager

zkfc

journalnode

zookeeper

master

slave1

slave2

1.2. 软件版本

java

jdk-1.8

Hadoop

3.3.0

zookeeper

3.7.0

1.3. 数据目录规划

名称

目录

namenode目录

/data/hadoop/dfs/name

datanode目录

/data/hadoop/dfs/data

hadoop临时目录

/data/hadoop/tmp

zookeeper数据目录

/data/zookeeper/data

2. 免密登录

3. 安装jdk

4. zookeeper安装

4.1. 解压

解压到目录/usr/local/ 下

tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local/zookeeper

4.2. 环境配置

cat>>/etc/profile <<EOF
export ZOOKEEPER_HOME=/usr/local/zookeeper/apache-zookeeper-3.7.0-bin
export PATH=\$ZOOKEEPER_HOME/bin:\$PATH
EOF
source /etc/profile
#创建数据/日志目录
mkdir -pv /data/zookeeper/{data,log} 

4.3. 修改配置文件

cd /usr/local/zookeeper/apache-zookeeper-3.7.0-bin/conf/
cp zoo_sample.cfg zoo.cfg

修改zoo.cfg配置文件

dataDir=/data/zookeeper/data/
dataLogDir=/data/zookeeper/log/
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

分发到slave1,slave2节点

scp zoo.cfg slave1:/usr/local/zookeeper/apache-zookeeper-3.7.0-bin/conf/
scp zoo.cfg slave2:/usr/local/zookeeper/apache-zookeeper-3.7.0-bin/conf/

4.4. 创建myid

根据服务器对应的数字,配置相应的myid,master配置1,slave1配置2,slave2配置3

#各节点配置,根据server.1就是1
echo 1 > /data/zookeeper/data/myid

4.5. 启动zookeeper

各个节点启动

zkServer.sh start
zkServer.sh status

5. hadoop安装

5.1. 解压

tar -zxvf hadoop-3.3.0.tar.gz -C /usr/local/

5.2. 环境配置

环境配置(所有节点都执行),root用户执行

chown -R hadoop:hadoop /usr/local/hadoop-3.3.0
cat>>/etc/profile <<EOF
export HADOOP_HOME=/usr/local/hadoop-3.3.0
export PATH=\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin:\$PATH
EOF
source /etc/profile

5.3. 修改配置文件

5.3.1. hadoop-env.sh
cd $HADOOP_HOME/etc/hadoop
vi hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_311
5.3.2. core-site.xml
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://mycluster/</value>
          <description>自定义的集群名称</description>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/data/hadoop/tmp</value>
        <description>namenode上本地的hadoop临时文件夹</description>
        </property>
    
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
        <description>指定zookeeper地址</description>
    </property>
    <property>
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>1000</value>
        <description>hadoop链接zookeeper的超时时长设置ms</description>
    </property>
</configuration>
5.3.3. hdfs-site.xml
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        <description>Hadoop的备份系数是指每个block在hadoop集群中有几份,系数越高,冗余性越好,占用存储也越多</description>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/data/hadoop/dfs/name</value>
        <description>namenode上存储hdfs名字空间元数据 </description>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/data/hadoop/dfs/data</value>
        <description>datanode上数据块的物理存储位置</description>
        </property>
        <property>
                <name>dfs.webhdfs.enabled</name>
                <value>true</value>
        </property>
    <!--指定hdfs的nameservice为myha01,需要和core-site.xml中的保持一致
                 dfs.ha.namenodes.[nameservice id]为在nameservice中的每一个NameNode设置唯一标示符。
        配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。
        例如,如果使用"myha01"作为nameservice ID,并且使用"nn1"和"nn2"作为NameNodes标示符
    -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
 
    <!-- myha01下面有两个NameNode,分别是nn1,nn2 -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
 
    <!-- nn1的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>master:9000</value>
    </property>
 
    <!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>master:50070</value>
    </property>
 
    <!-- nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>slave1:9000</value>
    </property>
 
    <!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>slave1:50070</value>
    </property>
 
    <!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表
                 该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
        journalId推荐使用nameservice,默认端口号是:8485 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
    </property>
 
    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/data/hadoop/data/journaldata</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>
 
    <!-- 使用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>
 
    <property>
        <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
        <value>60000</value>
    </property>
</configuration>
注意 mycluster  所有地方都要一样
5.3.4. mapred-site.xml
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        <description>The runtime framework for executing MapReduce jobs. Can be one of local, classic or yarn.</description>
            <final>true</final>
        </property>
        <property>
                <name>mapreduce.jobtracker.http.address</name>
                <value>master:50030</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>
        <property>
                <name>mapred.job.tracker</name>
                <value>http://master:9001</value>
        </property>
</configuration>
5.3.5. yarn-site.xml
<configuration>
       <!-- 开启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>slave1</value>
    </property>
 
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>slave2</value>
    </property>
 
    <!-- 指定zk集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
 
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</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>
 
    <!-- 启用自动恢复 -->
    <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.application.classpath</name>       
          <value>/usr/local/hadoop-3.3.0/etc/hadoop:/usr/local/hadoop-3.3.0/share/hadoop/common/lib/*:/usr/local/hadoop-3.3.0/share/hadoop/common/*:/usr/local/hadoop-3.3.0/share/hadoop/hdfs:/usr/local/hadoop-3.3.0/share/hadoop/hdfs/lib/*:/usr/local/hadoop-3.3.0/share/hadoop/hdfs/*:/usr/local/hadoop-3.3.0/share/hadoop/mapreduce/*:/usr/local/hadoop-3.3.0/share/hadoop/yarn:/usr/local/hadoop-3.3.0/share/hadoop/yarn/lib/*:/usr/local/hadoop-3.3.0/share/hadoop/yarn/*</value>
       </property>
</configuration>
5.3.6. workers

vim workers

master
slave1
slave2

5.4. 分发到其他服务器

scp -r /usr/local/hadoop-3.3.0/ slave1:/usr/local/
scp -r /usr/local/hadoop-3.3.0/ slave2:/usr/local/

6. 启动集群

以下顺序不能错

6.1. 启动journalnode(所有节点)

hadoop-daemon.sh start journalnode

6.2. 格式化namenode(master)

hadoop namenode -format

6.3. 同步元数据

scp -r /data/hadoop/dfs/name/current/ root@slave1:/data/hadoop/dfs/name/

6.4. 格式化zkfc(master)

hdfs zkfc -formatZK

6.5. 启动HDFS(master)

start-yarn.sh

6.6. 查看各主节点状态hdfs/yarn

hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2

7. 查看页面

hdfs:http://master:9870

接付费咨询,调bug, 10元一次。+v:644789108

标签:usr,zookeeper,hadoop,dfs,hadoop3.0,集群,yarn,local,分布式
From: https://blog.csdn.net/weijiqian/article/details/137157513

相关文章

  • Springboot + redis分布式锁
    1.引入redis和redisson<!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!......
  • 二进制部署zookeeper集群
    zookeepereks-zk-kafka00110.0.0.41eks-zk-kafka00210.0.0.42eks-zk-kafka00310.0.0.43初始化单机环境#关闭防火墙systemctldisable--nowfirewalldsystemctldisable--nowdnsmasqsystemctldisable--nowNetworkManager#关闭selinuxsetenforce0s......
  • redis集群
    redis主从复制主要解决单机机器故障,容量瓶颈等问题主从复制作用:1可以为redis提供多个副本,一个master可以有多个slave,一个slave只能由一个master实现方法:1通过slaveof命令  异步执行复制过程在从节点执行> slav......
  • 【VMware vSAN】配置vSAN ESA超融合集群及如何正确删除vSAN集群。
    vSANExpressStorageArchitecture(ESA)是vSAN中一种可选的替代架构,旨在以全新的效率、可扩展性和性能来处理和存储数据。此架构经过优化,可充分利用最新硬件的全部功能。它在vSAN8中发布,并在vSAN8U1和U2中进行了增强,可以在创建群集时选择它。vSAN中的ESA是所有早期版本的......
  • 利用Docker搭建多容器spark 和hadoop集群
    Docker搭建hadoop和spark集群本次集群的配置如下Docker25.0.3JDK1.8Hadoop3.1.2Hive3.1.2mysql8.0.1mysql-connector-java-8.0.1.jarhive_jdbc_2.5.15.1040拉取docker镜像,初始化hadoop集群拉取docker镜像,该镜像为ubuntu:22.04,已经安装好了hadoopdockerpull......
  • 中间件 ZK分布式专题与Dubbo微服务入门 6-5 同步异步删除zk节点
    0课程地址https://coding.imooc.com/lesson/201.html#mid=12721 1重点关注1.1本节内容javaapi客户端删除节点,包含同步修改和异步修改,只做了异步,同步不通用(因为没有回调函数,不知道是否删除成功)也可以参照视频看下 1.2javaapi删除节点......
  • 中间件 ZK分布式专题与Dubbo微服务入门 6-4 修改zk节点数据
    0课程地址https://coding.imooc.com/lesson/201.html#mid=12720 1重点关注1.1本节内容javaapi客户端修改节点,只做了同步修改,异步修改方式如1.3,可以参考6-3异步新增 1.2javaapi修改节点同步修改/***参数:......
  • 探索分布式人工智能:多节点合作引领智能革命
    引言:随着人工智能(AI)技术的不断发展,分布式人工智能作为一种新兴的技术模式正逐渐崭露头角。它通过多个节点之间的协作与通信,将数据和计算资源分散在多个地方,从而实现更加灵活、高效的智能计算。本文将深入探讨分布式人工智能的概念、技术原理以及在各个领域的应用,展望其在智能革命......
  • 中间件 ZK分布式专题与Dubbo微服务入门 6-3 同步异步创建zk节点
    0课程地址https://coding.imooc.com/lesson/201.html#mid=12719 1重点关注1.1本节内容javaapi客户端新增临时节点和永久节点 1.2javaapi新增节点同步调用/***同步或者异步创建节点,都不支持子节点的递归......
  • 初识分布式事务
    本地事务本地事务,也就是传统的单机事务。在传统数据库事务中,必须要满足四个原则:分布式事务分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务,例如:跨数据源的分布式事务跨服务的分布式事务综合情况在数据库水平拆分、服务垂直拆分之后,一个业务操作通常要跨多......