2012-03-21 6 views
2

私はHiveを使用してJaspersoft iReportを使用していくつかのレポートを実行しようとしていますが、Hiveクエリのレデューサーの数を設定しようとした場合を除いて正常に動作します。この質問は、Hive JDBCを使って減速機の数を設定する一般的なケースに当てはまるかもしれないと思います。Jaspersoft iReport - Hiveクエリのレデューサーの数を設定する方法は?

どうすればいいですか?

答えて

1

2つのSQL文(またはHiveQL文)をレポートクエリに入れることはできません。

set mapred.running.reduce.limit = 25; 
SELECT name, phone_office, billing_address_city, billing_address_street, billing_address_country FROM accounts; 

通常、私は、JDBC接続には、このようにプロパティを置くと思うだろう:これは、このようなクエリ文字列を使用することはできません。しかし、私が知る限り、ハイブはこれをサポートしていません。しかし、私はあなたがメインのクエリとして "セット" HiveQLステートメントを置くことでこれを回避できると思います。次に、 "選択"クエリをサブデータセットとして配置します。この考えをテストしたレポートの抜粋です:

<subDataset name="Accounts"> 
    <queryString language="HiveQL"> 
     <![CDATA[SELECT name, phone_office, billing_address_city, billing_address_street, billing_address_country FROM accounts]]> 
    </queryString> 
    <field name="name" class="java.lang.String"/> 
    <field name="phone_office" class="java.lang.String"/> 
    <field name="billing_address_city" class="java.lang.String"/> 
    <field name="billing_address_street" class="java.lang.String"/> 
    <field name="billing_address_country" class="java.lang.String"/> 
</subDataset> 
<queryString language="HiveQL"> 
    <![CDATA[set mapred.running.reduce.limit = 25]]> 
</queryString> 

私は報告書がこのように機能することを確認します。私のサブデータセットは、あなたが期待するようにTableコンポーネントを埋めます。私はそれが真にリデューサーの数を制限したことを確認する簡単な方法はありません...しかしそれはすべきです。

+0

私はこれを試してみますが、この解決策では、このレポートで使用されているすべてのクエリに対して「グローバル」な数のレデューサーしか設定されていませんが、設定できませんこれはクエリごとに行われます。 – wlk

+0

はい、そうです。一般に、レポートは単一のクエリに基づいています。もちろん、これは必ずしもそうではありません。だから私はこの制限があなたに影響することは珍しいと思う。それが重要だと思いますか? – mdahlman

+0

現時点では、テーブルやチャート(PDFの20-30ページなど)に関するレポートが多数ありますが、基本的にはテーブル/チャートごとに1つのクエリが実行されるため、約20-30のクエリが実行されます(HiveとRDBMSの異なるデータソース: – wlk

関連する問題