0

我正在使用 apache Kudu 实现大数据系统。初步要求如下:

  1. 支持多租户
  2. 前端将使用 Apache Impala JDBC 驱动程序来访问数据。
  3. 客户将在 Kudu 上为分析用例编写 Spark 作业。

由于 Kudu 不支持多租户 OOB,所以我可以想到以下方式来支持多租户。

方法:

每个表都有tenantID 列,所有租户的所有数据都将存储在具有相应tenantID 的同一个表中。

将 Kudu 表映射为 Impala 中的外部表。为这些表创建视图,并为每个租户使用 where 子句,例如

CREATE VIEW IF NOT EXISTS cust1.table AS SELECT * FROM table WHERE tenantid = 'cust1';

Customer1 将访问表 cust1.table 以使用 impala JDBC 驱动程序或 Spark 访问 cust1 的数据。Customer2 将访问表 cust2.table 以访问 cust2 的数据等。

问题:

  1. 这是实现多租户的可接受方式还是有更好的方法(可能与其他外部服务一起使用)
  2. 如果以这种方式实现,我如何限制 customer2 访问 Kudu 中的 cust1.table,尤其是当客户出于分析目的编写自己的 spark 作业时。
4

1 回答 1

0

我们与 Cloudera 人员进行了一次会议,以下是我们收到的对我在上面发布的问题的回复

问题:

  1. 这是实现多租户的可接受方式还是有更好的方法(可能与其他外部服务一起使用)
  2. 如果以这种方式实现,我如何限制 customer2 访问 Kudu 中的 cust1.table,尤其是当客户出于分析目的编写自己的 spark 作业时。

答案:

  1. 正如 Samson 在评论中指出的那样,Kudu 目前没有访问权限或完全访问权限政策。因此建议的选项是使用 Impala 访问 Kudu。

    因此,不是让每个表都有 TenantID 列,而是单独创建每个租户表。这些 Kudu 表在 Impala 中映射为外部表(最好在单独的 Impala 数据库中)。

    然后使用 Impala 中的 Sentry Authorization 控制对这些表的访问。

  2. 对于 Spark SQL 访问,建议的方法是仅使 Imapala 表可见,而不直接访问 Kudu 表。然后在 Spark Jobs 被授予访问底层 Kudu 表的访问权限之前,在 Impala 级别再次处理身份验证和授权要求。

于 2017-05-09T18:55:50.360 回答