使用 Apache Kudu 实现多租户
Multi-tenancy implementation with Apache Kudu
我正在使用 apache Kudu 实现大数据系统。初步要求如下:
- 支持多租户
- 前端将使用 Apache Impala JDBC 驱动程序来访问数据。
- 客户将在 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 的数据等。
问题:
- 这是实施多租户的可接受table方式还是有更好的方式(可能与其他外部服务一起使用)
- 如果以这种方式实施,我如何限制 customer2 在 Kudu 中访问 cust1.table,尤其是当客户出于分析目的编写自己的 spark 作业时。
我们与 Cloudera 人员进行了会谈,以下是我们收到的针对我在上面发布的问题的回复
问题:
- 这是实现多租户的可接受table方式还是有更好的方式(可能与其他外部服务一起使用)
- 如果以这种方式实施,我如何限制 customer2 在 Kudu 中访问 cust1.table,尤其是当客户出于分析目的编写自己的 spark 作业时。
答案:
正如 Samson 在评论中指出的那样,Kudu 目前没有访问权限或完全访问权限策略。因此,建议的选项是使用 Impala 访问 Kudu。
因此,不是让每个 table 都有 TenantID 列,而是单独创建每个租户 table。这些 Kudu tables 在 Impala 中映射为外部 tables(最好在单独的 Impala 数据库中)。
然后使用 Impala 中的哨兵授权控制对这些 table 的访问。
对于 Spark SQL 访问,建议的方法是仅使 Imapala tables 可见,而不直接访问 Kudu tables。然后在 Impala 级别再次处理身份验证和授权要求,然后 Spark 作业才能访问下面的 Kudu tables.
我正在使用 apache Kudu 实现大数据系统。初步要求如下:
- 支持多租户
- 前端将使用 Apache Impala JDBC 驱动程序来访问数据。
- 客户将在 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 的数据等。
问题:
- 这是实施多租户的可接受table方式还是有更好的方式(可能与其他外部服务一起使用)
- 如果以这种方式实施,我如何限制 customer2 在 Kudu 中访问 cust1.table,尤其是当客户出于分析目的编写自己的 spark 作业时。
我们与 Cloudera 人员进行了会谈,以下是我们收到的针对我在上面发布的问题的回复
问题:
- 这是实现多租户的可接受table方式还是有更好的方式(可能与其他外部服务一起使用)
- 如果以这种方式实施,我如何限制 customer2 在 Kudu 中访问 cust1.table,尤其是当客户出于分析目的编写自己的 spark 作业时。
答案:
正如 Samson 在评论中指出的那样,Kudu 目前没有访问权限或完全访问权限策略。因此,建议的选项是使用 Impala 访问 Kudu。
因此,不是让每个 table 都有 TenantID 列,而是单独创建每个租户 table。这些 Kudu tables 在 Impala 中映射为外部 tables(最好在单独的 Impala 数据库中)。
然后使用 Impala 中的哨兵授权控制对这些 table 的访问。
对于 Spark SQL 访问,建议的方法是仅使 Imapala tables 可见,而不直接访问 Kudu tables。然后在 Impala 级别再次处理身份验证和授权要求,然后 Spark 作业才能访问下面的 Kudu tables.