Sentry 无法将 Hive 表访问控制列表的全图快照发送到 HDFS,从而导致 HDFS ACL 和 Hive 表 ACL 不同步。
我正在运行 Cloudera CDH 5.14.2,它包含 Sentry 1.5.1 和 Hadoop 2.6.0。我已经启用了与 HDFS 的 Sentry 和 ACL 同步。
最近为了刷新HDFS log4j中的一些配置重启集群,但是系统恢复后发现Hive表和HDFS文件之间的ACL不同步。
然后我们回滚 log4j 配置并再次重新启动集群,但是 Hive 表和 HDFS 文件之间的 acls 仍然不同步。
经过一番排查,根据 sentry-2183,我们发现可能是 Hive 中的大量分区和表(实际上我们在 Hive 中有数百万个表和分区)造成的。所以我们在metastore服务器sentry.hdfs.service.client.server.rpc-connection-timeout
的hive-site.xml
文件里把配置改成1800000,但是还是不行。
我们注意到 Sentry 和 HDFS 日志中有警告和错误消息。在 Sentry 日志中,它显示有关以下内容的警告:
“警告 org.apache.thrift.transport.TIOStreamTransport:关闭输出流时出错。java.net.SocketException:套接字关闭”
在 HDFS 中,它显示错误:
“ERROR orgapache.sentry.core.common.transport.RetryClientInvocationHandler: failed to execute getAllUpdateFrom java.lang.reflect.InvocationTargetException”,这是由“org.apache.thrift.transport.TTransportException: java.net.SocketTimeoutExcpetion: Read time”引起的出去”
任何想法 ?