Hadoop 蜂巢中的许多分区

Hadoop 蜂巢中的许多分区,hadoop,hive,partitioning,Hadoop,Hive,Partitioning,我对列“id”有大约200000个不同的值,并且在一个动态分区的配置单元表中将它用作分区键 现在创建了分区,当我尝试查询时(我使用了simple Select*query),它总是返回以下错误: FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutExcep

我对列“id”有大约200000个不同的值,并且在一个动态分区的配置单元表中将它用作分区键

现在创建了分区,当我尝试查询时(我使用了simple
Select*
query),它总是返回以下错误:

FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out

有人能告诉我为什么吗?

利用“id”列上蜂巢(新引入)的索引功能。分区不是一个好主意当创建太多分区时,它会增加名称节点上的负载,以跟踪创建的每个分区。

您可以从划分id中选择*。例如

select * from where id >0 and id < 50000
select * from where id >=50000 and id =< 100000
...
从id>0且id<50000的位置选择*
从id>=50000和id=<100000的位置选择*
...

因为对于每个动态分区,配置单元分配一个内存部分。这种类型的查询需要更少的内存,但是整个过程需要更多的时间。

200000对于hive来说动态分区太多了。尝试减少分区的数量

您看过
hive.exec.max.dynamic.partitions.pernode
了吗?我认为200000分区太多了——我以前从未超过过几百个。@BenWatson我根据值的数量修改了这个属性。我正在spark中使用hive metastore,需要减少处理时间,因此选择了动态分区。有没有其他方法可以减少查询时间?减少分区的数量-你真的需要200000吗?是的,因为我将只使用select*from where id='?你不需要分区。您可以将ID作为列。