[ https://issues.apache.org/jira/browse/HIVE-26633?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17618333#comment-17618333 ]
John Sherman commented on HIVE-26633: ------------------------------------- I've added a WIP patch that makes it configurable via HiveConf and JdbcConf. https://github.com/apache/hive/pull/3674 One issue is that there seems to be no way to provide a different TConfiguration object for SSL connections. Hive uses https://github.com/apache/thrift/blob/9207b28b7df5f8e01960154971e8de07094c91a8/lib/java/src/main/java/org/apache/thrift/transport/TSSLTransportFactory.java#L290 which does a "new TSocket(socket)". https://github.com/apache/thrift/blob/9207b28b7df5f8e01960154971e8de07094c91a8/lib/java/src/main/java/org/apache/thrift/transport/TSocket.java#L58 I have not had a chance to test with SSL enabled. I will try to get that done. We may need follow up work for this. Another interesting observation - this enforcement doesn't get hit without SASL and/maybe SSL enabled. I would expect the limit by Thrift to be enforced unilaterally. > Make thrift max message size configurable > ----------------------------------------- > > Key: HIVE-26633 > URL: https://issues.apache.org/jira/browse/HIVE-26633 > Project: Hive > Issue Type: Bug > Components: HiveServer2 > Affects Versions: 4.0.0-alpha-2 > Reporter: John Sherman > Assignee: John Sherman > Priority: Major > Labels: pull-request-available > Time Spent: 10m > Remaining Estimate: 0h > > Since thrift >= 0.14, thrift now enforces max message sizes through a > TConfiguration object as described here: > [https://github.com/apache/thrift/blob/master/doc/specs/thrift-tconfiguration.md] > By default MaxMessageSize gets set to 100MB. > As a result it is possible for HMS clients not to be able to retrieve certain > metadata for tables with a large amount of partitions or other metadata. > For example on a cluster configured with kerberos between hs2 and hms, > querying a large table (10k partitions, 200 columns with names of 200 > characters) results in this backtrace: > {code:java} > org.apache.thrift.transport.TTransportException: MaxMessageSize reached > at > org.apache.thrift.transport.TEndpointTransport.countConsumedMessageBytes(TEndpointTransport.java:96) > > at > org.apache.thrift.transport.TMemoryInputTransport.read(TMemoryInputTransport.java:97) > > at org.apache.thrift.transport.TSaslTransport.read(TSaslTransport.java:390) > at > org.apache.thrift.transport.TSaslClientTransport.read(TSaslClientTransport.java:39) > > at org.apache.thrift.transport.TTransport.readAll(TTransport.java:109) > at > org.apache.hadoop.hive.metastore.security.TFilterTransport.readAll(TFilterTransport.java:63) > > at > org.apache.thrift.protocol.TBinaryProtocol.readAll(TBinaryProtocol.java:464) > at > org.apache.thrift.protocol.TBinaryProtocol.readByte(TBinaryProtocol.java:329) > at > org.apache.thrift.protocol.TBinaryProtocol.readFieldBegin(TBinaryProtocol.java:273) > > at > org.apache.hadoop.hive.metastore.api.FieldSchema$FieldSchemaStandardScheme.read(FieldSchema.java:461) > > at > org.apache.hadoop.hive.metastore.api.FieldSchema$FieldSchemaStandardScheme.read(FieldSchema.java:454) > > at > org.apache.hadoop.hive.metastore.api.FieldSchema.read(FieldSchema.java:388) > at > org.apache.hadoop.hive.metastore.api.StorageDescriptor$StorageDescriptorStandardScheme.read(StorageDescriptor.java:1269) > > at > org.apache.hadoop.hive.metastore.api.StorageDescriptor$StorageDescriptorStandardScheme.read(StorageDescriptor.java:1248) > > at > org.apache.hadoop.hive.metastore.api.StorageDescriptor.read(StorageDescriptor.java:1110) > > at > org.apache.hadoop.hive.metastore.api.Partition$PartitionStandardScheme.read(Partition.java:1270) > > at > org.apache.hadoop.hive.metastore.api.Partition$PartitionStandardScheme.read(Partition.java:1205) > > at org.apache.hadoop.hive.metastore.api.Partition.read(Partition.java:1062) > at > org.apache.hadoop.hive.metastore.api.PartitionsByExprResult$PartitionsByExprResultStandardScheme.read(PartitionsByExprResult.java:420) > > at > org.apache.hadoop.hive.metastore.api.PartitionsByExprResult$PartitionsByExprResultStandardScheme.read(PartitionsByExprResult.java:399) > > at > org.apache.hadoop.hive.metastore.api.PartitionsByExprResult.read(PartitionsByExprResult.java:335) > > at > org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$get_partitions_by_expr_result$get_partitions_by_expr_resultStandardScheme.read(ThriftHiveMetastore.java) > {code} > Making this configurable (and defaulting to a higher value) would allow these > tables to still be accessible. -- This message was sent by Atlassian Jira (v8.20.10#820010)