HiveQL

row_number

SELECT
  ROW_NUMBER() OVER(ORDER BY name ASC) AS rno, // 1
  *
FROM database.table
SELECT
  ROW_NUMBER() OVER(ORDER BY (SELECT 0)) AS rno, // 1
  *
FROM database.table

subquery 에러

SEELCT *
FROM (
  SELECT ...
  FROM
- )
+ ) AS tmp (1)
WHERE ...
GROUP BY ...
  1. FROM 절 안에 있는 서브쿼리에 AS 없으면 에러 발생

Zeppelin

제플린

  • notebook 안에 여러 paragraph

Configuration

설정 확인하는 방법
SET hive.auto.convert.join;
SET hive.tez.container.size;
  • hive.auto.convert.join=true: 맵-조인시 사용. (default: true)

  • hive.auto.convert.join.noconditionaltask.size=100000000: 메모리 사이즈(기본 10MB)

    메모리에 올라가는 데이터 기준 사이즈이므로, 파일의 사이즈와는 다름. desc formatted 로 테이블 정보를 확인하여 화깅ㄴ할 수 있는 테이블 파라미터의 rawDataSize 기준으로 설정해야 함. Tez 컨테이너의 1/3 권장.

  • hive.mapjoin.smalltable.filesize: 조인할때 작은 테이블인지 판단하는 기준. 기본 25MB

Yarn

  • Yarn이 Container를 Job(Tez)에 만들어주는데, Yarn monitor가 container들의 task의 메모리 사용를이 limit를 넘기면 kill?

  • Java로 만들어진 task라면 JVM 옵션도 확인 필요. Container 안에서 실행되므로 Heap 사이즈가 Container 보다 작아야 함

Table 1. Yarn 설정
설정 설명

yarn.nodemanager.resource.memory-mb

주어진 노드에서 클러스터에 사용할 수 있는 총 메모리 사이즈

yarn.scheduler.minimum-allocation-mb

Yarn 컨테이너당 할당할 수 있는 최소 메모리(mb)

yarn.scheduler.maximum-allocation-mb

Yarn 컨테이너당 할당할 수 있는 최대 메모리(mb)

yarn.scheduler.increment-allocation-mb

컨테이너에 추가로 할당할 수 있는 메모리. 현재 선호하지 않는 설정으로 yarn.resource-types.memory-mb.increment-allocation 권장. 기본값 1024mb. (ref)

Tez

테즈

  • Hive 실행 엔진

  • Apache Hadoop YARN 기반으로 만들어짐

  • Hive2의 기본 엔진

  • 기존의 MR(MApReduce)에 비해 성능이 향상되는 효과 얻을 수 있음

    • 하둡의 중심 모듈중 하나, 분산처리엔진

  • 리듀스 작업간에 교화되는 데이터를 정렬할 필요가 없는 경우에 특화

  • Hive의 데이터 조인 쿼리를 더 효율적으로 실행 & 데이터 흐름을 효율적으로 구현에 목표

  • 아파치 스파크는 반복연산에 더 적합한 개념과 기능을 제공하는 in-memory 데이터 처리 엔진

Configuration

tez config

tez properties

Table 2. AM(Application Master) 설정
설정 설명

tez.am.resource.memory.mb=2048

AM의 메모리

tez.am.java.opts=-Xmx1600m

AM이 사용할 힙-메모리 사이즈(tex.am.resource.memory.mb 의 80%)

Table 3. Tez 컨테이너 설정
설정 설명

hive.tez.container.size=2048

tez 작업을 진행하는 컨테이너의 크기

일반적으로 YARN 컨테이너 크기와 같거나 1~2배수이며, yarn.scheduler.maximum-allocation-mb 보다 초과해서는 안됨.

tez.task.resource.memory.mb

Tez 컨테이너에서 시작된 작업이 사용하는 메모리 크기. 기존값은 1024MB.

hive.tez.java.opts=-Xmx1600m

컨테이너에서 사용할 수 있는 힙메모리 크기(hive.tez.container.size 의 80%)

tez.task.resource.memory.mb

작업에서 사용할 메모리 크기(MB). 모든 vertex의 모든 작업에 적용됨. 모든 작업에 동일한 값으로 적용하면 컨테이너 재사용에 도움이 되므로 일반적으로 성능에 좋음. (default: 1024)

Vertex

사용자 로직을 실행하는 데 필요한 리소스 및 환경을 정의합니다. 사용자는 작업의 각 단계별로 Vertex 개체를 만들고 DAG에 추가합니다.

tez.runtime.io.sort.mb=800

출력 결과를 정렬해야 할 때 사용할 메모리(hive.tez.container.size 의 40%)

hive.auto.convert.join.noconditionaltask.size=600

맵조인에 사용하는 메모리(hive.tez.container.size 의 33%)