背景介绍:
近日公司两套大数据集群,出现了主机名重复,有些程序需要同时调用,而且程序调用必须用host文件,这样问题就来了,机器名冲突,两套集群,一套是实时流,一套是离线跑批集群,评估其危险系数,只能改离线集群了,废话不所说,现在就开始说说怎么里边的坑。
1 生产环境介绍:
jdk1.8
hadoop-2.5.1
hive-2.1.0
spark-1.6.2
其他的就不再介绍了,下边介绍一下我的修改思路
0 停止集群上的相关服务
1 集群组件的修改
第一步 :将$HADOOP_HOME/etc文件拷贝一份(用来备份,以防万一失败后,好恢复)下涉及到机器名的文件修改机器名,我这里有这几个涉及到了(core-site.xml ,hdfs.site.xml,slave,yarn-site.xml),根据自己的实际情况修改,这里hadoop相关的配置文件就修改完了,修改完成后同步到其他节点上即可。
第二部:修改$HIVE_HOME/conf文件,同样先拷贝一份,我这里涉及到和机器名相关的文件有这些(hdfs-site.xml,hive-site.xml,core-site.xml),由于我的hive安装在主节点上,不需要同步,修改完就可以了
第三部:将$SPARK_HOME/conf文件下设计到机器名的配置文件修改,由于我的是hive on spark,没有其他用途,不做实时流,故只需要修改如下文件(hive-site.xml,slave),然后同步到worker节点上去,到这里组件的修改就完成了,
2 系统层次的修改
第一步 修改每台机器的机器名,
第二部 将/etc/hosts映射文件同步至其他节点
3 重启集群,发现hdfs正常,yarn也正常,然后执行hive命令,发现没问题,进入hive交互式了,可以执行show databases ; use db; show tables; create table 都没问题,但是select 之前的表就不可以了,应为查询需要读取mysql元数据,元数据记录的数据信息还是原来的机器名,所以查询报错也就很正常了,为了防止把元数据修改坏,还备份了一下,涉及到节点名路径的表有三个,如下
DBS :用来存储数据库的信息
FUNC_RU:用来存储udf自定义函数
SDS:用来存储表路径信息
之后重启 matestore 发现可以查询了,但是不能删除表,后来观察了一下日志,发现hive删除表的时候不会去指定表去查询,而是会去以SDS开头的表查询,由于之前做备份直接备份到本库了,于是SDS_copy被扫描到了,然后删除SDS_copy,发现才真正的ok了!
先分享到这里,如有不对的,请多多指点!