我目前在AWS之外有一个Kubernetes设置,其中一个驻扎在Amazon S3的数据湖使用Presto v348进行查询。数据是以parquet文件格式存储的。额外的组件是一个Hive元存储。
我遇到了以下的错误,并且在排查根本问题方面感到很茫然。
io.prestosql.spi.PrestoException: Unable to execute HTTP request: Connect to s3-eu-central-1.amazonaws.com:80 [s3-eu-central-1.amazonaws.com] failed: connect timed out
这个问题有时会在较大的查询中出现,有趣的是,它使系统进入一种状态,即所有后续查询都会超时。在有些情况下,1/5的查询会成功。一般来说,较小的查询可以完全正常工作。这种情况在大约10-20分钟后会好转。重新启动Presto并不能解决10-20分钟的问题。因此,我怀疑一定有其他问题。
我知道我可能会遇到一个性能上限,但事实上,没有错误,只有超时,整个系统在10-20分钟内无法使用,这是不能接受的。
我已经增加了配置,如Presto中的hive.s3.max-connections
,元存储配置中的fs.s3a.connection.maximum
,但似乎并没有解决问题。除了这些,我没有发现关于如何调整设置以防止错误发生的建议。
Presto连接器配置。
connector.name=hive-hadoop2
hive.metastore.uri=thrift://hive-metastore:9083
hive.metastore.username=prestodb
hive.s3.aws-access-key="S3_ACCESS_KEY"
hive.s3.aws-secret-key="S3_SECRET_KEY"
hive.s3.endpoint=s3-eu-central-1.amazonaws.com
hive.s3.ssl.enabled=false
hive.s3.path-style-access=true
hive.parquet.use-column-names=true
hive.allow-drop-table=true
hive.s3-file-system-type=PRESTO
hive.s3.max-connections=50000
hive.s3select-pushdown.max-connections=50000
hive.s3.connect-timeout=60s
hive.allow-rename-column=true
Metatore配置。
core-site.xml: |
<configuration>
<property>
<name>fs.s3a.connection.ssl.enabled</name>
<value>false</value>
</property>
<property>
<name>fs.s3a.access.key</name>
<value>xxx</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>xxx</value>
</property>
<property>
<name>fs.s3a.fast.upload</name>
<value>true</value>
</property>
<property>
<name>fs.s3a.connection.maximum</name>
<value>50000</value>
</property>
<property>
<name>fs.s3a.connection.establish.timeout</name>
<value>60000</value>
</property>
<property>
<name>fs.s3a.threads.max</name>
<value>64</value>
</property>
<property>