高可用完全分布式搭建

高可用的完全分布式搭建

HA HDFS结构图

在这里插入图片描述

这种设计模式的特点:

①采用了两个namenode,一个对外提供服务,一个同步备份namenode元数据以待切换,防止发生异常,导致namenode挂掉。
②所有的datenode同时向两个NameNode汇报数据块信息。
③JN集群用于备份传递ANN的信息和文件
④两个NN,启动时一个会处于activity,一个会处于standby状态
⑤处于standby状态的节点,用于备份和完成edits.log文件的合并,并产生新的image,推送回处于actiity状态的NN

两种切换模式

①手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合
②自动切换:基于Zookeeper实现

Zookeeper自动切换方案

①ZooKeeper Failover Controller:监控NameNode健康状态
②并向Zookeeper注册NameNode
③NameNode挂掉后,ZKFC为NameNode竞争锁,获得ZKFC 锁的NameNode变为active

JN权值分配

选举规则:大于半数以上,则获得选举权

HA HDFS配置节点表

在这里插入图片描述

集群搭建步骤

配置免密登录

node01->node01  
node01->node02  
node01->node03 
node01->node04
node02->node01

配置所有节点的JDK

修改hdfs-site.xml配置文件

<property>
 		    <name>dfs.nameservices</name>
 		    <value>mycluster</value>
</property>
<property>
  			<name>dfs.ha.namenodes.mycluster</name>
 			 <value>nn1,nn2</value>
</property>
<property>
 			 <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  			<value>node01:8020</value>
</property>
<property>
 			 <name>dfs.namenode.rpc-address.mycluster.nn2</name>
 			 <value>node02:8020</value>
</property>
<property>
 			 <name>dfs.namenode.http-address.mycluster.nn1</name>
 			 <value>node01:50070</value>
</property>
<property>
			  <name>dfs.namenode.http-address.mycluster.nn2</name>
 			  <value>node02:50070</value>
</property>
<property>
 		 	  <name>dfs.namenode.shared.edits.dir</name>
 		      <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<property>
  			  <name>dfs.journalnode.edits.dir</name>
 			  <value>/var/sxt/hadoop/ha/jn</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</value>
</property>
<property>
  		  <name>dfs.ha.fencing.ssh.private-key-files</name>
  		  <value>/root/.ssh/id_rsa</value>
</property>
<property>
  		  <name>dfs.ha.automatic-failover.enabled</name>
   		  <value>true</value>
 </property>

修改core-site.xml配置文件

<property>
	 <name>fs.defaultFS</name>
 	 <value>hdfs://mycluster</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/var/abc/hadoop/cluster</value>
</property>
<property>
	<name>ha.zookeeper.quorum</name>
    <value>node02:2181,node03: 2181,node04:2181</value>
</property>

修改slaves配置文件

node02 
node03 
node04

将配置好的HDFS安装包拷贝到node02 node03 node04

格式化NameNode(创建目录以及文件)

① 在node01、node02、node03分别执行如下命令

hadoop-daemon.sh start journalnode

② 随机选择一台NameNode执行:

hdfs namenode -format
hadoop-daemon.sh start namenode

③ 另外一台NameNode节点执行:

hdfs namenode  -bootstrapStandby

格式化ZKFC

hdfs zkfc -formatZK

关闭所有节点上的进程

stop-dfs.sh

启动HDFS

start-dfs.sh

搭建zookeeper集群

1,解压

2,修改conf目录下的zoo_sample.cfg的名称,改为zoo.cfg

mv zoo_sample.cfg zoo.cfg

3,修改zoo.cfg

dataDir=/var/zfg/zookeeper
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888

4,在dataDir目录下创建一个myid文件,在这个文件中写上当前节点ID号
5,将配置好的zookeeper安装包拷贝到node03 node04
6,拷贝完毕后,在各自节点上创建myid号,ID号要依次递增

### 完全分布式 Hive 环境的搭建 #### 1. 系统准备 在开始之前,确保已经准备好以下条件: - 已经安装并配置好 Hadoop 集群,并能够正常运行 MapReduce 和 HDFS。 - Java JDK 已正确安装并设置环境变量 `JAVA_HOME`。 #### 2. 下载与解压 Hive 下载适合版本的 Hive 并将其解压缩到目标目录。例如: ```bash wget https://archive.apache.org/dist/hive/hive-2.3.4/apache-hive-2.3.4-bin.tar.gz tar -zxvf apache-hive-2.3.4-bin.tar.gz -C /usr/local/ ln -s /usr/local/apache-hive-2.3.4-bin /usr/local/hive ``` #### 3. 修改配置文件 ##### (1) **hive-site.xml** 创建或编辑 `hive-site.xml` 文件以完成必要的参数配置。此文件通常位于 `$HIVE_HOME/conf/` 路径下。以下是常见的配置项: | 参数名 | 描述 | |--------|------| | `javax.jdo.option.ConnectionURL` | 数据库连接 URL,用于存储元数据。例如:`jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false`[^1] | | `javax.jdo.option.ConnectionDriverName` | JDBC 驱动类名称,例如:`com.mysql.jdbc.Driver`[^1] | | `javax.jdo.option.ConnectionUserName` | 数据库用户名 | | `javax.jdo.option.ConnectionPassword` | 数据库密码 | 示例配置如下: ```xml <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://namenode:3306/metastore?createDatabaseIfNotExist=true&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive_user</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> </property> </configuration> ``` ##### (2) **hive-env.sh** 重命名模板文件并对其进行修改: ```bash mv $HIVE_HOME/conf/hive-env.sh.template $HIVE_HOME/conf/hive-env.sh vi $HIVE_HOME/conf/hive-env.sh ``` 在此文件中指定 Hadoop 的路径以及 JVM 堆内存大小等选项。例如: ```bash export HADOOP_HOME=/usr/local/hadoop export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HIVE_HEAPSIZE=1024 ``` #### 4. 初始化 Metastore Metastore 存储 Hive 表结构和其他元数据信息。初始化数据库前需确认 MySQL 或其他支持的关系型数据库已就绪。执行以下命令来初始化表结构: ```bash $HIVE_HOME/bin/schematool -dbType mysql -initSchema ``` #### 5. 测试 Hive 是否可用 通过 CLI 登录 Hive 并测试其功能是否正常工作: ```bash $HIVE_HOME/bin/hive ``` 如果一切顺利,则可以输入 SQL 查询语句验证集群状态。 --- ### 注意事项 - 如果需要动态调整某些参数,可以通过 `-hiveconf` 方式传递给 Hive 进程。例如增加 Reduce 数量时可使用: ```bash bin/hive -hiveconf mapred.reduce.tasks=10; ``` 这将临时覆盖默认值而不影响全局配置文件中的设定[^1]。 - 在完全分布式环境中,建议启用远程模式访问 MetaStore Server 及 WebHCat Service 提供 REST API 支持[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值