1

私はしばらくの間ハイブを使用していましたが、これについては考えたことはありませんでした。hive -f sql-fileでクエリを並行して実行しようとしていますか?誰かがそれを行う方法を知っていますか?ありがとう

4

6 に答える 6

0

Hive 上のすべてのクエリは Map-Reduce にコンパイルされ、Hadoop で実行されます。Map-reduce は並列処理フレームワークであるため、各 Hive クエリは並行して実行され、データを処理します。

私が尋ねたのと同じ質問ですが、いくつかの異なる方法で。詳細については、こちらを参照してください。

于 2013-02-12T09:35:45.700 に答える
0

ハイブ自体からそれを行う方法が見つからなかったので、これを選択しました。ファイル名/データベースをあなたのケースのものに置き換えるだけです。

# This file should have all the queries separated with semicolon ';'
queries=`cat queries_file.sql`
count=0
while true; do
    ((count++))
    query=`echo ${queries} | cut -d';' -f${count}`
    if [ -z "${query}" ]; then
        echo "Completed executing ${count} - 1 queries."
        exit
    fi  
    echo "${query}"
    hive --database "your_db" -e "${query};" &

    # This is optional. If you want to give some gap, say after every 5
    # concurrent queries, use this. Or remove next 4 lines.
    mod=`expr ${count} % 5`
    if [ ${mod} -eq 0 ]; then
        sleep 30
    fi  
done

編集:

かなり古いスレッドですが、他の人にとってより良いソリューションを更新することをまだ考えていました。xargs貼り付けたカスタム コードの代わりに、これを実現するために使用できます。ファイル内のすべてのクエリがセミコロンで終わると仮定すると、次の xargs コマンドを使用できます。

cat queries.hql | sed 's/;$//g' | xargs -d';' -n1 -I{} -P20 -r bash -c "hive --database ${your_db} -e '{}'"

where-P20は、20 個のクエリを並行して実行することを示しています。

于 2016-07-28T13:24:26.530 に答える