Hive存档分区(动态)FAILED:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1

时间:2017-10-12 16:37:44

标签: hadoop hive hiveql hadoop2 hadoop-archive

我试图从我的表中存档一些旧数据。使用spark.jars.packages org.vegas-viz:vegas_2.11:0.3.11,org.apache.spark:spark-streaming-kafka-0-10_2.11:2.1.0 查询。

ALTER TABLE TABLE_NAME ARCHIVE PARTITION(part_col)

表结构如下,

Hadoop version - 2.7.3
Hive version - 1.2.1

现在,我尝试存档特定分区的数据,如下所示,

hive> desc clicks_fact;
OK
time                    timestamp                                   
user_id                 varchar(32)                                 
advertiser_id           int                                         
buy_id                  int                                         
ad_id                   int                                         
creative_id             int                                         
creative_version        smallint                                    
creative_size           varchar(10)                                 
site_id                 int                                         
page_id                 int                                         
keyword                 varchar(48)                                 
country_id              varchar(10)                                 
state                   varchar(10)                                 
area_code               int                                         
browser_id              smallint                                    
browser_version         varchar(10)                                 
os_id                   int                                         
zip                     varchar(10)                                 
site_data               varchar(20)                                 
sv1                     varchar(10)                                 
day                     date                                        
file_date               varchar(8)                                  

# Partition Information      
# col_name              data_type               comment             

day                     date                                        
file_date               varchar(8)                                  
Time taken: 0.112 seconds, Fetched: 28 row(s)

我可以使用

直接在Hadoop中创建HAR
hive> ALTER TABLE clicks_fact ARCHIVE partition(day='2017-06-30', file_date='20170629');
intermediate.archived is hdfs://localhost:54310/user/hive/warehouse/scheme.db/clicks_fact/day=2017-06-30/file_date=20170629_INTERMEDIATE_ARCHIVED
intermediate.original is hdfs://localhost:54310/user/hive/warehouse/scheme.db/clicks_fact/day=2017-06-30/file_date=20170629_INTERMEDIATE_ORIGINAL
Creating data.har for hdfs://localhost:54310/user/hive/warehouse/scheme.db/clicks_fact/day=2017-06-30/file_date=20170629
in hdfs://localhost:54310/user/hive/warehouse/scheme.db/clicks_fact/day=2017-06-30/file_date=20170629/.hive-staging_hive_2017-10-12_22-03-17_129_6395228918576649008-1/-ext-10000/partlevel
Please wait... (this may take a while)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org/apache/hadoop/tools/HadoopArchives

因此,它不是Hadoop中的依赖问题。

非常感谢任何帮助。

日志:

$ hadoop archive -archiveName archive.har -p /mydir_* /

3 个答案:

答案 0 :(得分:1)

看起来依赖性就是问题。

我首先添加hadoop-tools.jar作为依赖项(在hive_home/lib内)。 这就是造成这个问题的原因。在我将hadoop-archives.jar添加为依赖项而不是hadoop-tools.jar后,它得到了解决。

感谢@Joby&的帮助。 @ Max08

答案 1 :(得分:0)

几点检查

set hive.archive.enabled=true;

set hive.metastore.schema.verification=true;

Hive现在将模式版本记录在Metastore数据库中,并验证Metastore模式版本是否与将要访问Metastore的Hive二进制文件兼容。请注意,默认情况下会禁用 隐式创建或更改现有架构的Hive属性 。 Hive不会尝试隐式更改Metastore架构。当您针对旧架构执行Hive查询时,它将无法访问Metastore。

答案 2 :(得分:0)

我使用hive --auxpath $HADOOP_HOME/share/hadoop/tools/lib/hadoop-archives-2.7.2.jar,它可以正常工作。

配置单元使用--auxpath指定在创建新会话时将要加载的辅助jar。默认情况下,如果没有--auxpath,将不会加载此jar。