我为该列提供了大约200,000个不同的值" id"我在其中一个动态分区的Hive表中使用它作为分区键。
现在创建了分区,当我尝试查询时(我使用了简单的
Select *
查询),它总是返回以下错误:
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutException: Read timed out
谁能告诉我为什么?
答案 0 :(得分:2)
在列' id'上使用Hive(新引入)的索引功能。当太多分区正在创建时,分区并不是一个好主意,它会增加名称节点上的负载以跟踪创建的每个分区。
答案 1 :(得分:0)
您可以从ID中选择*。例如;
select * from where id >0 and id < 50000
select * from where id >=50000 and id =< 100000
...
因为对于每个动态分区,hive会分配一个内存部分。这种查询方式需要较少的内存,但整个过程需要更多时间。
答案 2 :(得分:0)
200,000是用于配置单元的动态分区太多。尝试减少分区数量。