使用 Apache Kudu 实现多租户
Posted
技术标签:
【中文标题】使用 Apache Kudu 实现多租户【英文标题】:Multi-tenancy implementation with Apache Kudu 【发布时间】:2017-04-25 22:24:51 【问题描述】:我正在使用 apache Kudu 实现大数据系统。初步要求如下:
-
支持多租户
前端将使用 Apache Impala JDBC 驱动程序来访问数据。
客户将在 Kudu 上为分析用例编写 Spark 作业。
由于 Kudu 不支持 Multitenancy OOB,所以我可以想到以下方式来支持 Multitenancy。
方式:
每个表都有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 的数据等等。
问题:
-
这是实现多租户的可接受方式还是有更好的方式(可能与其他外部服务一起使用)
如果以这种方式实施,我如何限制 customer2 访问 Kudu 中的 cust1.table,尤其是当客户出于分析目的编写自己的 spark 作业时。
【问题讨论】:
#2 > 你不能。目前,Kudu 没有授权机制。因此,任何可以联系平板服务器 IP/端口的人都可以在该服务器管理的任何表中读写。由于您希望所有租户在同一台平板电脑服务器上共享相同的表,因此您不能在网络级别限制访问。所以 #1 > 不,这似乎不是“可接受的”。 【参考方案1】:我们与 Cloudera 人员进行了一次会议,以下是我们收到的对我在上面发布的问题的回复
问题:
-
这是实现多租户的可接受方式还是有更好的方式来实现(可能与其他外部服务一起使用)
如果以这种方式实施,我如何限制 customer2 访问 Kudu 中的 cust1.table,尤其是当客户出于分析目的编写自己的 spark 作业时。
答案:
正如 Samson 在 cmets 中指出的那样,Kudu 目前没有访问权限或完全访问权限政策。因此建议的选项是使用 Impala 访问 Kudu。
因此,不是让每个表都包含 TenantID 列,而是单独创建每个租户表。这些 Kudu 表在 Impala 中映射为外部表(最好在单独的 Impala 数据库中)。
然后使用 Impala 中的 Sentry Authorization 控制对这些表的访问。
对于 Spark SQL 访问,建议的方法是仅使 Imapala 表可见,而不直接访问 Kudu 表。然后,在授予 Spark Jobs 访问底层 Kudu 表的访问权限之前,在 Impala 级别再次处理身份验证和授权要求。
【讨论】:
以上是关于使用 Apache Kudu 实现多租户的主要内容,如果未能解决你的问题,请参考以下文章