我一共安装了三个节点的集群,对于 ha 方案来说,三个节点准备安装如下服务:
cdh1:hadoop-hdfs-namenode(primary) 、hadoop-hdfs-journalnode、hadoop-hdfs-zkfc
cdh2:hadoop-hdfs-namenode(standby)、hadoop-hdfs-journalnode、hadoop-hdfs-zkfc
cdh3: hadoop-hdfs-journalnode
根据上面规划,在对应节点上安装相应的服务。
停掉集群上所有服务。
停止服务集群的所有客户端程序,包括定时任务。
a,查找本地配置的文件目录(属性名为 dfs.name.dir 或者 dfs.namenode.name.dir或者hadoop.tmp.dir )
通过上面的命令,可以看到类似以下信息:
b,对hdfs数据进行备份
在 cdh1、cdh2、cdh3 上安装 hadoop-hdfs-journalnode
在 cdh1、cdh2 上安装 hadoop-hdfs-zkfc:
修改/etc/hadoop/conf/core-site.xml,做如下修改:
修改/etc/hadoop/conf/hdfs-site.xml,删掉一些原来的 namenode 配置,增加如下:
将配置文件同步到集群其他节点:
在journalnode的三个节点上创建目录:
在两个nn上配置hdfs用户间无密码登陆:
对于 cdh1:
对于 cdh2:
启动cdh1、cdh2、cdh3上的 hadoop-hdfs-journalnode 服务
在namenode上初始化共享存储,如果没有格式化,则先格式化:
启动namenode:
cdh2作为 standby namenode,在该节点上先安装namenode服务
再运行:
如果是使用了kerberos,则先获取hdfs的ticket再执行:
然后,启动 standby namenode:
在两个namenode上,即cdh1和cdh2,安装hadoop-hdfs-zkfc
在任意一个namenode上下面命令,其会创建一个znode用于自动故障转移。
然后再两个 namenode 节点上启动zkfc:
分别访问 http://cdh1:50070/ 和 http://cdh2:50070/ 查看谁是 active namenode,谁是 standyby namenode。
查看某namenode的状态:
执行手动切换:
再次访问 http://cdh1:50070/ 和 http://cdh2:50070/ 查看谁是 active namenode,谁是 standyby namenode。
先停掉 hbase,然后修改/etc/hbase/conf/hbase-site.xml,做如下修改:
在 zookeeper 节点上运行/usr/lib/zookeeper/bin/zkcli.sh
最后启动 hbase 服务。
运行下面命令将hive的metastore的root地址的hdfs nameservice。
不需要做什么修改,但是一定要记住 core-site.xml 中 <code>fs.defaultfs</code> 参数值要带上端口号,在cdh中为 8020。