【发布时间】:2014-02-15 22:48:54
【问题描述】:
我正在尝试在 EMR 上使用 Shark,但我似乎无法从位置设置为 S3 存储桶的表中恢复我的分区。当我尝试显示我的分区时,我什么也得不到。
shark> MSCK REPAIR TABLE logs ;
OK
Time taken: 1.79 seconds
shark> SHOW PARTITIONS logs ;
OK
Time taken: 0.073 seconds
我像这样创建我的表
SET hive.exec.dynamic.partition = true ;
SET hive.exec.dynamic.partition.mode = nonstrict ;
CREATE EXTERNAL TABLE IF NOT EXISTS logs (
time STRING,
thread STRING,
logger STRING,
identity STRING,
message STRING,
logtype STRING,
logsubtype STRING,
node STRING,
storageallocationstatus STRING,
nodelist STRING,
userid STRING,
nodeid STRING,
path STRING,
datablockid STRING,
hash STRING,
size STRING,
value STRING,
exception STRING,
server STRING,
app STRING,
version STRING
)
PARTITIONED BY (
dt STRING,
level STRING
)
ROW FORMAT
DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 's3://my-log/parsed-logs/' ;
我的日志存储桶包含一个位于s3://my-log/parsed-logs/dt=2014-01-03/level=ERROR/ 的日志文件。
根据the Hive language manual,MSCK REPAIR TABLE logs 命令应该等同于 Amazon 的 Hive 扩展 ALTER TABLE logs RECOVER PARTITIONS,但是当我运行该命令时,我看不到任何分区。我在 Hive 中使用 ALTER TABLE logs RECOVER PARTITIONS 尝试了完全相同的操作,效果非常好。
hive> ALTER TABLE logs RECOVER PARTITIONS ;
OK
Time taken: 0.975 seconds
hive> SHOW PARTITIONS logs ;
OK
dt=2014-01-03/level=ERROR
Time taken: 0.078 seconds, Fetched: 1 row(s)
我在使用 Shark 时是否遗漏了什么?
【问题讨论】:
标签: hadoop amazon-s3 hive amazon-emr shark-sql