、ハイブはマップリダクションを使用する時期としない場合をどのように決定しますか?簡単な例として
select count(*) from tablename;
はDOESながら
select * from tablename;
は、マップ削減にキックするものではありません。マップ・リダクション(ハイブによる)をいつ使うべきかを決める一般原則は何ですか?
、ハイブはマップリダクションを使用する時期としない場合をどのように決定しますか?簡単な例として
select count(*) from tablename;
はDOESながら
select * from tablename;
は、マップ削減にキックするものではありません。マップ・リダクション(ハイブによる)をいつ使うべきかを決める一般原則は何ですか?
一般に、min/max/countなどの任意の種類の集計では、MapReduceジョブが必要になります。おそらく、あなたのためにすべてを説明するつもりはありません。
ハイブは、多くのRDBMSのスタイルで、EXPLAIN
キーワードを持ち、HiveクエリがMapReduceジョブにどのように変換されるかを概説します。両方のサンプル・クエリーで「explain」を実行し、その背後で何をしようとしているのかを見てください。
select * from tablename;
HDFSのファイルから生データを読み込むだけで、MapReduceを使用しなくてもはるかに高速です。
プロパティは、(FETCH)プロパティでmapreduceオーバーヘッドの遅延を最小化する最適化手法です。
SELECT、LIMIT、FETCHクエリを実行すると、このプロパティをスキップしてmapreduceをスキップし、FETCHタスクを使用します。
このプロパティの値は、none
,minimal
(デフォルト)、more
の3つです。我々はテーブル名から選択*のようなクエリを起動するたびに
は、ハイブは、データファイルを読み込み、任意のアグリゲーション(最小/最大/カウントなど)を実行せずに全体のデータを取得します。 mapreduceタスクではなく、FetchTaskと呼びます。
これはハイブの最適化手法でもあります。 hive.fetch.task.conversionプロパティ(つまり、FETCHタスク)は、マップ削減オーバーヘッドの待ち時間を最小限に抑えることができます。私たちは、Hadoopのファイル読んでいるよう
これ
は次のとおりです。のHadoopのfs -catファイル名をしかし、私たちはテーブル名から選択COLNAMESを使用する場合、それは抽出するために必要として、それはマップ-削減の仕事を必要としロードするファイルから解析することによって各行の '列'を作成します。
大きなファイルの場合は、すべてのノードから並列に読み込む必要があります。ハイブはMRなしでそれをしますか? – ernesto