阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop+Zookeeper实现NameNode的高可用

166次阅读
没有评论

共计 7917 个字符,预计需要花费 20 分钟才能阅读完成。

Hadoop+zookeepker 安装与配置:
 
在 hadoop-env.sh 中添加 export Java 的环境变量
修改 hostname 文件的名称,/etc/hosts 文件配置主机名和 ip 的映射关系,将 mstaer,slave 的主机名和 ip 地址都添加进来
 
配置 ssh 免密钥配置
Ssh-keygen –t rsa
在./.ssh 文件中生成两个文件 id_rsa(私钥),id_rsa.pub(公钥)
cat id_rsa.pub > .ssh/authorized_keys
scp authorized_keys user@ipaddress:/home/user/id_rsa.pub
修改 authorzed 文件的权限为 600
 
//Namenode 之间的高可用其实是通过 journalNode 集群或者 nfs 来实现的,两台主从的 namenode 节点通过共享一个共享目录来实现高可用,standy 的机器时刻同步 active 的 namenode 的机器,namenode 的自动切换一般使用 zookeeper 集群中来实现
 
Namenode 高可用的配置:
Core-site.Xml 添加 fs.defaultFS 的属性为 hdfs://mycluster
hdfs-site 中添加 dfs.federation.nameservers 为 mycluster
        添加 dfs.namenodes.mycluster 的值为 nn1 和 nn2
        添加 dfs.namenode.rpc-address.mycluster.nn1 的值为 hostname1:8020
        添加 dfs.namenode.rpc-address.mysqlcluster.nn2 的值为 hostname2:8020
          添加 dfs.namenode.http-address.mycluster.nn1 的值为 hostname1:50070// 配置 namenode 节点的 web 查看
添加 dfs.namenode.http-address.mycluster.nn1 的值为 hostname1:50070
添加 dfs.namenode.shared.edits.dir 共享的存储的目录位置,所有的 slave 端口的 8485
          添加 dfs.client.failover.proxy.provider.mycluster 的值为 org.apache.hadoop.hdfs. server.namenode.ha.ConfigureFailoverProxyProvider  // 确认 hadoop 客户端与 active 节点通信的 java 类,使用其来确认 active 是否活跃
        添加 dfs.ha.fencing.methods 的值为 sshfence 使用 ssh 来进行切换
// 任何一个期间都必须只有一个 namenode 节点,这个配置使用 ssh 的连接到 namenode 节点杀死 namenode 的 active 状态
 
下面是 hadoop+zookepper 的所有配置:
配置 hdfs-site.Xml
<configuration>
 <property>
  <name>dfs.replication</name>
  <value>3</value>                      // 将文本复制的份数为 3
 </property>
 <property>
  <name>heartbeat.recheckinterval</name>    //datanode 的心跳时间为 10s
  <value>10</value>
 </property>
 <property>
 <name>dfs.name.dir</name>           
 <value>file:/mnt/vdc/hadoopstore/hdfs/name</value>  // 确定 hdfs 文件系统的元信息保存的目录,设置为多目录的时候,就可以保存元信息数据的多个备份
 </property>
 <property>
  <name>dfs.data.dir</name>
  <value>file:/mnt/vdc/hadoopstore/hdfs/data</value>  // 确定 hdfs 的文件系统的数据保存的目录,就可以将 hdfs 建立在不同的分区上
 </property>
 <property>
  <name>dfs.webhdfs.enabled</name>    // 在 web 中访问 hdfs 的能力
  <value>true</value>
 </property>
 <property>
  <name>dfs.nameservices</name>    // 定义一个 mycluster 的 nameserver 族
  <value>mycluster</value>
 </property>
 <property>
  <name>dfs.ha.namenodes.mycluster</name>    // 支持两个那么 namenode 节点,两个 namenode 节点是 nn1,nn2。
  <value>nn1,nn2</value>
 </property>
 <property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>// 第一个 rpc 的通信地址,端口为 8020
  <value>master1:8020</value>
 </property>
 <property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>// 第二个 rpc 的通信地址,端口为 8020
  <value>master2:8020</value>
 </property>
 <property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>master1:50070</value>  // 定义第二个 namenode 的 http 端口
 </property>
 <property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>master2:50070</value>  // 定义第二个 namenode 的 httpd 端口
 </property>
 <property>
  <name>dfs.namenode.shared.edits.dir</name>  <value>qjournal://master1:8485;master2:8485;slave1:8485;slave2:8485;slave3:8485;slave4:8485;slave5:8485;slave6:8485;slave7:8485;slave8:8485;slave9:8485;slave10:8485/mycluster</value>
 </property>  // 共享的 datanode 信息
// 客户端故障转移配置
 <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>//namenode// 切换时候使用 ssh 等方式来操作
 </property>
 
 <property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/kduser/.ssh/id_rsa</value>// 存储的秘钥的位置
 </property>
 <property>
  <name>dfs.ha.automatic-failover.enabled</name>  //??? 是否需要加上 mycluster,故障发生的时候是否自动切换
  <value>true</value>
 </property>
 // 将这个 namenode 节点 id 配置为 nn1
<property>
  <name>dfs.ha.namenode.id</name>
  <value>nn1</value>
 </property>
</configuration>
 
 
配置 mapred-site.xml 文件
<configuration>
 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value> //hadoop2.x 以后的版本的框架为 yarn
 </property>
 <property>
 <name>mapreduce.reduce.shuffle.input.buffer.percent</name>// 默认为 0.7,提高系统系统配置
 <value>0.1<value>
 </property>
 </configuration>
 
 
配置 yarn-site.xml
<property>
  <name>yarn.nodemanager.resource.memory-mb</name>//nodemanager 总的可用的物理内存
  <value>10240</value>
  </property>
  <property>
 <name>yarn.resourcemanager.address</name>
//ResourceManager 对客户端暴露的地址。客户端通过该地址向 RM 提交应用程序,杀死应用程序等
        <value>master1:8032</value>
        </property>
        <property>
                <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
                <value>95.0</value>
        </property>
        <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>master1:8030</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>master1:8031</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
    <property>
              <name>yarn.resourcemanager.admin.address</name>
        <value>master1:8033</value>
    </property>
        <property>
                <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
                  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
        <property>                                                                                                                                                                                                                       
          <name>yarn.resourcemanager.webapp.address</name>                                                                                                                                                                               
          <value>master1:8088</value>                                                                                                                                                                                                     
        </property>
 
配置 core-site.xml 的配置
<configuration>
 <property>
  <name>hadoop.native.lib</name>
  <value>true</value>
<description>Shouldnative hadoop libraries, if present, be used.</description>
// 设置启动本地库,默认使用本地库
 </property>
<!–
 <property>
  <name>fs.default.name</name>
  <value>hdfs://0.0.0.0:9000</value>    //namenode 节点的 url
 </property>
–>
 <property>
  <name>hadoop.tmp.dir</name>
 <value>/mnt/vdc/hadoopstore/tmp</value>    //hdfs 的临时文件目录
 </property>
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value> // 指定 hdfs 的 nameservice 为 mycluster(两个),为 hadoop 的 namenode 节点高可用的配置
 </property>
 <property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/mnt/vdc/hadoopstore/journal/data</value>
 </property>
 <property>
  <name>ha.zookeeper.quorum.mycluster</name>
  <value>master1:2181,master2:2181,slave1:2181</value>
 </property>
 <property>
  <name>hadoop.proxyuser.oozie.hosts</name>
  <value>*</value>
 </property>
 <property>
  <name>hadoop.proxyuser.oozie.groups</name>
  <value>*</value>
 </property>
 <property>
  <name>hadoop.proxyuser.hue.hosts</name>
  <value>*</value>
 </property>
 <property>
  <name>hadoop.proxyuser.hue.groups</name>
  <value>*</value>
 </property>
</configuration>
 
第一次启动的时候需要格式化 hadoop  namenode  –format
查看集群状态的时候使用 jps 来进行查看
Hadoop dfsadmin -report
 
Zookeeper 命令详解:
配置基本的环境变量:
export ZOOKEEPER_HOME=/home/zookeeper-3.3.3
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
zookeeper 配置文件 zoo.cfg
tickTime=2000  // 默认每两秒就会发送一个心跳
dataDir=/diskl/zookeeper  // 存储内存中数据库快照的位置
dataLogDir=/disk2/zookeeper  // 日记存放的目录
clientPort=2181
initlimit=5        // 连接超时的心跳次数,这里 5 次就是说 10s 的时候就会退出
syncLimit=2   
server.l=zookeeperl:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
 
zookeeper 的 2181 端口用于与客户端连接,2888 端口用于与跟随者连接,3888 端口用于选举
修改 myid 文件,这个文件在 dataDir 文件中配置为 1,2,3
 
ZkServer.sh start/stop/status  启动 / 关闭 / 状态
zkCLi.sh –serveripaddress:2181  // 连接某台的 zookeeper 服务器         
使用 ls  / 查看节点中的内容
get  /xxxx 查看字符串里面的内容
set/create/deletexxx 设置 / 创建 / 删除节点的内容
但是 zookeeper 主要是使用 api 的形式来进行访问的

Ubuntu 14.04 安装分布式存储 Sheepdog+ZooKeeper  http://www.linuxidc.com/Linux/2014-12/110352.htm

CentOS 6 安装 sheepdog 虚拟机分布式储存  http://www.linuxidc.com/Linux/2013-08/89109.htm

ZooKeeper 集群配置 http://www.linuxidc.com/Linux/2013-06/86348.htm

使用 ZooKeeper 实现分布式共享锁 http://www.linuxidc.com/Linux/2013-06/85550.htm

分布式服务框架 ZooKeeper — 管理分布式环境中的数据 http://www.linuxidc.com/Linux/2013-06/85549.htm

ZooKeeper 集群环境搭建实践 http://www.linuxidc.com/Linux/2013-04/83562.htm

ZooKeeper 服务器集群环境配置实测 http://www.linuxidc.com/Linux/2013-04/83559.htm

ZooKeeper 集群安装 http://www.linuxidc.com/Linux/2012-10/72906.htm

Zookeeper3.4.6 的安装 http://www.linuxidc.com/Linux/2015-05/117697.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-02/128563.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计7917字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中