我正在使用apachekudu实现大数据系统。初步要求如下:
支持多租户
前端将使用apacheimpalajdbc驱动程序来访问数据。
客户将在kudu上为分析用例编写spark作业。
因为kudu不支持多租户oob,所以我可以考虑下面的方法来支持多租户。
方式:
每个表都有tenantid列,所有租户的所有数据都将与对应的tenantid存储在同一个表中。
将kudu表Map为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作业时。
1条答案
按热度按时间toe950271#
我们与cloudera的员工进行了一次会面,下面是我们对我在上面发布的问题的回复
问题:
这是一种可以接受的实现多租户的方法,还是有更好的方法(可以与其他外部服务一起实现)
如果以这种方式实现,我如何限制customer2访问kudu中的cust1.table,特别是当客户出于分析目的编写自己的spark作业时。
答案:
正如samson在评论中指出的,kudu目前要么没有访问权限,要么没有完全访问策略。因此,建议使用 Impala 进入Kudu。
因此,不是每个表都有tenantid列,而是分别创建每个tenants表。这些kudu表在impala中Map为外部表(最好在单独的impala数据库中)。
然后使用impala中的sentry授权来控制对这些表的访问。
对于sparksql访问,建议的方法是只使imapala表可见,而不是直接访问kudu表。在spark作业被授予访问下面kudu表的权限之前,身份验证和授权需求将在impala级别再次处理。