Search in sources :

Example 51 with InvalidObjectException

use of org.apache.hadoop.hive.metastore.api.InvalidObjectException in project hive by apache.

the class ObjectStore method createResourcePlan.

@Override
public void createResourcePlan(WMResourcePlan resourcePlan, String copyFromName, int defaultPoolSize) throws AlreadyExistsException, InvalidObjectException, MetaException, NoSuchObjectException {
    boolean commited = false;
    String rpName = normalizeIdentifier(resourcePlan.getName());
    if (rpName.isEmpty()) {
        throw new InvalidObjectException("Resource name cannot be empty.");
    }
    MWMResourcePlan rp = null;
    if (copyFromName == null) {
        Integer queryParallelism = null;
        if (resourcePlan.isSetQueryParallelism()) {
            queryParallelism = resourcePlan.getQueryParallelism();
            if (queryParallelism <= 0) {
                throw new InvalidObjectException("Query parallelism should be positive.");
            }
        }
        rp = new MWMResourcePlan(rpName, queryParallelism, Status.DISABLED);
    } else {
        rp = new MWMResourcePlan(rpName, null, Status.DISABLED);
    }
    try {
        openTransaction();
        pm.makePersistent(rp);
        if (copyFromName != null) {
            MWMResourcePlan copyFrom = getMWMResourcePlan(copyFromName, false);
            if (copyFrom == null) {
                throw new NoSuchObjectException(copyFromName);
            }
            copyRpContents(rp, copyFrom);
        } else {
            // all the RawStore-s. Right now there's no method to create a pool.
            if (defaultPoolSize > 0) {
                MWMPool defaultPool = new MWMPool(rp, "default", 1.0, defaultPoolSize, null);
                pm.makePersistent(defaultPool);
                rp.setPools(Sets.newHashSet(defaultPool));
                rp.setDefaultPool(defaultPool);
            }
        }
        commited = commitTransaction();
    } catch (InvalidOperationException e) {
        throw new RuntimeException(e);
    } catch (Exception e) {
        checkForConstraintException(e, "Resource plan already exists: ");
        throw e;
    } finally {
        if (!commited) {
            rollbackTransaction();
        }
    }
}
Also used : MWMPool(org.apache.hadoop.hive.metastore.model.MWMPool) InvalidOperationException(org.apache.hadoop.hive.metastore.api.InvalidOperationException) InvalidObjectException(org.apache.hadoop.hive.metastore.api.InvalidObjectException) NoSuchObjectException(org.apache.hadoop.hive.metastore.api.NoSuchObjectException) MWMResourcePlan(org.apache.hadoop.hive.metastore.model.MWMResourcePlan) AlreadyExistsException(org.apache.hadoop.hive.metastore.api.AlreadyExistsException) InvalidInputException(org.apache.hadoop.hive.metastore.api.InvalidInputException) InvalidOperationException(org.apache.hadoop.hive.metastore.api.InvalidOperationException) SQLIntegrityConstraintViolationException(java.sql.SQLIntegrityConstraintViolationException) IOException(java.io.IOException) NoSuchObjectException(org.apache.hadoop.hive.metastore.api.NoSuchObjectException) MetaException(org.apache.hadoop.hive.metastore.api.MetaException) JDOCanRetryException(javax.jdo.JDOCanRetryException) InvalidPartitionException(org.apache.hadoop.hive.metastore.api.InvalidPartitionException) UnknownPartitionException(org.apache.hadoop.hive.metastore.api.UnknownPartitionException) InvalidObjectException(org.apache.hadoop.hive.metastore.api.InvalidObjectException) JDOException(javax.jdo.JDOException) MissingTableException(org.datanucleus.store.rdbms.exceptions.MissingTableException) SQLException(java.sql.SQLException) UnknownDBException(org.apache.hadoop.hive.metastore.api.UnknownDBException) TException(org.apache.thrift.TException) JDODataStoreException(javax.jdo.JDODataStoreException) JDOObjectNotFoundException(javax.jdo.JDOObjectNotFoundException) UnknownTableException(org.apache.hadoop.hive.metastore.api.UnknownTableException)

Example 52 with InvalidObjectException

use of org.apache.hadoop.hive.metastore.api.InvalidObjectException in project metacat by Netflix.

the class CatalogThriftHiveMetastore method requestWrapper.

private <R> R requestWrapper(final String methodName, final Object[] args, final ThriftSupplier<R> supplier) throws TException {
    final long start = registry.clock().wallTime();
    registry.counter(registry.createId(Metrics.CounterThrift.getMetricName() + "." + methodName)).increment();
    try {
        log.info("+++ Thrift({}): Calling {}({})", catalogName, methodName, args);
        return supplier.get();
    } catch (MetacatAlreadyExistsException e) {
        log.error(e.getMessage(), e);
        throw new AlreadyExistsException(e.getMessage());
    } catch (MetacatNotFoundException e) {
        log.error(e.getMessage(), e);
        throw new NoSuchObjectException(e.getMessage());
    } catch (MetacatPreconditionFailedException e) {
        log.error(e.getMessage(), e);
        throw new InvalidObjectException(e.getMessage());
    } catch (TException e) {
        log.error(e.getMessage(), e);
        throw e;
    } catch (Exception e) {
        registry.counter(registry.createId(Metrics.CounterThrift.getMetricName() + "." + methodName).withTags(Metrics.tagStatusFailureMap)).increment();
        final String message = String.format("%s -- %s failed", e.getMessage(), methodName);
        log.error(message, e);
        final MetaException me = new MetaException(message);
        me.initCause(e);
        throw me;
    } finally {
        final long duration = registry.clock().wallTime() - start;
        this.registry.timer(Metrics.TimerThriftRequest.getMetricName() + "." + methodName).record(duration, TimeUnit.MILLISECONDS);
        log.info("+++ Thrift({}): Time taken to complete {} is {} ms", catalogName, methodName, duration);
    }
}
Also used : MetacatNotFoundException(com.netflix.metacat.common.exception.MetacatNotFoundException) TException(org.apache.thrift.TException) AlreadyExistsException(org.apache.hadoop.hive.metastore.api.AlreadyExistsException) MetacatAlreadyExistsException(com.netflix.metacat.common.exception.MetacatAlreadyExistsException) MetacatPreconditionFailedException(com.netflix.metacat.common.exception.MetacatPreconditionFailedException) NoSuchObjectException(org.apache.hadoop.hive.metastore.api.NoSuchObjectException) InvalidObjectException(org.apache.hadoop.hive.metastore.api.InvalidObjectException) MetacatAlreadyExistsException(com.netflix.metacat.common.exception.MetacatAlreadyExistsException) AlreadyExistsException(org.apache.hadoop.hive.metastore.api.AlreadyExistsException) MetacatPreconditionFailedException(com.netflix.metacat.common.exception.MetacatPreconditionFailedException) InvalidOperationException(org.apache.hadoop.hive.metastore.api.InvalidOperationException) MetacatAlreadyExistsException(com.netflix.metacat.common.exception.MetacatAlreadyExistsException) TException(org.apache.thrift.TException) MetacatNotFoundException(com.netflix.metacat.common.exception.MetacatNotFoundException) NoSuchObjectException(org.apache.hadoop.hive.metastore.api.NoSuchObjectException) MetaException(org.apache.hadoop.hive.metastore.api.MetaException) InvalidObjectException(org.apache.hadoop.hive.metastore.api.InvalidObjectException) MetaException(org.apache.hadoop.hive.metastore.api.MetaException)

Example 53 with InvalidObjectException

use of org.apache.hadoop.hive.metastore.api.InvalidObjectException in project metacat by Netflix.

the class HiveConnectorPartitionService method getPartitions.

private List<Partition> getPartitions(final QualifiedName tableName, @Nullable final String filter, @Nullable final List<String> partitionIds, @Nullable final Sort sort, @Nullable final Pageable pageable) {
    final String databasename = tableName.getDatabaseName();
    final String tablename = tableName.getTableName();
    try {
        final Table table = metacatHiveClient.getTableByName(databasename, tablename);
        List<Partition> partitionList = null;
        if (!Strings.isNullOrEmpty(filter)) {
            partitionList = metacatHiveClient.listPartitionsByFilter(databasename, tablename, filter);
        } else {
            if (partitionIds != null) {
                partitionList = metacatHiveClient.getPartitions(databasename, tablename, partitionIds);
            }
            if (partitionList == null || partitionList.isEmpty()) {
                partitionList = metacatHiveClient.getPartitions(databasename, tablename, null);
            }
        }
        final List<Partition> filteredPartitionList = Lists.newArrayList();
        partitionList.forEach(partition -> {
            final String partitionName = getNameOfPartition(table, partition);
            if (partitionIds == null || partitionIds.contains(partitionName)) {
                filteredPartitionList.add(partition);
            }
        });
        if (sort != null) {
            if (sort.getOrder() == SortOrder.DESC) {
                filteredPartitionList.sort(Collections.reverseOrder());
            } else {
                Collections.sort(filteredPartitionList);
            }
        }
        return ConnectorUtils.paginate(filteredPartitionList, pageable);
    } catch (NoSuchObjectException exception) {
        throw new TableNotFoundException(tableName, exception);
    } catch (MetaException | InvalidObjectException e) {
        throw new InvalidMetaException("Invalid metadata for " + tableName, e);
    } catch (TException e) {
        throw new ConnectorException(String.format("Failed get partitions for hive table %s", tableName), e);
    }
}
Also used : TException(org.apache.thrift.TException) Partition(org.apache.hadoop.hive.metastore.api.Partition) TableNotFoundException(com.netflix.metacat.common.server.connectors.exception.TableNotFoundException) Table(org.apache.hadoop.hive.metastore.api.Table) ConnectorException(com.netflix.metacat.common.server.connectors.exception.ConnectorException) NoSuchObjectException(org.apache.hadoop.hive.metastore.api.NoSuchObjectException) InvalidObjectException(org.apache.hadoop.hive.metastore.api.InvalidObjectException) InvalidMetaException(com.netflix.metacat.common.server.connectors.exception.InvalidMetaException) MetaException(org.apache.hadoop.hive.metastore.api.MetaException) InvalidMetaException(com.netflix.metacat.common.server.connectors.exception.InvalidMetaException)

Example 54 with InvalidObjectException

use of org.apache.hadoop.hive.metastore.api.InvalidObjectException in project metacat by Netflix.

the class HiveConnectorPartitionService method addUpdateDropPartitions.

protected void addUpdateDropPartitions(final QualifiedName tableQName, final Table table, final List<String> partitionNames, final List<PartitionInfo> addedPartitionInfos, final List<PartitionHolder> existingPartitionInfos, final Set<String> deletePartitionNames) {
    final String databaseName = table.getDbName();
    final String tableName = table.getTableName();
    final TableInfo tableInfo = hiveMetacatConverters.toTableInfo(tableQName, table);
    try {
        final List<Partition> existingPartitions = existingPartitionInfos.stream().map(p -> hiveMetacatConverters.fromPartitionInfo(tableInfo, p.getPartitionInfo())).collect(Collectors.toList());
        final List<Partition> addedPartitions = addedPartitionInfos.stream().map(p -> hiveMetacatConverters.fromPartitionInfo(tableInfo, p)).collect(Collectors.toList());
        // If alterIfExists=true, then alter partitions if they already exists
        if (!existingPartitionInfos.isEmpty()) {
            copyTableSdToPartitionSd(existingPartitions, table);
            metacatHiveClient.alterPartitions(databaseName, tableName, existingPartitions);
        }
        // Copy the storage details from the table if the partition does not contain the details.
        copyTableSdToPartitionSd(addedPartitions, table);
        // Drop partitions with ids in 'deletePartitionNames' and add 'addedPartitionInfos' partitions
        metacatHiveClient.addDropPartitions(databaseName, tableName, addedPartitions, Lists.newArrayList(deletePartitionNames));
    } catch (NoSuchObjectException exception) {
        if (exception.getMessage() != null && exception.getMessage().startsWith("Partition doesn't exist")) {
            throw new PartitionNotFoundException(tableQName, "", exception);
        } else {
            throw new TableNotFoundException(tableQName, exception);
        }
    } catch (MetaException | InvalidObjectException exception) {
        throw new InvalidMetaException("One or more partitions are invalid.", exception);
    } catch (AlreadyExistsException e) {
        throw new PartitionAlreadyExistsException(tableQName, partitionNames, e);
    } catch (TException exception) {
        throw new ConnectorException(String.format("Failed savePartitions hive table %s", tableName), exception);
    }
}
Also used : StringUtils(org.apache.commons.lang.StringUtils) Getter(lombok.Getter) MetaException(org.apache.hadoop.hive.metastore.api.MetaException) SortOrder(com.netflix.metacat.common.dto.SortOrder) AuditInfo(com.netflix.metacat.common.server.connectors.model.AuditInfo) HashMap(java.util.HashMap) SerDeInfo(org.apache.hadoop.hive.metastore.api.SerDeInfo) Partition(org.apache.hadoop.hive.metastore.api.Partition) Function(java.util.function.Function) Warehouse(org.apache.hadoop.hive.metastore.Warehouse) ArrayList(java.util.ArrayList) AlreadyExistsException(org.apache.hadoop.hive.metastore.api.AlreadyExistsException) Strings(com.google.common.base.Strings) ConnectorPartitionService(com.netflix.metacat.common.server.connectors.ConnectorPartitionService) InvalidMetaException(com.netflix.metacat.common.server.connectors.exception.InvalidMetaException) Lists(com.google.common.collect.Lists) ConnectorException(com.netflix.metacat.common.server.connectors.exception.ConnectorException) PartitionInfo(com.netflix.metacat.common.server.connectors.model.PartitionInfo) Map(java.util.Map) ConnectorContext(com.netflix.metacat.common.server.connectors.ConnectorContext) StorageInfo(com.netflix.metacat.common.server.connectors.model.StorageInfo) HiveConnectorInfoConverter(com.netflix.metacat.connector.hive.converters.HiveConnectorInfoConverter) PartitionUtil(com.netflix.metacat.common.server.partition.util.PartitionUtil) StorageDescriptor(org.apache.hadoop.hive.metastore.api.StorageDescriptor) ConnectorRequestContext(com.netflix.metacat.common.server.connectors.ConnectorRequestContext) Nullable(javax.annotation.Nullable) PartitionHolder(com.netflix.metacat.connector.hive.sql.PartitionHolder) Pageable(com.netflix.metacat.common.dto.Pageable) TException(org.apache.thrift.TException) Set(java.util.Set) QualifiedName(com.netflix.metacat.common.QualifiedName) InvalidObjectException(org.apache.hadoop.hive.metastore.api.InvalidObjectException) TableNotFoundException(com.netflix.metacat.common.server.connectors.exception.TableNotFoundException) Collectors(java.util.stream.Collectors) Sets(com.google.common.collect.Sets) Table(org.apache.hadoop.hive.metastore.api.Table) PartitionsSaveResponse(com.netflix.metacat.common.server.connectors.model.PartitionsSaveResponse) FieldSchema(org.apache.hadoop.hive.metastore.api.FieldSchema) List(java.util.List) PartitionAlreadyExistsException(com.netflix.metacat.common.server.connectors.exception.PartitionAlreadyExistsException) TableInfo(com.netflix.metacat.common.server.connectors.model.TableInfo) PartitionsSaveRequest(com.netflix.metacat.common.server.connectors.model.PartitionsSaveRequest) PartitionListRequest(com.netflix.metacat.common.server.connectors.model.PartitionListRequest) ConnectorUtils(com.netflix.metacat.common.server.connectors.ConnectorUtils) PartitionNotFoundException(com.netflix.metacat.common.server.connectors.exception.PartitionNotFoundException) Collections(java.util.Collections) NoSuchObjectException(org.apache.hadoop.hive.metastore.api.NoSuchObjectException) Sort(com.netflix.metacat.common.dto.Sort) TException(org.apache.thrift.TException) Partition(org.apache.hadoop.hive.metastore.api.Partition) AlreadyExistsException(org.apache.hadoop.hive.metastore.api.AlreadyExistsException) PartitionAlreadyExistsException(com.netflix.metacat.common.server.connectors.exception.PartitionAlreadyExistsException) InvalidMetaException(com.netflix.metacat.common.server.connectors.exception.InvalidMetaException) TableNotFoundException(com.netflix.metacat.common.server.connectors.exception.TableNotFoundException) PartitionNotFoundException(com.netflix.metacat.common.server.connectors.exception.PartitionNotFoundException) ConnectorException(com.netflix.metacat.common.server.connectors.exception.ConnectorException) TableInfo(com.netflix.metacat.common.server.connectors.model.TableInfo) NoSuchObjectException(org.apache.hadoop.hive.metastore.api.NoSuchObjectException) InvalidObjectException(org.apache.hadoop.hive.metastore.api.InvalidObjectException) PartitionAlreadyExistsException(com.netflix.metacat.common.server.connectors.exception.PartitionAlreadyExistsException) MetaException(org.apache.hadoop.hive.metastore.api.MetaException) InvalidMetaException(com.netflix.metacat.common.server.connectors.exception.InvalidMetaException)

Aggregations

InvalidObjectException (org.apache.hadoop.hive.metastore.api.InvalidObjectException)54 MetaException (org.apache.hadoop.hive.metastore.api.MetaException)30 NoSuchObjectException (org.apache.hadoop.hive.metastore.api.NoSuchObjectException)30 ArrayList (java.util.ArrayList)21 Table (org.apache.hadoop.hive.metastore.api.Table)21 TException (org.apache.thrift.TException)20 Partition (org.apache.hadoop.hive.metastore.api.Partition)17 AlreadyExistsException (org.apache.hadoop.hive.metastore.api.AlreadyExistsException)15 InvalidInputException (org.apache.hadoop.hive.metastore.api.InvalidInputException)13 IOException (java.io.IOException)12 InvalidOperationException (org.apache.hadoop.hive.metastore.api.InvalidOperationException)12 MTable (org.apache.hadoop.hive.metastore.model.MTable)12 InvalidMetaException (com.netflix.metacat.common.server.connectors.exception.InvalidMetaException)10 FieldSchema (org.apache.hadoop.hive.metastore.api.FieldSchema)10 MColumnDescriptor (org.apache.hadoop.hive.metastore.model.MColumnDescriptor)10 ConnectorException (com.netflix.metacat.common.server.connectors.exception.ConnectorException)9 List (java.util.List)8 TableNotFoundException (com.netflix.metacat.common.server.connectors.exception.TableNotFoundException)7 MConstraint (org.apache.hadoop.hive.metastore.model.MConstraint)6 SQLException (java.sql.SQLException)5