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