2017-05-16 9 views
1

私はimpala-shellを使用していくつかの大きなクエリを実行し、パフォーマンスが満足できるものであることを発見しました。これらのクエリは通常、100k-1m行をディスクに書き込みます。ただし、JDBCを使用してプログラムで同じクエリを実行すると、結果がディスクに書き込む時間が大幅に長くなります。たとえば、impala-shellから5分かかるクエリは、JDBCに対して30分かかります。JDBCを介したインパラのストリーミングが遅い

私はHiveとCloudera JDBCドライバの両方を試しましたが、同様に悪い性能を得ました。私は様々なフェッチサイズを試しましたが、それは何の違いもありませんでした。基本的にImpalaがJDBCを介してストリーミングしていますか、ストリーミングを高速化するために何か他のことを行うことはできますか?

これはCDH5.9.1です。

+0

「ストリーミング」とはどういう意味ですか?実行しているクエリの例を表示できますか? –

+0

基本的に、 'INSERT SELECT'クエリを実行している場合、クライアントアプリケーションはデータを*転送しませんので、"フェッチサイズ "は効果がありません。また、1000個のミニクエリを順番に実行することは、少なくとも1000個のHDFSファイル(レプリケーションx3)を作成することを意味します。これは、1つの大きなクエリを実行する場合と同じではありません。 –

答えて

0

これはクライアント側の問題であることが判明しました。 Impalaのクエリを作成していたWebアプリケーションをテストするためにカールを使用していました。 curlからScalaコードで書かれたクライアントに切り替えると、待ち時間がなくなりました。