2017-06-10 10 views
0

私は2台のサーバーを持っています。最初のサーバー(A)には、飼い猫、mongodbデータベース、ドリルビットが含まれています。 2番目のサーバ(B)には、複数のハイブテーブル、postgresqlデータベース、およびもう1つのドリルビットを持つhadoopディストリビューションが含まれています。どちらのドリルビットも、サーバAの飼育係に接続されているので、ドリルホームページで互いに見ることができます。以下のようなクエリを実行すると(ビューdfs.lineorderはサーバBのハイブとポストグルBは監督になり、すべてを実行します。 mongodbテーブルを扱うパーツをサーバーAのドリルビットに委任しないので、クエリを実行するのに要する時間の約90%(約30分)がサーバーAからサーバーBにmongodbコレクションを送信するのに費やされます。 drillbit Bにクエリのmongodb部分をドリルビットBに委任させる方法、またはこれが誤った設定の問題である可能性がありますか? また、ドリルビットを異なるデータベースにアクセスできるように設定できます(たとえば、各ドリルビットが異なるサブネットにアクセスすると、すべてのドリルビットが同じデータベースにアクセスできるわけではありません)。 dfs.tmp.lineorderからの収入 、dfs.tmp AS( SELECT SUM(lo_extendedprice * lo_discount)からの収入 AS SELECT SUM(売上高)date lo_orderdate = d_datekey AND d_year =:Apacheドリルデータベースとデータローカリティ

サンプルクエリ。 1 BETWEEN ssb.orderdate.d_year = 1993 とlo_discount SSB mongo.test.ssb_europeからの収入 AS 1993 と1と3 とlo_quantity UNION BETWEEN lo_discount ALL SELECT SUM(lo_extendedprice * lo_discount)AND 3 AND lo_quantity );

設定(ドリルoverride.conf):

drillbit A(Windows Server 2008の)上: drill.exec:{ クラスタID: "drillbits1"、 zk.connect:「サーバA:2181 」 偽装:{ が有効:真、 max_chained_user_hops:3 }}

drillbit B上(ClouderaのCDH 5.8.0): drill.exec:{ クラスタID: "drillbits1"、 zk.connect: "サーバA:2181"、 偽装:{ 有効:真、 max_chained_user_hops:3 }}

答えて

0

MongoDBのストレージプラグインが問題になる可能性があることが表示されます。問合せが2つの完全なサブクエリ(グループ化されている)に明確に分離されている場合、オプティマイザは作業を正常に分割します。 次のクエリは、2つのドリルビット間の作業を正しく分割します。

SELECT SUM(lo_revenue), d_year, p_brand1 
FROM (
    SELECT SUM(lo_revenue) AS lo_revenue, d_year, p_brand1 
    FROM dfs.tmp.lineorder, dfs.tmp.`date`, dfs.tmp.part, dfs.tmp.supplier 
    WHERE lo_orderdate = d_datekey 
    AND lo_partkey = p_partkey 
    AND lo_suppkey = s_suppkey 
    AND p_category = 'MFGR#12' 
    AND s_region = 'AMERICA' 
    GROUP BY d_year, p_brand1 
UNION ALL 
    SELECT SUM(TO_NUMBER(lo_revenue, '########.##')) AS lo_revenue, ssb.orderdate.d_year AS d_year, ssb.part.p_brand1 AS p_brand1 
    FROM mongo.test.ssb_europe ssb 
    WHERE IsNumeric(lo_revenue) 
    AND ssb.part.p_category = 'MFGR#12' 
    AND ssb.supplier.s_region = 'AMERICA' 
    GROUP BY ssb.orderdate.d_year, ssb.part.p_brand1 
) l 
GROUP BY d_year, p_brand1 
ORDER BY d_year, p_brand1;