Hadoop QJM HA

集群环境介绍

CentOS release 6.4 (Final)
jdk 1.7.0_67 (默认已安装)

hadoop 拓扑划分(3节点):

192.168.2.53192.168.2.54192.168.2.55
NameNodeNameNode
DataNodeDataNodeDataNode
NodeManagerNodeManagerNodeManager
ResourceManagerResourceManagerResourceManager
JournalNodeJournalNodeJournalNode
ZKFCZKFC

/etc/hosts 文件配置如下 ;

iphostname
192.168.2.53hadoopnode1
192.168.2.54hadoopnode2
192.168.2.55hadoopnode3

**/opt/app/hadoop-2.5.0/etc/hadoop/hadoop-env.sh ** 配置JavaHome

Local(StandAlone)单机模式 hadoopnode1

安装目录为: /opt/app

//从apache 官网下载hadoop,这里选择2.5.0版本
// 解压安装包到指定目录
2. tar -zxvf  hadoop-2.5.0.tar.gz -C /opt/app
// 创建input目录用于存储输入数据文件
3. mkdir input
// 运行hadoop jar 命令
// 将input文件下面的文件中包含 'dfs[a-z.]+' 的字符串给输出到output 文件夹中
4. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar grep input output 'dfs[a-z.]+'
// 计算结果在/opt/app/hadoop-2.5.0/output目录下 , _SUCCESS为结果校验文件
5. cat /opt/app/hadoop-2.5.0/output/part-r-00000

命令解释

bin/hadoop hadoop 命令
jar 这个命令在jar包里面
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar 具体位置
grep grep 函数
input grep 函数的目标文件夹
output grep 函数结果的输出文件夹
‘dfs[a-z.]+’ grep 函数的匹配正则条件

伪分布式模式(hadoopnode1)

etc/hadoop/core-site.xml 配置

    // 默认HDFS的老大 namenode的地址与通信端口 
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>

etc/hadoop/hdfs-site.xml 配置

    // HDFS的每个Block的副本数 
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

本地运行Mapreduce Job

格式化namenode ,一般配置在core-site.xml 中 hadoop.tmp.dir属性,也可以单独配置dfs.namenode.name.dir 存放fsimage 和edits

  1. bin/hdfs namenode -format
    在上述配置dir下初始化生成fsimage文件 ,edits文件会在hdfs启动之后生成

  2. sbin/start-dfs.sh
    启动 NameNode daemon and DataNode daemon and SecondaryNameNode

  3. http://hadoopnode1:50070/ 通过web 访问hdfs namenode 情况

  4. bin/hdfs dfs -mkdir input
    bin/hdfs dfs -put etc/hadoop/*.xml input
    hdfs上创建input目录,作为mapreduce输入数据
    5.bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input /output
    /input : wordcount 数据文件
    /output : wordcount 结果输出文件 (不能事先存在)

  5. bin/hdfs dfs -cat output/*
    查看生成wordcount结果

  6. sbin/stop-dfs.sh
    停止hdfs相关服务3个 (namenode、datanode、SecondNameNode)

Run Mapreduce Job On Yarn

  1. etc/hadoop/mapred-site.xml:
    指定mapreduce job运行在yran上
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
  1. etc/hadoop/mapred-site.xml:
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
  1. etc/hadoop/yarn-site.xml:
// map reduce 中间过程的算法
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
  1. sbin/start-yarn.sh
    启动 Node daemon and DataNode daemon and SecondaryNameNode
  2. http://hadoopnode1:8088/ 主机名+端口号
    通过web 接口 观察ResourceManager状态
  3. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input /output
  4. sbin/stop-yarn.sh
    停止yarn相关服务2个 (ResourceManager、NodeManager)

完全分布式模式(HA 三个节点)

1. hdfs-site.xml配置

    // nameservices 名称
    <property>
	  <name>dfs.nameservices</name>
	  <value>ns1</value>
	</property>
	// nameservice 中 namenode 名称
	<property>
	  <name>dfs.ha.namenodes.ns1</name>
	  <value>nn1,nn2</value>
	</property>
	// nn1所在节点的名称和通信端口号
	<property>
	  <name>dfs.namenode.rpc-address.ns1.nn1</name>
	  <value>hadoopnode1:8020</value>
	</property>
	// nn2所在节点的名称和通信端口号
	<property>
	  <name>dfs.namenode.rpc-address.ns1.nn2</name>
	  <value>hadoopnode2:8020</value>
	</property>
	// Namenode WEB HTTP SERVER address
	<property>
	  <name>dfs.namenode.http-address.ns1.nn1</name>
	  <value>hadoopnode1:50070</value>
	</property>
	// Namenode WEB HTTP SERVER address
	<property>
	  <name>dfs.namenode.http-address.ns1.nn2</name>
	  <value>hadoopnode2:50070</value>
	</property>
	// NAMENODE SHARED EDITS  , journalnode 服务所在主机
	<property>
	  <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://hadoopnode1:8485;hadoopnode2:8485;hadoopnode3:8485/ns1</value>
	</property>
    // HDFS PROXY CLIENT 
	<property>
	  <name>dfs.client.failover.proxy.provider.ns1</name>
	  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	//  同一时刻只有一个namenode是active , 提供服务。隔离namenode的机制 SSh and shell  ,所有机制依次执行,只要有一个返回执行成功就停止
	<property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property> 
    // 保障namenode所在的主机之间能够无密SSH登录
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/home/hadoop/.ssh/id_rsa</value>
    </property>

2. core-site.xml配置

   // 默认HDFS CLUSTER 集群名称
   <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1</value>
    </property>
	// hdfs 临时文件存放路径,若没有指定namenode  datanode路径,也存放在该路径下
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/app/hadoop-2.5.0/data/tmp</value> 
	</property>
	 <!--
	    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/app/hadoop-2.5.0/data/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/app/hadoop-2.5.0/data/dfs/data</value>
    </property>
	-->
	// journalnode 共享编辑日志存放路径
	<property>
		 <name>dfs.journalnode.edits.dir</name>
		 <value>/opt/app/hadoop-2.5.0/data/dfs/jn</value>
	</property>

3. QJM (分布式日志管理)HA 启动

需要先将core-site.xml 、hdfs-site.xml 、slaves 三个配置文件同步拷贝至其他节点,在进行接下来的操作

1. 启动各个节点上的journalnode 服务
	sbin/hadoop-daemon.sh start journalnode
2. 选择一台namenode ,默认选择nn1,进行格式化并启动
     1. bin/hdfs namenode -format
     2. sbin/hadoop-daemon.sh start namenode
3. 选择另外一台namenode ,默认选择nn2,同步nn1的元数据信息
     1. bin/hdfs namenode -bootstrapStandby
4. 启动nn2
     1. sbin/hadoop-daemon.sh start namenode
5. 将nn1 状态由Standby切换为Active
     1. bin/hdfs haadmin -transitionToActive nn1
6. 启动所有节点的datanode服务
     1. sbin/hadoop-daemon.sh start datanode
  1. HA 测试

    1. HDFS 上传下载文件

      // hdfs 上创建目录
      1. bin/hdfs dfs -mkdir -p /user/hadoop/conf
      // 上传文件到hdfs
      2. bin/hdfs dfs -put etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml /user/hadoop/conf
      // 查看上传的文件是否可读
      3. bin/hdfs dfs -text /user/hadoop/conf/core-site.xml
      	```
      
    2. NameNode HA 测试(故障转移手动切换)

      // nn1 active --> Standby
      1. bin/hdfs haadmin -transitionToStandby nn1
      // nn2 Standby --> active 
      2. bin/hdfs haadmin -transitionToActive nn2
      

      // 分别从两个namenode节点的50070 端口 web 查看
      Standby NodeActive Node

4. QJM HA 故障自动转移

ZooKeeper Cluster 部署

1. hdfs-site.xml 配置
   	 //借助于 ZooKeeper 自动故障转移
   	 <property>
	   <name>dfs.ha.automatic-failover.enabled</name>
	   <value>true</value>
	 </property>
2. core-site.xml 配置
   	 // ZooKeeper 集群地址
	 <property>
	   <name>ha.zookeeper.quorum</name>
	   <value>hadoopnode1:2181,hadoopnode2:2181,hadoopnode3:2181</value>
	 </property>
3. 启动测试
// 关停HDFS集群
1.sbin/stop-dfs.sh
// 同步配置文件至其他节点
2. scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml hadoop@hadoopnode2:/opt/app/hadoop-2.5.0/etc/hadoop/ hadoop@hadoopnode3:/opt/app/hadoop-2.5.0/etc/hadoop/
// 启动Zookeeper集群
3. bin/zkServer.sh start 
// 在Zookeeper上 初始化HA State  , 生成znode
4.bin/hdfs zkfc -formatZK
//  启动HDFS集群
5. sbin/start-dfs.sh
// 将active node kill , 测试故障是否转移
6. kill -9 9999
// 将kill 的node 单独启动,测试node 状态
7. sbin/hadoop-daemon.sh start namenode

Zookeeper集群DOWN ,不会影响hdfs 的服务,会影响hdfs故障的自动转移

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值