当前位置: 首页 > 知识库问答 >
问题:

更新表分区时的蜂巢转移问题

严信瑞
2023-03-14

我正在尝试使用Hive Java API更新Hive表分区。

public class HiveMetastoreChecker {

public static void main(String[] args) {
    final String dbName = "db_name";
    final String tableName = "db_name.table_name";

    CheckResult result = new CheckResult();
    try {
        Configuration configuration = new Configuration();
        HiveConf conf = new HiveConf();
        conf.addResource(configuration);
        Hive hive = Hive.get(conf, true);
        HiveMetaStoreChecker checker = new HiveMetaStoreChecker(hive);

        Table table = new Table(dbName, tableName);

        table.setDbName(dbName);
        table.setInputFormatClass(TextInputFormat.class);
        table.setOutputFormatClass(HiveIgnoreKeyTextOutputFormat.class);

        table = hive.getTable(dbName, tableName);

        checker.checkMetastore(dbName, tableName, null, result);
        System.out.println(table.getDataLocation());
        List<CheckResult.PartitionResult> partitionNotInMs = result.getPartitionsNotInMs();
        System.out.println("not in ms " + partitionNotInMs.size());
        List<org.apache.hadoop.hive.ql.metadata.Partition> partitions = hive.getPartitions(table);

        System.out.println("partitions size " + partitions.size());
        AddPartitionDesc apd = new AddPartitionDesc(table.getDbName(), table.getTableName(), false);

        List<String> finalListOfPartitionsNotInMs = new ArrayList<String>();
        for (CheckResult.PartitionResult part : partitionNotInMs){
            if(!finalListOfPartitionsNotInMs.contains(part.getPartitionName().replace("/",""))){
                finalListOfPartitionsNotInMs.add(part.getPartitionName().replace("/",""));
            }
        }

        for (String partition:finalListOfPartitionsNotInMs) {

            apd.addPartition(Warehouse.makeSpecFromName(partition), table.getDataLocation().toString());
        }
       hive.createPartitions(apd);
    } catch (HiveException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (MetaException e) {
        e.printStackTrace();
    }
}

如有任何帮助,不胜感激。
谢谢。

共有1个答案

梁豪
2023-03-14

蜂巢MSCK修复失败?如果是,则检查分区列名是否是大写字母。我发现了aws s3上的分区类似于DCA=1000的相同问题。

如果是这种情况,那么使用Spark SQL执行MSCK修复,它将owrk,以防您不想将分区重命名为小写。

 类似资料:
  • 我正在回顾一个旧的Spark软件,它必须并行运行许多小的查询和计数()并使用直接的hive-sql。 在过去,该软件通过在shell()上直线运行每个查询来解决“并行化查询的问题”。我不能用现代新鲜的Spark,此刻只有Spark V2.2。下面的片段说明了完整的SQL查询方法。 有一种“Spark方式”可以访问Hive并运行SQL查询,性能(略)更好,而且Spark配置的重用性更好? 没有丢失纯

  • 蜂巢平台(OpenComb Platform)是一个基于 PHP 5.3 实现的深度云计算应用框架。蜂巢采用了扩展模式,系统中的功能和特性,都由扩展提供。 因此,用户可以通过开发和安装扩展来部署各种类型的互联网应用。

  • 我正在执行一个HQL查询,该查询几乎没有连接、联合和插入覆盖操作,如果只运行一次,它就可以正常工作。 如果我第二次执行相同的作业,我就会面临这个问题。有人能帮我确定在哪种情况下我们会得到这个异常吗?

  • 我正在尝试连接到R中的hive。我已经在我的R环境中加载了RJDBC和rJava库。我使用的是一台Linux服务器,hadoop(hortonworks sandbox 2.1)和R(3.1.1)安装在同一个盒子中。这是我用来连接的脚本: 我得到了这个错误: 错误。jcall(drv@jdrv,“Ljava/sql/Connection;”,“连接”,如图所示。字符(url)[1],:java。l

  • 在配置单元中执行select语句时,我得到了一个错误。

  • 我按照多个教程尝试使用RJDBC连接到Hive,但没有成功。 以下是我所拥有的: 我已经下载并放置在的文件。 我也尝试了最近的版本,但总是与相同的Cloudera版本同步。即使我的版本是5。XX。 我很确定是正确的,因为我已经使它在Python中与具有相同主机名/端口的一起工作。 错误: 错误在. jcall(drv@jdrv,"Ljava/sql/Connection;","Connection