私は2つのサーバーを持っています。最初のサーバー (A) には、zookeeper、mongodb データベース、およびドリルビットが含まれています。2 番目のサーバー (B) には、複数のハイブ テーブル、postgresql データベース、およびその他のドリルビットを備えた Hadoop ディストリビューションが含まれています。どちらのドリルビットも、サーバー A の飼育係に接続されているため、ドリル ホームページ上でお互いを見ることができます。以下のようなクエリが実行されると (ビュー dfs.lineorder はサーバー B のハイブと postgresql データで構成されます)、ドリルビットB が職長となり、すべてを実行します。mongodb テーブルを処理する部分をサーバー A のドリルビットに委任しないため、クエリの実行に必要な時間 (約 30 分) の 90% が、サーバー A からサーバー B への mongodb コレクションの送信に費やされます。ドリルビット B にクエリの mongodb 部分をドリルビット 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):
ドリルビット A (Windows Server 2008): drill.exec: { cluster-id: "drillbits1", zk.connect: "serverA:2181", impersonation: { enabled: true, max_chained_user_hops: 3 } }
ドリルビット B (Cloudera CDH 5.8.0): drill.exec: { cluster-id: "drillbits1", zk.connect: "serverA:2181", impersonation: { enabled: true, max_chained_user_hops: 3 } }