Hadoop HA集群部署

本文档详细介绍了如何在3台CentOS机器上部署Hadoop HA集群。首先,进行了环境准备,包括IP与hostname绑定、SSH信任设置及JDK安装。接着,部署了Zookeeper,包括安装、配置及启动。最后,详细讲述了Hadoop的安装过程,包括配置Hadoop环境变量、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml,以及slaves文件,启动JournalNode、格式化HDFS并同步元数据,最后启动HDFS和YARN服务,确保集群成功运行。
摘要由CSDN通过智能技术生成

-环境准备

  • 3台centos机器

  •  分别为master1和master2,slave
     master1和master2分别作为active nn和standby nn 
     slave为从节点
     假设ip分别为
     master1 192.168.0.1
     master2 192.168.0.2
     slave      192.168.0.3
    
  • ip和hostname绑定

  •  三台机子分别修改/etc/hosts文件添加如下三行
       192.168.0.1 	master在这里插入代码片1
       192.168.0.2 	master2
       192.168.0.3 	slave
    
  • 建立ssh信任

  •  3台机器分别执行ssh-keygen -t rsa命令后一路回车
     执行完成后会在当前用户的根目录添加一个隐藏文件.ssh
     在.ssh文件下创建authorized_keys文件。
     分别将各自的.ssh文件加下的id_rsa.pub文件追加到自己和其它机器的authorized_keys文件中。
     修改文件的权限,
     chmod  666  authorized_keys
     通过ssh host确认ssh信任成功。
     ssh hostname 执行无需输入密码即为成功。
    
  • jdk安装

     解压jdk
     配置环境变量:
     	vim /etc/profile 或当前用的文件 ~/.bash_profile
     	在文件末尾添加如下两行
     	export JAVA_HOME= Java文件的根目录绝对路径
     	export PATH=\$PATH/bin:\$PATH
    
     执行source /etc/profile 使环境变量生效(如果配置的是.bash_profile文件则执行source ~/.bash_profile)
     执行java -version 能够看到版本号即为成功。
    

    修改用户组
    chown -R user:user /usr/java/*

  • zookeeper安装

  • 解压

  •  tar -zxvf zookeeper-3.4.5-cdh5.15.1.tar.gz -C /home/user/app/
    
  •  cd ~/app
    
  • 创建软连接

  •  ln -s zookeeper-3.4.5-cdh5.15.1 zookeeper
    
  • 配置环境变量

  •  vim ~/.bash_profile
    
  •  添加如下两行
    
  •  export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper
     export PATH=$ZOOKEEPER_HOME/bin:$PATH		
    
  • 拷贝一份zoo_sample.cfg 到 zoo.cfg 并编辑

  •  vi zoo.cfg
    
  • 修改dataDir路径

  •  dataDir=/home/user/data/zookeeper 		#根据自己环境设置
    
  • 添加server地址

  •  server.1=master1.2888:3888
    
  •  server.2=master2.2888:3888
    
  •  server.3=master3.2888.3888
    
  • 将zoo.cfg配置文件分别拷贝到其他机器上

  •  scp zoo.cfg master2:/$ZOOKEEPER_HOME/conf/
     scp zoo.cfg master2:/$ZOOKEEPER_HOME/conf/
    
  • 创建dataDir

  • 启动zookeeper使用jps命令检查

  • ./zkServer.sh start

  • jps
    在这里插入图片描述

  • 存在即为成功

  • 三台都要启动

  • 安装hadoop

    配置master1机器
    先解压hadoop安装包建立软连接,步骤同zookeeper和和jdk
    进入hadoop的etc/hadoop文件夹下
    修改hadoop-env.sh文件
    export JAVA_HOME=/usr/java/jdk8 #自己的java安装路径

  • 配置core-site.xml

  •  <?xml version="1.0" encoding="UTF-8"?>
    
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> fs.defaultFS hdfs://hadoopna fs.trash.checkpoint.interval 0 fs.trash.interval 1440
     <!--指定hadoop临时目录, hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果hdfs-site.xml中不配 置namenode和datanode的存放位置,默认就放在这>个路径中 -->
    <property>   
            <name>hadoop.tmp.dir</name>
            <value>/home/hadoop/tmp/hadoop</value>
    </property>

     <!-- 指定zookeeper地址 -->
    <property>
            <name>ha.zookeeper.quorum</name>
            <value>MASTER1:2181,MASTER2:2181,SLAVE78:2181</value>
    </property>
     <!--指定ZooKeeper超时间隔,单位毫秒 -->
    <property>
            <name>ha.zookeeper.session-timeout.ms</name>
            <value>2000</value>
    </property>
    <property>
       <name>hadoop.proxyuser.hadoop.hosts</name>
       <value>*</value> 
    </property> 
    <property> 
        <name>hadoop.proxyuser.hadoop.groups</name> 
        <value>*</value> 
   </property> 


  <property>
	  <name>io.compression.codecs</name>
	  <value>org.apache.hadoop.io.compress.GzipCodec,
		org.apache.hadoop.io.compress.DefaultCodec,
		org.apache.hadoop.io.compress.BZip2Codec,
		org.apache.hadoop.io.compress.SnappyCodec
	  </value>
  </property>

-配置hdfs-site.xml文件

	<?xml version="1.0" encoding="UTF-8"?>
	<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
	<configuration>
	<!--HDFS超级用户 -->
		<property>
			<name>dfs.permissions.superusergroup</name>
			<value>zpark</value>
		</property>
	
		<!--开启web hdfs -->
		<property>
			<name>dfs.webhdfs.enabled</name>
			<value>true</value>
		</property>
		<property>
			<name>dfs.namenode.name.dir</name>
			<value>/home/zpark/data/dfs/name</value>
			<description> namenode 存放name table(fsimage)本地目录(需要修改)</description>
		</property>
		<property>
			<name>dfs.namenode.edits.dir</name>
			<value>${dfs.namenode.name.dir}</value>
			<description>namenode粗放 transaction file(edits)本地目录(需要修改)</description>
		</property>
		<property>
			<name>dfs.datanode.data.dir</name>
			<value>/home/zpark/data/dfs/data</value>
			<description>datanode存放block本地目录(需要修改)</description>
		</property>
		<property>
			<name>dfs.replication</name>
			<value>3</value>
		</property>
		<!-- 块大小128M (默认128M) -->
		<property>
			<name>dfs.blocksize</name>
			<value>134217728</value>
		</property>
		<!--======================================================================= -->
		<!--HDFS高可用配置 -->
		<!--指定hdfs的nameservice为ruozeclusterg7,需要和core-site.xml中的保持一致 -->
		<property>
			<name>dfs.nameservices</name>
			<value>hadoopha</value>
		</property>
		<property>
			<!--设置NameNode IDs 此版本最大只支持两个NameNode -->
			<name>dfs.ha.namenodes.hadoopha</name>
			<value>nn1,nn2</value>
		</property>
	
		<!-- Hdfs HA: dfs.namenode.rpc-address.[nameservice ID] rpc 通信地址 -->
		<property>
			<name>dfs.namenode.rpc-address.hadoopha.nn1</name>
			<value>MASTER1:8020</value>
		</property>
		<property>
			<name>dfs.namenode.rpc-address.hadoopha.nn2</name>
			<value>MASTER2:8020</value>
		</property>
	
		<!-- Hdfs HA: dfs.namenode.http-address.[nameservice ID] http 通信地址 -->
		<property>
			<name>dfs.namenode.http-address.hadoopha.nn1</name>
			<value>MASTER1:50070</value>
		</property>
		<property>
			<name>dfs.namenode.http-address.hadoopha.nn2</name>
			<value>MASTER2:50070</value>
		</property>
	
		<!--==================Namenode editlog同步 ============================================ -->
		<!--保证数据恢复 -->
		<property>
			<name>dfs.journalnode.http-address</name>
			<value>0.0.0.0:8480</value>
		</property>
		<property>
			<name>dfs.journalnode.rpc-address</name>
			<value>0.0.0.0:8485</value>
		</property>
		<property>
			<!--设置JournalNode服务器地址,QuorumJournalManager 用于存储editlog -->
			<!--格式:qjournal://<host1:port1>;<host2:port2>;<host3:port3>/<journalId> 端口同journalnode.rpc-address -->
			<name>dfs.namenode.shared.edits.dir</name>
			<value>qjournal://MASTER1:8485;MASTER2:8485;SLAVE78:8485/hadoopha</value>
		</property>
	
		<property>
			<!--JournalNode存放数据地址 -->
			<name>dfs.journalnode.edits.dir</name>
			<value>/home/zpark/data/dfs/jn</value>
		</property>
		<!--==================DataNode editlog同步 ============================================ -->
		<property>
			<!--DataNode,Client连接Namenode识别选择Active NameNode策略 -->
	                             <!-- 配置失败自动切换实现方式 -->
			<name>dfs.client.failover.proxy.provider.hadoopha</name>
			<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
		</property>
		<!--==================Namenode fencing:=============================================== -->
		<!--Failover后防止停掉的Namenode启动,造成两个服务 -->
		<property>
			<name>dfs.ha.fencing.methods</name>
			<value>sshfence</value>
		</property>
		<property>
			<name>dfs.ha.fencing.ssh.private-key-files</name>
			<value>/home/zpark/.ssh/id_rsa</value>
		</property>
		<property>
			<!--多少milliseconds 认为fencing失败 -->
			<name>dfs.ha.fencing.ssh.connect-timeout</name>
			<value>30000</value>
		</property>
	
		<!--==================NameNode auto failover base ZKFC and Zookeeper====================== -->
		<!--开启基于Zookeeper  -->
		<property>
			<name>dfs.ha.automatic-failover.enabled</name>
			<value>true</value>
		</property>
		<!--动态许可datanode连接namenode列表 -->
		 <property>
		   <name>dfs.hosts</name>
		   <value>/home/zpark/app/hadoop/etc/hadoop/slaves</value>
		 </property>
	</configuration>
  • 配置mapred-site.xml文件
  •  <?xml version="1.0" encoding="UTF-8"?>
     <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
     <configuration>
     	<!-- 配置 MapReduce Applications -->
     	<property>
     		<name>mapreduce.framework.name</name>
     		<value>yarn</value>
     	</property>
     	<!-- JobHistory Server ============================================================== -->
     	<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
     	<property>
     		<name>mapreduce.jobhistory.address</name>
     		<value>ruozedata001:10020</value>
     	</property>
     	<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
     	<property>
     		<name>mapreduce.jobhistory.webapp.address</name>
     		<value>ruozedata001:19888</value>
     	</property>
     
     <!-- 配置 Map段输出的压缩,snappy-->
       <property>
           <name>mapreduce.map.output.compress</name> 
           <value>true</value>
       </property>
                   
       <property>
           <name>mapreduce.map.output.compress.codec</name> 
           <value>org.apache.hadoop.io.compress.SnappyCodec</value>
        </property>
     
     </configuration>
    

配置yarn-site.xml文件

	<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler yarn.nodemanager.localizer.address 0.0.0.0:23344 Address where the localizer IPC is. yarn.nodemanager.webapp.address 0.0.0.0:23999 NM Webapp address.
<!-- HA 配置 =============================================================== -->
<!-- Resource Manager Configs -->
<property>
	<name>yarn.resourcemanager.connect.retry-interval.ms</name>
	<value>2000</value>
</property>
<property>
	<name>yarn.resourcemanager.ha.enabled</name>
	<value>true</value>
</property>
<property>
	<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>
<!-- 使嵌入式自动故障转移。HA环境启动,与 ZKRMStateStore 配合 处理fencing -->
<property>
	<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
	<value>true</value>
</property>
<!-- 集群名称,确保HA选举时对应的集群 -->
<property>
	<name>yarn.resourcemanager.cluster-id</name>
	<value>yarn-cluster</value>
</property>
<property>
	<name>yarn.resourcemanager.ha.rm-ids</name>
	<value>rm1,rm2</value>
</property>


<!--这里RM主备结点需要单独指定,(可选)
<property>
	 <name>yarn.resourcemanager.ha.id</name>
	 <value>rm2</value>
 </property>
 -->

<property>
	<name>yarn.resourcemanager.scheduler.class</name>
	<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
	<name>yarn.resourcemanager.recovery.enabled</name>
	<value>true</value>
</property>
<property>
	<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
	<value>5000</value>
</property>
<!-- ZKRMStateStore 配置 -->
<property>
	<name>yarn.resourcemanager.store.class</name>
	<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
	<name>yarn.resourcemanager.zk-address</name>
	<value>MASTER1:2181,MASTER2:2181,SLAVE78:2181</value>
</property>
<property>
	<name>yarn.resourcemanager.zk.state-store.address</name>
	<value>MASTER1:2181,MASTER2:2181,SLAVE78:2181</value>
</property>
<!-- Client访问RM的RPC地址 (applications manager interface) -->
<property>
	<name>yarn.resourcemanager.address.rm1</name>
	<value>MASTER1:23140</value>
</property>
<property>
	<name>yarn.resourcemanager.address.rm2</name>
	<value>MASTER2:23140</value>
</property>
<!-- AM访问RM的RPC地址(scheduler interface) -->
<property>
	<name>yarn.resourcemanager.scheduler.address.rm1</name>
	<value>MASTER1:23130</value>
</property>
<property>
	<name>yarn.resourcemanager.scheduler.address.rm2</name>
	<value>MASTER2:23130</value>
</property>
<!-- RM admin interface -->
<property>
	<name>yarn.resourcemanager.admin.address.rm1</name>
	<value>MASTER1:23141</value>
</property>
<property>
	<name>yarn.resourcemanager.admin.address.rm2</name>
	<value>MASTER2:23141</value>
</property>
<!--NM访问RM的RPC端口 -->
<property>
	<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
	<value>MASTER1:23125</value>
</property>
<property>
	<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
	<value>MASTER2:23125</value>
</property>
<!-- RM web application 地址 -->
<property>
	<name>yarn.resourcemanager.webapp.address.rm1</name>
	<value>MASTER1:8088</value>
</property>
<property>
	<name>yarn.resourcemanager.webapp.address.rm2</name>
	<value>MASTER2:8088</value>
</property>
<property>
	<name>yarn.resourcemanager.webapp.https.address.rm1</name>
	<value>MASTER1:23189</value>
</property>
<property>
	<name>yarn.resourcemanager.webapp.https.address.rm2</name>
	<value>MASTER2:23189</value>
</property>



<property>
   <name>yarn.log-aggregation-enable</name>
   <value>true</value>
</property>
<property>
	 <name>yarn.log.server.url</name>
	 <value>http://MASTER1:19888/jobhistory/logs</value>
</property>


<property>
	<name>yarn.nodemanager.resource.memory-mb</name>
	<value>2048</value>
</property>
<property>
	<name>yarn.scheduler.minimum-allocation-mb</name>
	<value>1024</value>
	<discription>单个任务可申请最少内存,默认1024MB</discription>
 </property>


  <property>
	<name>yarn.scheduler.maximum-allocation-mb</name>
	<value>2048</value>
	<discription>单个任务可申请最大内存,默认8192MB</discription>
  </property>

   <property>
       <name>yarn.nodemanager.resource.cpu-vcores</name>
       <value>2</value>
    </property>

</configuration>
  • 配置slaves文件

    MASTER1
    MASTER2
    SLAVE

  • 启动JournalNode

  •  三台机器分别执行hadoop-daemon.sh start journalnode
    

在这里插入图片描述

  • 启动集群前需要格式化
  •  hadoop namenode -format
    
  • 格式化后需要手动同步元数据
  •  scp data MASTER2:~/  		#data为hdfs-site.xml文件中配置的hdfs文件路径
    
  • 初始化zkfc
  •  hdfs zkfc -formatZK
    
  • 启动start-dfs.sh
  •  ./start-dfs.sh
    
  • 启动yarn
  •  ./start-yarn.sh
    
  • 查看是否部署成功
  • 在这里插入图片描述
主要内容:本文详细介绍了一种QRBiLSTM(分位数回归双向长短期记忆网络)的时间序列区间预测方法。首先介绍了项目背景以及模型的优势,比如能够有效利用双向的信息,并对未来的趋势上限和下限做出估计。接着从数据生成出发讲述了具体的代码操作过程:数据预处理,搭建模型,进行训练,并最终可视化预测结果与计算分位数回归的边界线。提供的示例代码可以完全运行并且包含了数据生成环节,便于新手快速上手,深入学习。此外还指出了模型未来发展的方向,例如加入额外的输入特性和改善超参数配置等途径提高模型的表现。文中强调了时间序列的标准化和平稳检验,在样本划分阶段需要按时间序列顺序进行划分,并在训练阶段采取合适的手段预防过度拟合发生。 适合人群:对于希望学习和应用双向长短时记忆网络解决时序数据预测的初学者和具有一定基础的研究人员。尤其适用于有金融数据分析需求、需要做多一步或多步预测任务的从业者。 使用场景及目标:应用于金融市场波动预报、天气状况变化预测或是物流管理等多个领域内的决策支持。主要目的在于不仅能够提供精确的数值预计还能描绘出相应的区间概率图以增强结论置信程度。 补充说明:本教程通过一个由正弦信号加白噪构造而成的简单实例来指导大家理解和执行QRBiLSTM流程的所有关键步骤,这既方便于初学者跟踪学习,又有利于专业人士作为现有系统的补充参考工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值