Spark sql 数据迁移

数据迁移当然可以使用sqoop,但是我使用的时候发现配置不当有很多错误,使用起来很麻烦,于是自己就用了最原始的方法来迁移数据,熟练步骤了其实也很快,给大家一个参考。

一、迁移一张表

查看表结构:desc table tb1;

查看建表sql语句:show create tabletb1;

1.同一个数据仓库中复制表和数据,使用CTAS语句;

常用的三种方案:

a.完全复制拷贝:

create table tb2 as select * from tb1;

b.拷贝时修改存储格式:

CREATE TABLE http_ORC STORED AS ORC as select *from int_s1u_http_17543_t where p_app=1;

c.拷贝时修改存储格式并压缩数据:

CREATE TABLE http_parquet STORED AS parquetTBLPROPERTIES ("parquet.compress"="GZIP") as select * fromint_s1u_http_17543_t where p_app=1;

存储格式可以修改其他的如:

SEQUENCEFILE、AVRO、parquet、textfile

压缩算法:

LZO、GZIP、ZIPPY、SNAPPY、LZIP


其他方案:

先复制表结构:

create table tb2 like tb1;

再插入数据:

insert overwrite into tb2 select * from tb1;


2.跨节点、跨数据仓库复制一张表:

a.先输入show create table tb1;获取到建表sql,复制一下再修改表名重新执行一遍即可生成新表。或者先手动创建表:

CREATE TABLE `test`(`id` int, `name` string)rowformat delimited fields terminated by ',' stored as textfile;

再手动导入数据: load data local inpath  '/root/db' into table test;


如果是分区表:

create table tb2(sid int,sname String)partioned by (p_app String) row format delimited fields terminated by ',';

导入到指定分区:load data local inpath  '/root/http.txt'  into table tb2 partition(p_app='9');


其他格式的建表语句如:CREATE TABLE parquet_test ( id int,name string)

PARTITIONED BY (part string)

STORED AS PARQUET [tblproperties("orc.compress"="NONE")];

[ ]为可选的内容

只需要把STORED AS PARQUET;修改为其他的格式即可,如STORED AS ORC,STORED AS PARQUET。

b.把表的数据导出

hdfs dfs -du -h /user/spark/warehouse/xdrtest1.db

hdfs dfs -get /user/spark/warehouse/xdrtest1.db/http ./


c.向新表导入数据

hdfs dfs -put /root/http/* user/hive/warehouse/xdrtest1.db/http


注意:如果是分区表,没有指定分区的话会识别不了数据,需要手动注册:

msck repair table http;

show partitions http;会看到分区

二、跨节点、跨数据库迁移数据库里所有的表

1.先把原始数据库的表名全部复制出来

使用脚本:

#!/bin/bash

spark-sql -e "usexdrtest1; show tables;" > tables.txt

得到所有的表名:

接下来要去掉数据库名字xdrtest1和后面的false:

在vi里面使用字符串替换命令:先按esc键,再输入%s#xdrtest1 # 回车,

再输入 %s# false#回车, 得到只有表名的文件:

2.使用脚本把每张表的表结构,也就是建表语句导出来:

#!/bin/bash

cat tables.txt | whileread eachline

do

 spark-sql -e "use xdrtest1; show createtable $eachline" >> tb2.txt

done

得到所有表的创建sql脚本tb2.txt:

注意:每个表的sql后面没有分号,需要手动添加;

3.重建一个数据库,并导入表结构

在另外一个地方先手动创建一个同名数据库:

create database xdrtest1;

再导入建表脚本:

source/root/lz/tb2.txt;

至此,表结构就全部复制成功了,输入show tables;查看所有表:

4.下载数据

先在HDFS上对应的数据仓库库目录里把文件下载下来:

输入hdfsdfs -du -h /user/spark/warehouse/xdrtest1.db,查看每个表的大小情况

再输入hdfs dfs -get/user/spark/warehouse/xdrtest1.db,把数据下载下来(如果数据量很大的话会很慢)

查看数据大小:du -hs/root/xdrtest1.db/

5.传输数据

先将数据打包,tar zcvf xdrtest1.tar.gz/root/xdrtest1.db 

(解压tar zxvf xdrtest1.tar.gz)

再用wincp或者其他方式传输数据到另外一个环境中,再解压到linux本地文件系统中。

#压缩

tar -czvf ***.tar.gz

tar -cjvf ***.tar.bz2

#解压缩

tar -xzvf ***.tar.gz

tar -xjvf ***.tar.bz2

压缩打包后数据:由之前的220M变成51M

6.数据导入

使用脚本将数据导入:

#!/bin/bash

dir=$(ls -l/root/lz/xdrtest |awk '/^d/ {print $NF}') #遍历所有目录名

for i in $dir

do

echo $i

#spark-sql -e "use xdrtest1;load data local inpath /root/xdrtest1.db/$i/*  into table$i;"

hdfs dfs -put/root/lz/xdrtest/$i/* /user/hive/warehouse/xdrtest1.db/$i

echo "hdfs dfs -put/root/lz/xdrtest/$i/* /user/hive/warehouse/xdrtest1.db/$i"  

done


注意:

hdfs dfs -put /root/http/*user/hive/warehouse/xdrtest1.db/http是将文件直接放到对应表的目录下;

而load datalocal inpath  '/root/http/*'  into table http;是用sql语句去导入表,这个每次都要use xdrtest1;。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容