备份kudu表数据(Kudu导入导出)

由于kudu修改hostname导致数据raft无法自动刷新,无法写入和修改所以需要做好备份。

方法0:最简单的方法是建好一张和需要备份的表一样的kudu表

INSERT INTO TABLE some_parquet_table SELECT * FROM kudu_table

方法一:(在Hue中进行即可)
1,利用impala进行备份,将Kudu表结构转化为impala表结构(其数据存储在hdfs中)
提前建好impala表

CREATE TABLE xxx1(
                id          INT                     ,
                user_id_add INT              ,      
                wx_identity STRING           
        )
		row format delimited fields terminated by ','

row format delimited fields terminated by ','
insert into  xxx1  select * from xxx2

2,上面有个简单方法

create table xxx1 as select * from xxx2

省去了去找建表语句和去掉一些冗余的列属性的步骤,这样更简便。

但是以上步骤对于一些字段少,且没有什么特殊字符的值来说,可以搞定,但是我用以上方法导出之后发现数据比源表多了很多,一查发现,有些字段的值中 存在 ‘\n\0’ 等特殊字符,用impala进行查询的时候遇到这些字符就换行成为了另外一条数据,所以导致数据多出!
所以对impala查出数据做处理,用impala String 函数中的 regexp_replace(string initial,string pattern,string replacement) 做处理

SQL变为
create table xxx1 as select id,user_id_add ,regexp_replace(wx_identity ,'[\n\0]','') from xxx2

用regexp_replace函数依次替换字段中需要替换的值

方法二,
用impala-shell进行

1,先把数据导出成CSV,或者TXT文件,不用进入impala-shell内部,用外部命令

impala-shell -q "select regexp_replace(*,'\n','') from music.xxx2" --delimited --output_delimiter=","  -o /home/xxx1.txt

参数详解:

-q query查询

–delimited (-B) 去格式化输出

–output_delimiter 输出的分隔符

-o 输出文件
2,将xxx1.txt文件上传到hdfs某个目录下 (/tmp/test/)
3,修改权限 hdfs dfs -chmod 777 /tmp/test/xxx1.txt
4,建impala表

CREATE TABLE xxx1(
                id          INT      ,
                user_id_add INT       ,      
                wx_identity STRING           
        )
		row format delimited fields terminated by ','
        location '/tmp/test/';

数据将自动映射为表数据

三,还原成kudu表数据
1,建好kudu表

CREATE TABLE xxx_kudu
(
				id          INT        ,
                user_id_add INT        ,      
                wx_identity STRING   ,
                primary key(id)       
)
STORED AS KUDU;

2, insert into xxx_kudu select * from xxx1

你可能感兴趣的:(Hadoop,Kudu,自己踩得坑,Impala,kudu数据导入导出,impala备份kudu表数据,kudu数据备份,impala数据备份)