首页 > 解决方案 > Sentry 无法同步 HDFS 文件和 Hive 表之间的 ACL

问题描述

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-timeouthive-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”引起的出去”

在此处输入图像描述

任何想法 ?

标签: javahdfsthriftapache-sentry

解决方案


我们有相当大的hadoop集群并且面临同样的问题。在我们的例子中,我们为哨兵数据库重建 Postgres 索引,这会有所帮助。

CREATE INDEX "AUTHZ_PATH_FK_IDX" ON "AUTHZ_PATH" USING btree ("AUTHZ_OBJ_ID");

根据 Cloudera 手册:Oracle:

CREATE INDEX "AUTHZ_PATH_FK_IDX" ON "AUTHZ_PATH" ("AUTHZ_OBJ_ID");

阿帕奇德比:

CREATE INDEX AUTHZ_PATH_FK_IDX ON AUTHZ_PATH (AUTHZ_OBJ_ID);

IBM DB2:

CREATE INDEX AUTHZ_PATH_FK_IDX ON AUTHZ_PATH (AUTHZ_OBJ_ID);

https://www.cloudera.com/documentation/enterprise/release-notes/topics/cdh_rn_sentry_ki.html


推荐阅读