转载网址:http://lxw1234.com/archives/2015/09/484.htm
我自己的实际操作,遇到了一些问题。
事先已经创建好了一张表t421,其表结构为:
hive> desc formatted t451;
OK
# col_name data_type comment
id int None
city string None
name string None
sex string None
# Partition Information
# col_name data_type comment
day int None
# Detailed Table Information
Database: fdm
Owner: root
CreateTime: Mon May 01 08:18:01 PDT 2017
LastAccessTime: UNKNOWN
Protect Mode: None
Retention: 0
Location: hdfs://hadoop:9000/warehouse/fdm.db/t451
Table Type: MANAGED_TABLE
Table Parameters:
transient_lastDdlTime 1493651881
# Storage Information
SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat: org.apache.hadoop.mapred.TextInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Compressed: No
Num Buckets: -1
Bucket Columns: []
Sort Columns: []
Storage Desc Params:
field.delim \t
serialization.format \t
Time taken: 0.073 seconds
我们查看一下具体的表数据:
hive> select *
> from t451;
OK
10 beijing zhang man 20
20 shanghai wang man 20
30 beijing dongdong man 21
40 shanghai lisi woman 21
Time taken: 0.126 seconds
接下来我们在查看一下分区的相关信息:
hive> show partitions t451;
OK
day=20
day=21
Time taken: 0.046 seconds
接下来我们按照Hive复制一张分区表的方式进行操作:
1. create table new_table like old_table;
2. 使用hadoop fs -cp 命令,把old_table对应的hdfs目录的文件夹全部拷贝到new_table对应的hdfs目录下;
注意:如果不是分区表复制的话,上面的两个步骤已经可以了。
3. 使用msck repair table new_table命令,修复新表的分区元数据。
好的,接下来我们进行第一步操作:
1、创建一张相同表结构的新表t458;
hive> create table t458 like t451;
OK
Time taken: 0.1 seconds
hive> desc formatted t458;
OK
# col_name data_type comment
id int None
city string None
name string None
sex string None
# Partition Information
# col_name data_type comment
day int None
2、使用hadoop fs -cp命令把t451对应HDFS目录的所有文件夹复制到t458对应的HDFS目录下。
[root@hadoop local]# hadoop fs -cp /warehouse/fdm.db/t451/* /warehouse/fdm.db/t458
[root@hadoop local]# hadoop fs -lsr /warehouse/fdm.db/t458/
drwxr-xr-x - root supergroup 0 2017-05-01 09:02 /warehouse/fdm.db/t458/day=20
-rw-r--r-- 1 root supergroup 42 2017-05-01 09:02 /warehouse/fdm.db/t458/day=20/word1.txt
drwxr-xr-x - root supergroup 0 2017-05-01 09:02 /warehouse/fdm.db/t458/day=21
-rw-r--r-- 1 root supergroup 47 2017-05-01 09:02 /warehouse/fdm.db/t458/day=21/word2.txt
[root@hadoop local]# hadoop fs -cat /warehouse/fdm.db/t458/day=20/word1.txt
10 beijing zhang man
20 shanghai wang man
[root@hadoop local]# hadoop fs -cat /warehouse/fdm.db/t458/day=21/word2.txt
30 beijing dongdong man
40 shanghai lisi woman
3、此时此刻我们已经将表数据和表结构都已经复制到t458这个表当中,但是此时我们查看一下分区的相关信息。
hive> show partitions t458;
OK
Time taken: 0.054 seconds
4、在Hive中用使用msck repair table t458这个命令修复新表t458对应的分区元数据;
hive> msck repair table t458;
OK
Time taken: 0.046 seconds
5、再次查看(呵呵,这是为什么呢?)。
hive> show partitions t458;
OK
Time taken: 0.048 seconds
hive> select *
> from t458;
OK
Time taken: 0.033 seconds