이슈 Hive external table을 생성하면 테이블을 drop 하더라도 하둡에는 그 데이터가 남게 됩니다. 이렇게 되면 legacy 데이터가 남아있는 것 자체가 문제가 될 뿐만 아니라 추후 동일한 이름의 테이블을 생성하면 남아있던 하둡 파일 때문에 데이터가 그대로 들어있는 경우가 발생합니다. 이런 경우에는 기존 파일을 삭제하려고 HDFS 명령어를 실행해도 권한 문제로 삭제가 되지 않습니다. 해결방법 위와 같은 상황이 발생하지 않도록 external table은 drop 하기 전에 alter 명령어로 테이블의 external 속성을 변경하고 drop 시켜야 합니다. ALTER TABLE [TABLE_NAME] SET TBLPROPERTIES ('EXTERNAL' = 'FALSE'); 이렇게 테이블 ..
Impala는 쿼리를 빠르게 수행하기 위해서 Hive 테이블의 메타데이터의 카피를 캐시로 가지고 있는 구조를 띄고 있습니다. 이렇게 캐시화 되어 있는 메타데이터를 활용하는 특징 때문에 간혹 Impala 외부에서 데이터의 변경이 일어난 경우에 별도의 작업을 처리해야 Impala shell 혹은 쿼리를 사용할 때에도 Sync가 맞는 데이터를 확인할 수 있는데요. 이 때 진행하는 별도의 작업이 바로 REFRESH입니다. REFRESH는 어떤 명령어일까? REFRESH 명령어는 하이브 메타스토어(HMS)에서 테이블의 메타데이터를 다시 불러오고 파일과 HDFS Name node 블록의 메타데이터를 증분적재하는 동작을 수행합니다. 즉, Impala 외부의 데이터의 변경사항을 다시 읽어오는 동작인 것이죠. 언제 RE..
파티션별로 데이터를 적재하려고 할 때, 간혹 파티션키로 사용되는 기준 날짜 컬럼을 자정을 기준으로 날짜별로 분할하는 것이 아닌 임의의 시간대로 분할해서 적재해야 할 때가 있습니다. 그런 경우에는 기준 날짜 컬럼을 시간으로 변환하여 컬럼을 만들어야 하는데, 다음과 같은 쿼리로 처리할 수 있습니다. ▶ 시간대로 나누어서 파티션 분할 적재하는 방법 예제에서는 날짜별로 데이터를 분할(00:00 ~ 23:59)해서 파티션에 적재하는 것이 아니라 06:00 ~ 익일 05:59까지를 기준으로 데이터를 분할해서 파티션에 적재하는 작업을 수행할 때 사용하는 쿼리를 작성해보았습니다. 해당하는 방법을 구글에 검색해보면 날짜를 yyyy, mm, dd, hh로 쪼개고 다시 각각 group by로 묶어서 조건문을 사용하라는 등 ..
안녕하세요. 임팔라에서도 여타 데이터베이스에서 활용했던 것처럼 쿼리 힌트(Query Hint)를 사용할 수 있습니다. 쿼리 힌트는 활용할 수 있는 통계가 없거나 성능이 안 좋은 쿼리에 대해서 성능을 일시적으로 개선하기 위한 방법으로 사용됩니다. 임팔라 쿼리 힌트 구문 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SELECT STRAIGHT_JOIN col1, col2, ... FROM table1 JOIN [{BROADCAST|SHUFFLE}] table2 on table1.col1 = table2.col1; INSERT ... [{SHUFFLE|NOSHUFFLE}] SELECT ...; SELECT ... FROM table /* +{SCHEDULE_CACHE_LOCAL | S..
안녕하세요. 이번 시간에는 Impala의 실행계획에 대해서 살펴보도록 하겠습니다. 임팔라의 실행계획은 확인하고 싶은 쿼리의 앞에 EXPLAIN 명령을 붙여서 쿼리를 직접 실행하지 않고 실행계획을 확인하는 것이 가능합니다. 임팔라는 쿼리를 실행하기 전에 아래와 같은 사항들을 판단하고 쿼리를 실행하게 됩니다. ▶ 임팔라의 쿼리 실행 전 판단 내용 1. 어떤 데이터 노드의 로컬 저장소에서 어떤 데이터를 읽어 올 것인지 2. 다른 노드로 테이블 전체를 보낼 수 있을 정도로 작은 테이블은 어떤 테이블이 있는지 3. 다른 노드로 보내기에 너무 큰 테이블이라서 작게 분할해서 전송할 테이블이 있는지 4. 각각의 조인 단계에서 데이터를 전송하고 중간 결과를 최소화 할 수 있는 효율적인 작업 순서를 고려 출력된 실행계획은..
안녕하세요. 이번 포스팅에서는 임팔라를 활용해서 데이터를 처리할 때 메모리를 최적화해서 작업하는 방법에 대해서 살펴보도록 하겠습니다. 데이터베이스를 운영할 때와 마찬가지로 임팔라를 사용할 때에도 메모리를 최적화 하는 것이 전체 성능에 큰 영향을 주게 됩니다. 메모리 사용량을 증가시키는 일부 쿼리들이 있기 때문에 이 쿼리들을 사용할 때는 주의해서 사용해야 합니다. ▶ 메모리를 많이 사용하는 쿼리 1. ORDER BY: 정렬된 중간 결과를 원격 노드에 저장하기 위해서 메모리를 많이 사용하게 됩니다. 2. GROUP BY: 각 그룹 기준별로 중간 집계 결과의 데이터 구조를 메모리 내에 만들기 때문에 메모리를 많이 사용하게 됩니다. * GROUP BY 연산이 수행 될 때에 string 타입은 숫자 타입 연산보다..
안녕하세요. 이번 시간에는 Impala에 대해서 살펴보도록 하겠습니다. 임팔라(Impala)는 하둡 시스템에 동작하는 SQL이며 SQL을 다뤄본 사람들이라면 큰 어려움 없이 바로 임팔라를 활용한 쿼리를 작성할 수 있습니다. 출처: www.whizlabs.com/blog/hadoop-vs-sql-database/ 하지만 대량의 데이터를 처리하는 것에 최적화 되어 있는 하둡 파일 시스템에 동작하도록 구현되어 있기 때문에 DELETE / UPDATE와 같은 DML 연산은 지원이 되지 않고 인덱스, 제약조건, 외래 키는 사용할 수 없습니다. 따라서 제약조건을 통해서 ETL 작업 상의 오류를 검증하는 방식을 사용했다면 데이터 파이프라인 내에서 검증할 수 있는 다른 방식을 따라야 합니다. * 데이터웨어하우스를 운영..
▶ 아파치 임팔라(Apache Impala) 개요 아파치 임팔라(Apache Impala)를 한 문장으로 소개한다면 "하둡 기반의 데이터를 SQL을 사용해서 실시간 질의를 가능하게 해주는 시스템"이라고 말할 수 있습니다. 아파치 임팔라는 2012년 10월에 베타 버전으로 출시되었다가 이듬해인 2013년 5월에 정식 버전이 배포되었고 현재는 3.4버전까지 업데이트 되어 있습니다. 하둡 기반의 시스템에 SQL을 사용하기 위한 방법으로 이미 Hive가 존재하지만, 데이터에 접근하기 위해서 Hive는 MapReduce 프레임워크를 사용하는 반면, 임팔라는 실시간으로 데이터에 접근하기 위해서 임팔라 자체의 고유 분산 처리 엔진을 사용한다는 차이점이 있습니다. Apache Impala를 비롯해서 Apache Had..