HiveMetaStoreClient认为是Derby,但实际上是Postgres

HiveMetaStoreClient认为是Derby,但实际上是Postgres,hive,cloudera,metastore,Hive,Cloudera,Metastore,我正在尝试使用下面的代码通过Oozie Java操作连接到Posgres Hive元存储 我正在将hive-site.xml传递给操作,以便它应该拥有所需的所有信息 HiveMetaStoreClient=新的HiveMetaStoreClient(conf); log.info(“成功创建了HiveMetaStoreClient”); 试一试{ log.info(String.format(“加载%s.%s、数据库、表的分区”); List partitions=client.listPar

我正在尝试使用下面的代码通过Oozie Java操作连接到Posgres Hive元存储

我正在将hive-site.xml传递给操作,以便它应该拥有所需的所有信息


HiveMetaStoreClient=新的HiveMetaStoreClient(conf);
log.info(“成功创建了HiveMetaStoreClient”);
试一试{
log.info(String.format(“加载%s.%s、数据库、表的分区”);
List partitions=client.listPartitions(数据库,表,(短)200);
log.info(String.format(“正在处理%d个分区”,partitions.size());
for(分区:分区){
StorageDescriptor sd=partition.getSd();
字符串位置=sd.getLocation();
字符串newLocation=location.replace(from,to);
log.info(String.format(“从%s移动到%s”,位置,新位置));
sd.设置位置(新位置);
}
}捕获(特克斯){
logExceptionStack(e);
}

日志并不完全是错误的,但它表明它正在查看其他具有DERBY后端的元存储

我很难找到问题所在并强制
HiveMetaStoreClient
指向正确的metastore


2016-02-08 16:48:05972信息[uber SubtaskRunner]com.xxxxxxx.PartitionMigrator.Program:正在尝试创建HiveMetaStoreClient
2016-02-08 16:48:06123信息[uber SubtaskRunner]com.xxxxxxx.PartitionMigrator.Program:hiveconf metastoreURI:null
2016-02-08 16:48:06194信息[uber SubtaskRunner]org.apache.hadoop.hive.metastore.HiveMetaStore:0:使用实现类打开原始存储:org.apache.hadoop.hive.metastore.ObjectStore
2016-02-08 16:48:06222信息[uber SubtaskRunner]org.apache.hadoop.hive.metastore.ObjectStore:ObjectStore,初始化调用
2016-02-08 16:48:06385信息[uber SubtaskRunner]DataNucleus.持久性:属性DataNucleus.cache.level2未知-将被忽略
2016-02-08 16:48:06385信息[uber SubtaskRunner]DataNucleus.持久性:属性hive.metastore.integral.jdo.pushdown未知-将被忽略
2016-02-08 16:48:06506警告[uber SubtaskRunner]DataNucleus。连接:指定了BoneCP,但在类路径(或依赖项之一)中不存在
2016-02-08 16:48:06840警告[uber SubtaskRunner]DataNucleus。连接:指定了BoneCP,但在类路径(或依赖项之一)中不存在
2016-02-08 16:48:08339 INFO[uber SubtaskRunner]org.apache.hadoop.hive.metastore.ObjectStore:使用hive.metastore.cache.pinobjtypes=“表、存储描述符、SerDeInfo、分区、数据库、类型、字段模式、顺序”设置metastore对象pin类
2016-02-08 16:48:09286信息[uber SubtaskRunner]DataNucleus.Datastore:类“org.apache.hadoop.hive.metastore.model.MFieldSchema”被标记为“embedded only”,因此没有自己的数据存储表。
2016-02-08 16:48:09286信息[uber SubtaskRunner]DataNucleus.Datastore:类“org.apache.hadoop.hive.metastore.model.MOrder”被标记为“embedded only”,因此没有自己的数据存储表。
2016-02-08 16:48:10400信息[uber SubtaskRunner]DataNucleus.数据存储:类“org.apache.hadoop.hive.metastore.model.MFieldSchema”被标记为“embedded only”,因此没有自己的数据存储表。
2016-02-08 16:48:10400信息[uber SubtaskRunner]DataNucleus.Datastore:类“org.apache.hadoop.hive.metastore.model.MOrder”被标记为“embedded only”,因此没有自己的数据存储表。
2016-02-08 16:48:10676信息[uber SubtaskRunner]org.apache.hadoop.hive.metastore.MetaStoreDirectSql:使用直接SQL,底层数据库是DERBY
2016-02-08 16:48:10677信息[uber SubtaskRunner]org.apache.hadoop.hive.metastore.ObjectStore:Initialized ObjectStore
2016-02-08 16:48:10798警告[uber SubtaskRunner]org.apache.hadoop.hive.metastore.ObjectStore:在metastore中找不到版本信息。未启用hive.metastore.schema.verification,因此记录架构版本1.1.0
2016-02-08 16:48:10928警告[uber SubtaskRunner]org.apache.hadoop.hive.metastore.ObjectStore:未能获取数据库默认值,返回NoSuchObjectException
2016-02-08 16:48:11019信息[uber SubtaskRunner]org.apache.hadoop.hive.metastore.HiveMetaStore:在metastore中添加了管理员角色
2016-02-08 16:48:11021信息[uber SubtaskRunner]org.apache.hadoop.hive.metastore.HiveMetaStore:在metastore中添加了公共角色
2016-02-08 16:48:11097信息[uber SubtaskRunner]org.apache.hadoop.hive.metastore.HiveMetaStore:由于配置为空,因此未在管理员角色中添加任何用户
2016-02-08 16:48:11193信息[uber SubtaskRunner]com.xxxxxxx.PartitionMigrator.Program:已成功创建HiveMetaStoreClient

可能是类路径问题——默认情况下,Hadoop项目的所有
配置
构造函数都会在类路径中的目录中搜索“xxxxx-site.xml”配置文件,如果找不到任何配置文件,它们会以静默方式(!!)还原为硬编码的“default”值--例如用于Hive Metastore后端的DERBY。您所说的“我正在将Hive-site.xml传递给操作”到底是什么意思?=>通过
(然后在容器CWD中下载)或通过
(然后下载并以某种方式合并到Java系统道具中)您是否尝试从CWD中的hive-site.xml显式构建“conf”,为了确保没有与该节点上的另一个恶意hive-site.xml发生冲突?在操作中,我将操作中的作业xml和工作流设置为HDFS中存储的hive-site.xml的副本,权限都很好。我还尝试在HiveConf对象上使用addResource(“hive site.xml”)将其加载到代码中。无声故障是有意义的,我猜可能是
加载隐式配置对象中的所有属性,但当您创建自己的HiveConf时,它会再次从XML文件开始,并且不知道Oozie之前做了什么。