使用 Apache Kudu 实现多租户

Multi-tenancy implementation with Apache Kudu

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

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

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

方式:

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

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

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

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

问题:

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

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

问题:

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

答案:

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

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

    然后使用 Impala 中的哨兵授权控制对这些 table 的访问。

  2. 对于 Spark SQL 访问,建议的方法是仅使 Imapala tables 可见,而不直接访问 Kudu tables。然后在 Impala 级别再次处理身份验证和授权要求,然后 Spark 作业才能访问下面的 Kudu tables.