본문 바로가기
빅데이터/hive

[hive] 벡터화(vectorized) 처리

by hs_seo 2020. 1. 7.

하이브 성능 향상의 한 방법인 벡터화(vectorized) 처리는 한 번에 처리하는 데이터의 양을 늘려서 CPU 사용률을 높이고, 처리속도를 빠르게 하는 기법입니다.  검색, 필터, 집계, 조인 처리에서 사용되고, 한 번에 1024개의 행을 동시에 처리하여 속도를 높입니다. 

 

벡터화 설정을 하면 1024행(row)의 블록으로 한번에 작업을 처리합니다. 하나의 블록에서 열(column)은 배열로 처리됩니다. 아래의 클래스와 같이 칼럼이 ColumnVector클래스 배열로 한 번에 읽어서 처리합니다. 

 

 

조회, 필터링 등에 벡터화를 이용하면 한번에 처리하는 작업이 증가하여 속도가 빨라지게 됩니다. 16억 건의 데이터를 이용해서 count명령을 처리한 결과 벡터화 처리를 하지 않으면 67.6초, 벡터화 처리를 하면 31.5초로 성능이 향상되는 것을 확인하였습니다. 몇 번의 테스트 결과 count 같은 경우에는 40~50% 정도의 성능 향상을 확인할 수 있었습니다. 

 

벡터화 처리

벡터화 처리를 위해서는 데이터를 ORC 포맷으로 저장하고, 다음의 옵션을 설정해야 합니다.

-- 기본값은 false
set hive.vectorized.execution.enabled=true;

사용가능 데이터 타입

  • tinyint
  • smallint
  • int
  • bigint
  • boolean
  • float
  • double
  • decimal
  • date
  • timestamp (see Limitations below)
  • string

사용 가능 쿼리

  • arithmetic: +, -, *, /, %
  • AND, OR, NOT
  • comparisons <, >, <=, >=, =, !=, BETWEEN, IN ( list-of-constants ) as filters
  • Boolean-valued expressions (non-filters) using AND, OR, NOT, <, >, <=, >=, =, !=
  • IS [NOT] NULL
  • all math functions (SIN, LOG, etc.)
  • string functions SUBSTR, CONCAT, TRIM, LTRIM, RTRIM, LOWER, UPPER, LENGTH
  • type casts
  • Hive user-defined functions, including standard and generic UDFs
  • date functions (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, UNIX_TIMESTAMP)
  • the IF conditional expression

Explain 확인

벡터화 처리가 가능한 쿼리인지는 Explain 명령으로 확인할 수 있습니다. 벡터화 처리가 가능하면 아래와 같이 vectorized 문구를 확인할 수 있습니다. 

 

STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Alias -> Map Operator Tree:
        alltypesorc
          TableScan
            alias: vectorizedtable
             Statistics: Num rows: 1 Data size: 95 Basic stats: COMPLETE Column stats: COMPLETE
            Select Operator
              Statistics: Num rows: 1 Data size: 95 Basic stats: COMPLETE Column stats: COMPLETE
              Group By Operator
                aggregations: count()
                mode: hash
                outputColumnNames: _col0
                Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
                Reduce Output Operator
                  sort order:
                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
                  value expressions: _col0 (type: bigint)
      Execution mode: vectorized
      Reduce Operator Tree:
        Group By Operator
          aggregations: count(VALUE._col0)
          mode: mergepartial
          outputColumnNames: _col0
          Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
          File Output Operator
            compressed: false
            Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
            table:
                input format: org.apache.hadoop.mapred.TextInputFormat
                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink

 

상세한 내용은 하이브의 위키에서 확인할 수 있습니다. 

 

https://cwiki.apache.org/confluence/display/Hive/Vectorized+Query+Execution

 

Vectorized Query Execution - Apache Hive - Apache Software Foundation

Introduction Vectorized query execution is a Hive feature that greatly reduces the CPU usage for typical query operations like scans, filters, aggregates, and joins. A standard query execution system processes one row at a time. This involves long code pat

cwiki.apache.org

 

반응형