我有两台服务器。第一台服务器 (A) 包含 zookeeper、一个 mongodb 数据库和一个钻头。第二个服务器 (B) 包含一个带有多个 hive 表、一个 postgresql 数据库和另一个钻头的 hadoop 发行版。两个钻头可以在钻头主页上看到彼此,因为它们都连接到服务器 A 上的 zookeeper。当运行如下查询时(视图 dfs.lineorder 包含服务器 B 上的 hive 和 postgresql 数据),drillbit B 成为工头并执行所有操作。它不会将处理 mongodb 表的部分委托给服务器 A 上的钻头,因此运行查询所需的 90% 时间(大约 30 分钟)用于将 mongodb 集合从服务器 A 发送到服务器 B。一种强制drillbit B将查询的mongodb部分委托给drillbit B的方法,或者这可能是一个错误配置问题?此外,是否可以将钻头配置为访问不同的数据库(例如,当每个钻头都可以访问不同的子网时,以便并非所有钻头都可以访问相同的数据库)?
示例查询:
SELECT SUM(revenue) AS revenue
FROM (
SELECT SUM(lo_extendedprice*lo_discount) AS revenue
FROM dfs.tmp.lineorder, dfs.tmp.`date`
WHERE lo_orderdate = d_datekey
AND d_year = 1993
AND lo_discount BETWEEN 1 AND 3
AND lo_quantity < 25
UNION ALL
SELECT SUM(lo_extendedprice * lo_discount) AS revenue
FROM mongo.test.ssb_europe ssb
WHERE ssb.orderdate.d_year = 1993
AND lo_discount BETWEEN 1 AND 3
AND lo_quantity < 25
);
配置(drill-override.conf):
在 Drillbit A (Windows Server 2008) 上:drill.exec: { cluster-id: "drillbits1", zk.connect: "serverA:2181", impersonation: { enabled: true, max_chained_user_hops: 3 } }
在 Drillbit B (Cloudera CDH 5.8.0) 上:drill.exec: { cluster-id: "drillbits1", zk.connect: "serverA:2181", impersonation: { enabled: true, max_chained_user_hops: 3 } }