前言
hadoop集群(应该说hadoop生态系统,现在spark、storm、kafka这些都包含在一起)迁移是很很多公司都很难避免的一个场景,个人理解,集群迁移主要分三方面:集群环境搭建、数据迁移、服务迁移。
新集群的搭建,不管是CDH或者是APACHE的版本,已经属于基本功范畴。
服务迁移又和具体的公司业务十分相关,这点应该是最麻烦的一点,需要和各个负责人确认。
数据迁移也是比较重要的一环,一般和数据比较相关的组件包括但不限于:hdfs、hbase、impala/hive、zookeeper、kafka。
下面将主要考虑impala的迁移,impala的迁移和hdfs最相关,因此两者在一起介绍。
迁移介绍
迁移场景
1.hadoop新老集群之间的迁移,由资源紧张或者配置较低的老集群向新集群迁移。
2.迁移需要数天或者数周才能完成。(需要测试新集群的稳定性,以及业务是否能正常运行)
3.本文暂不考虑各种应用以及服务,只考虑hdfs和impala的数据迁移。
迁移方案
impala集群迁移主要有两部分内容:
1.hdfs中的数据
2.impala中所有表和分区全量迁移
在某一个时间点将现有的数据统一迁移一次,该阶段主要包括:
1.hdfs数据迁移
2.impala数据库、数据表、分区的建立增量迁移
在进行全量迁移到新老集群完全迁移完成之前,定时进行增量迁移,可以考虑以一天为单位。
1.hdfs数据的增量迁移,相应目录的增量迁移。
2.impala分区增量添加。HDFS迁移
hive和impala大都会在hdfs上建外部表,因此需要先迁移hdfs相应数据。
hdfs的迁移主要使用distcp,写起来很简单啦,该命令在新老集群上都可以执行,具体的使用方式,看看官方文档就OK。
注意:
1.记得新建根目录。 2.在进行hdfs数据迁移的时候, 最好先进行时间的估算,根据集群的带宽情况估算一下迁移的总时间(大致的数量级)。然后尽量避免集群使用的高峰期来迁移。IMPALA迁移
准备工作
外部表的数据文件
在hdfs迁移完成后相应的目录应该已经存在了,如果没有存在,执行impala建表语句时会报没有写权限的错误。
老集群impala信息
1.所有的impala数据库:直接使用show databases;
2.所有的数据库建表语句(后两者我写了程序统一抓取) 3.所有表的分区(在程序中拼接成相应的添加分区的语句)附github地址:
程序里面的一些参数需要修改:impala地址,生成sql的路径。
补充
关键字字段
show create table name的时候,不会自动加 建表的时候有些字段需要加
,比如date,需要改为date
增量更新
增量更新的时候考虑新建impala分区
跳过sql错误
执行脚本的时候跳过sql错误,继续执行。
impala-shell -c -f jiaoben.sql日志
建议执行的操作,将日志写入文件,方便查找哪些操作失败。
错误
权限错误
org.apache.hadoop.security.AccessControlException Permission denied:user=impala
impala建表的时候,这个错误很大程度上是在建表的时候location中的地址,在hdfs中不存在引起的。
文章来源: