Hadoop 在java中使用hiveContext修复配置单元表

Hadoop 在java中使用hiveContext修复配置单元表,hadoop,apache-spark,hive,apache-spark-sql,hivecontext,Hadoop,Apache Spark,Hive,Apache Spark Sql,Hivecontext,我想修复所有新添加/删除分区的配置单元表。与其在配置单元中手动运行msck repair命令,有没有办法在java中实现这一点?我正在尝试从hdfs和hive metastore获取所有分区,然后在比较它们之后,将新添加/删除的分区放入hive metastore。但是我无法从hivecontext获取api。我尝试使用hivecontext获取所有分区,但它抛出了找不到的错误表 System.out.println(hiveContext.metadataHive().getTable("an

我想修复所有新添加/删除分区的配置单元表。与其在配置单元中手动运行msck repair命令,有没有办法在java中实现这一点?我正在尝试从hdfs和hive metastore获取所有分区,然后在比较它们之后,将新添加/删除的分区放入hive metastore。但是我无法从hivecontext获取api。我尝试使用hivecontext获取所有分区,但它抛出了找不到的错误表

System.out.println(hiveContext.metadataHive().getTable("anshu","mytable").getAllPartitions());
是否有任何方法可以使用java在配置单元中添加/删除分区?

Spark选项: 使用hivecontext,您可以执行以下示例。不需要手动操作

sqlContext = HiveContext(sc)
sqlContext.sql("MSCK REPAIR TABLE your table")
是否有任何方法可以使用java在配置单元中添加/删除分区

纯java选项: 如果您想用纯java的方式而不使用spark,那么就用纯java代码吧 您可以使用类直接从HiveMetaStore进行查询


请看AFAIK,您必须打开与Metastore服务的直接连接;Spark不会在class
HiveMetastoreClient
方法
listPartitionNames(…)
getPartition(…)
下公开自己的>查找,然后是class
Partition
方法
gestSd()
,然后是class
StorageDescriptor
方法
getLocation()
,谢谢,但是hive metastore listpartitions方法只列出短的.maxvalue(32767)分区。如果我有10万个分区,那么如何实现它。另外,哪种方法更好——使用sqlcontext.sql或使用hivemetastore列出配置单元中的所有分区,并将其和hdfs中的所有分区进行比较?首先,您必须仔细查看您提到的问题(10万个分区),老实说,我不知道。第二件事,如果您正在使用spark hivecontext.sql,那么它是一种更好的方法,而不是使用
HiveMetaStoreClient
编写代码。如果您不想在那里使用spark,那么您必须使用
HiveMetaStoreClient