Apache Kudu的多租户实现

时间:2017-04-25 22:24:52

标签: multi-tenant impala apache-kudu

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

  1. 支持多租户
  2. 前端将使用Apache Impala JDBC驱动程序来访问数据。
  3. 客户将在Kudu上编写Spark Jobs以获取分析用例。
  4. 由于Kudu不支持多租户OOB,我可以考虑以下方式来支持多租户。

    方式:

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

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

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

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

    问题:

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

1 个答案:

答案 0 :(得分:0)

我们与Cloudera人开了个会,以下是我们收到的关于我上面发布的问题的回复

的问题:

  1. 这是实施多租户的可接受方式还是有更好的方法(可能与其他外部服务一起)
  2. 如果以这种方式实施,我如何限制customer2访问Kudu中的cust1.table,尤其是当客户为了分析目的而编写自己的火花作业时。
  3. 的答案:

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

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

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

    2. 对于Spark SQL访问,建议的方法是只显示Imapala表,而不是直接访问Kudu表。然后在Impala级别再次处理身份验证和授权要求,然后授予Spark作业访问Kudu表的权限。