Alluxio使用贴士:User Impersonation相关配置问题分析与解决

常用链接
Alluxio项目官网
Alluxio Inc网站
Alluxio在各大厂用例
关注Alluxio微信公众号:Alluxio_China

什么是用户模拟(User Impersonation)?

在计算机权限认证的相关场景中,模拟(Impersonation)是指一个用户代表另一个用户进行操作。例如,假设用户“yarn”具有连接到服务的凭证,但用户“foo”没有。因此,用户“foo”自身在常规情况下永远无法访问该服务。然而通过使用模拟机制,用户“yarn”可以访问该服务并模拟用户“foo”(代表用户“foo”行事),使得用户“foo”获得访问该服务的能力。因此,模拟让一个用户能够代表另一个用户访问服务。

谁是用户?

模拟机制定义了用户如何代表其他用户行事。因此,了解用户是谁很重要。Hadoop应用程序(例如Spark、Hive、Presto等)使用Hadoop Client与分布式文件系统HDFS(或其他HDFS兼容的文件系统,例如Alluxio)进行交互。在Alluxio与Hadoop应用程序一起运行的场景下,应用程序会包含两个客户端——Hadoop Client和Alluxio Client。当应用程序访问Alluxio URI(例如alluxio://host:port/my/path/)时,它将首先直接与HadoopClient交互。而在Hadoop Client内部,它将与Alluxio Client进行交互。最后,文件的访问实际上是由Alluxio Client直接与Alluxio master和Alluxio worker进行通信传输。

Hadoop Client和Alluxio Client可以指定用户或身份(identity)。由于Hadoop Client和Alluxio Client的用户可以独立指定,这意味着Hadoop Client的用户与Alluxio Client的用户可能不同。Hadoop Client的用户甚至可以与Alluxio Client的用户位于不同的命名空间中。例如,在同一应用程序中, Hadoop Client可能被指定为用户“foo”,而AlluxioClient被指定为用户“yarn”。

什么是Alluxio客户端侧Hadoop模拟(Alluxio Client-side HadoopImpersonation)?

Alluxio客户端侧Hadoop模拟旨在解决当HadoopClient的用户与Alluxio Client的用户不同所造成的混淆问题。由于Hadoop Client的用户和Alluxio Client的用户在同一应用程序中可能不同,因此Alluxio客户端侧Hadoop模拟会检查Hadoop Client的用户,然后尝试模拟该Hadoop Client的用户。

例如,假设正在运行的Hadoop应用程序将Hadoop Client的用户设定为“foo”,将Alluxio Client的用户设定为“yarn”。如果没有客户端侧Hadoop模拟,Alluxio Client将以用户“yarn”而不是“foo”的身份连接到Alluxio服务器(Alluxio master和Alluxio worker)。这意味着任何数据交互行为都将以用户“yarn”的身份进行。

但是,通过客户端侧模拟机制,Alluxio Client将设定Hadoop Client用户是“foo”,然后用户“yarn”模拟用户“foo”连接到Alluxio服务器。在这种情况下,所有数据交互都将以用户“foo”的身份进行。启用此模拟后,Alluxio Client可以代表相同的Hadoop Client的用户运行,从而实现与Alluxio无缝透明交互。

为什么会遇到这些错误?

使用Alluxio时,您可能会遇到类似“User yarn is not configured for any impersonation. impersonationUser: foo”的错误。这些是Alluxio服务器拒绝访问的错误信息,您可以在logs/master.log中或logs/worker.log中分别找到master或worker的报错信息,但这些错误有时也会传递给应用程序。

如果您看到此类错误,则表示未正确配置Alluxio服务器以启用客户端侧Hadoop模拟。此错误“User yarn is not configured for anyimpersonation. impersonationUser: foo”表示“以用户‘yarn’身份运行的应用程序正在连接到Alluxio服务,并且正在尝试模拟用户‘foo’,但是Alluxio服务器未配置为允许用户‘yarn’这样做。”

为什么要使用模拟机制?

一个很自然的问题是,这种情况下为何要使用模拟机制?Alluxio Client尝试模拟的原因是,当Alluxio Client检测到Hadoop Client的用户与Alluxio Client的用户不同时,Alluxio Client将尝试模拟Hadoop Client的用户。在运行示例中,Hadoop Client的用户是“foo”,因此如果应用程序直接与HDFS交互,它将以用户“foo”的身份读写文件。然而,在该场景中使用Alluxio时,Alluxio Client的用户是“yarn”(与用户“foo”不同)。因此,如果没有使用模拟,之前以用户“foo”的身份与HDFS交互的应用程序将以用户“yarn”的身份与Alluxio进行交互。由于身份不同,Alluxio Client的用户将尝试模拟Hadoop Client的用户。在此示例中,Alluxio的用户“yarn”将模拟用户“foo”。

如何解决这个错误?

解决该错误最简单的方法是在Alluxio服务器上正确配置模拟机制。这需要将以下参数添加到Alluxio服务器配置文件中并重新启动Alluxio服务:

alluxio.master.security.impersonation.<USER>.users=*

上述参数中的是一个占位符,必须使用具备模拟能力的实际用户名替换。对于本运行示例,它将是:

alluxio.master.security.impersonation.yarn.users=*

此配置意味着用户“yarn”能够模拟任何其他用户。因此,Alluxio服务器将允许用户“yarn”模拟用户“foo”,从而应用程序可以无缝地继续运行。

避免该错误的另一种方法是完全禁用客户端模拟机制。这就需要将客户端配置参数(不在服务器上)作如下设置:

alluxio.security.login.impersonation.username=_NONE_

上述设置会禁用客户端模拟功能,因此Alluxio Client不会尝试模拟Hadoop Client的用户。在本示例中,这意味着当应用程序与Alluxio交互时,所有读取和写入都将以用户“yarn”的身份进行,而不是用户“foo”。

相关配置的更多详细信息,请参阅模拟机制文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值