복붙노트

[HADOOP] Hive는지도 축소를 사용할 때와 사용하지 않을 때를 어떻게 결정합니까?

HADOOP

Hive는지도 축소를 사용할 때와 사용하지 않을 때를 어떻게 결정합니까?

간단한 예로서,

select * from tablename;

지도를 축소하지 않습니다.

select count(*) from tablename;

그렇습니다. 지도 축소 (하이브로)를 사용할시기를 결정하는 데 사용되는 일반적인 원칙은 무엇입니까?

해결법

  1. ==============================

    1.일반적으로 min / max / count와 같은 모든 종류의 집계는 MapReduce 작업을 필요로합니다. 이것은 아마 당신을 위해 모든 것을 설명하지는 않을 것입니다.

    일반적으로 min / max / count와 같은 모든 종류의 집계는 MapReduce 작업을 필요로합니다. 이것은 아마 당신을 위해 모든 것을 설명하지는 않을 것입니다.

    Hive는 많은 RDBMS 스타일로 Hive 쿼리가 MapReduce 작업으로 변환되는 방법을 설명하는 EXPLAIN 키워드를 가지고 있습니다. 두 예제 쿼리 모두에 대해 explain을 실행하고 그 뒤에 무엇을하려고하는지보십시오.

  2. ==============================

    2.tablename에서 select *와 같은 쿼리를 실행할 때마다 Hive는 데이터 파일을 읽고 집계 (최소 / 최대 / 개수 등)없이 전체 데이터를 가져옵니다. mapreduce 작업보다는 FetchTask를 호출합니다.

    tablename에서 select *와 같은 쿼리를 실행할 때마다 Hive는 데이터 파일을 읽고 집계 (최소 / 최대 / 개수 등)없이 전체 데이터를 가져옵니다. mapreduce 작업보다는 FetchTask를 호출합니다.

    이것은 하이브의 최적화 기술이기도합니다. hive.fetch.task.conversion 속성 can (즉, FETCH 작업)은지도 - 오버 헤드 오버 헤드의 대기 시간을 최소화합니다.

    이것은 우리가 hadoop 파일을 읽는 것과 같습니다 : hadoop fs -cat filename

    그러나 tablename에서 select colNames를 사용하면로드하는 파일에서 파싱하여 각 행의 '열'을 추출해야하므로 map-reduce 작업이 필요합니다.

  3. ==============================

    3.HDFS의 파일에서 원시 데이터를 읽으므로 MapReduce가 없으면 훨씬 빠릅니다.

    HDFS의 파일에서 원시 데이터를 읽으므로 MapReduce가 없으면 훨씬 빠릅니다.

  4. ==============================

    4.최적화 기법 인 hive.fetch.task.conversion 속성은 (FETCH) 태스크가 mapreduce 오버 헤드의 대기 시간을 최소화 할 수 있습니다.

    최적화 기법 인 hive.fetch.task.conversion 속성은 (FETCH) 태스크가 mapreduce 오버 헤드의 대기 시간을 최소화 할 수 있습니다.

    SELECT, LIMIT, FETCH 쿼리를 수행 할 때이 특성을 생략하면 mapreduce를 건너 뛰고 FETCH 태스크를 사용합니다.

    이 속성은 none, minimal (기본값) 등 3 가지 값을 가질 수 있습니다.

  5. from https://stackoverflow.com/questions/7466454/how-does-hive-decide-when-to-use-map-reduce-and-when-not-to by cc-by-sa and MIT license