0

当我们运行 Hive 查询时,我试图了解各种 id 之间的关系。我正在考虑以下场景,建议用于真实集群。

ClientMachine---连接/ssh--> GatewayNode(比如user1,serverA)---> HiveServer2( ServerB---> Driver--> Remote MetaData Service (serverC)-->MySql (serverD)

实际数据存储在 中HDFS,可以有自己的一组用户。

现在,我的疑问是,我们每一层都有不同的用户,例如 MySQL DB、HDFS、HiveServer2 等;因此,如果我以 user1 身份登录 GatewayNode 并且该用户 ID 不在 HDFS 或 MySql 中,那么这种情况如何工作?

任何人都可以帮助理解这一点吗?

4

2 回答 2

2

HDFS/Hive 应配置为共享用户帐户。理想情况下,不具有与后端数据库相同的用户/密码信息。例如,您使用元存储用户和密码配置 hive 站点,但这不是 Hive 到用户的 Hadoop 用户。

这可以由外部系统通过 Pluggable Authentication Modules (PAM) 或 KERBEROS(例如 Active Directory)或 LDAP 启用。推荐后两种。

默认情况下,Hive 和 Hadoop 没有身份验证,并且用户名被视为字符串。

有关更多信息,请参阅有关身份验证的 Hive wiki

如果您想要一个安全的 Hadoop 集群,您需要设置一个 kerberized 环境,在每个 JVM 环境上设置 Java 密钥库,并且最好使用 Apache Ranger 或 Sentry 等工具来锁定访问并审核您的集群

于 2018-04-14T21:22:26.400 回答
1

只是试图提供一个易于遵循的流程。

浏览您想到的组件/节点流时:

ClientMachine ---connects / ssh--> GatewayNode (say user1, serverA) ---> HiveServer2( ServerB ---> Driver --> Remote MetaData Service (serverC) --> MySql (serverD)

请注意,我们需要考虑需要向服务提供商进行身份验证以使其服务可用的身份是什么。有了这个,让我们从右到左开始:

  1. MySQL:这托管元存储数据。只要客户端(此处为 Metastore 服务)已对其进行身份验证并已使用商定/配置的 MySQL DB 用户和密码打开经过身份验证的会话,此服务提供者就可以了。它不需要最终用户(即 user1)的可见性。
  2. 远程元数据服务:顾名思义,主要为 hiveserver2 提供元数据服务,但可以由其他服务使用,例如 spark、impala 等。这实际上是一个基于 thrift 的服务器,因此通常的身份验证模式是基于 Kerberos。因此,就身份验证而言,这似乎具有最终用户的可见性。另请参阅有关用户模拟的此Metastore 安全指南。
  3. HiveServer2:此处来自 Cloudera 的详细安全配置指南。这应该使用链接中解释的任何方法以及您问题的其他答案中提供的链接来验证最终用户(user1)。

但特别感兴趣的是HiveServer2 Impersonation部分

HiveServer2 中的模拟支持允许用户以连接用户而不是启动 HiveServer2 守护程序的超级用户身份执行查询和访问 HDFS 文件。模拟允许管理员使用 HDFS 文件和目录权限在文件级别强制执行访问策略。

于 2018-04-16T14:16:31.983 回答