ApacheHive 11

[하이브 완벽 가이드] Ch18. 보안

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. 하이브 인증 파일과 디렉터리의 소유가 서로 다른 사용자인 경우에 파일에 퍼미션을 부여하는 일이 중요해집니다. HDFS 퍼미션 시스템은 user, group, others 요소가 있다는 점에서 유닉스 모델과 매우 유사합니다. 또한 read, write, execute라는 세 가지 퍼미션이 있습니다. 하이브는 umask 값을 hive.files.umask.value 속성을 통해 정의합니다. 또한 hive.metastore.authorization.storage.checks 속성을 true로 설정하면 테이블 내부에 사용자가 지울 수 있는 퍼미션을 갖지 못한 파일이 있을 때 하이브는 해당 테이블을 드롭하는 것을 막습니다. 이 속성의 기..

[하이브 완벽 가이드] Ch15. 하이브 파일과 레코드 포맷 사용자화

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. 파일 vs 레코드 포맷 하이브는 파일 포맷과 레코드 포맷을 명확하게 구분합니다. 파일 포맷은 레코드가 파일 안에서 인코딩되는 방식이고 레코드 포맷은 바이트 열이 레코드 안에서 인코딩되는 방식입니다. 하이브에서 파일 포맷을 선택하는 것은 레코드 포맷을 선택하는 것과 직결됩니다. 보통 CREATE TABLE 문에선 STORED AS TEXTFILE을 사용한 텍스트 파일을 이용합니다. CREATE TABLE 문 파헤치기 CREATE TABLE 문에서 STORED AS TEXTFILE을 사용하면 DESCRIBE EXTENDED 명령으로 테이블을 살펴봤을 때 InputFormat과 OutputFormat이 다음과 같습니다. inputFo..

[하이브 완벽 가이드] Ch11. 기타 파일 포맷과 압축

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. 데이터를 특정 포맷에 강제로 맞추지 않는 것은 하이브만의 고유 기능입니다. 하이브는 하둡의 입력 포맷 API를 이용해 텍스트 파일, 시퀀스 파일, 사용자 정의 파일과 같은 다양한 소스로부터 데이터를 읽습니다. 하둡이 압축하지 않은 데이터인 경우에 파일 저장소 내에서 선형 확장을 제공하지만 데이터 압축은 다양한 이점이 있습니다. 많은 양의 디스크를 절약하고, 처리량과 성능을 향상시키고, 네트워크 성능에도 이롭습니다. 하둡 잡은 CPU보다 I/O를 많이 쓰는 경향이 있기 때문에 그런 경우 압축은 성능을 향상시키지만 CPU를 많이 쓰는 경우에는 압축은 오히려 성능을 떨어뜨립니다. 실제로 압축이 성능을 향상시키는지 확인하는 길은 여러 ..

[하이브 완벽 가이드] Ch10. 튜닝

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. 하이브는 선언형 언어입니다. 사용자가 선언적 쿼리를 제출하면 하이브는 쿼리를 어떻게 맵리듀스 잡으로 변환할지 알아냅니다. 하이브의 성능을 최적화하기 위해서는 하이브가 어떻게 동작하는지 아는 과정이 필요합니다. EXPLAIN 사용하기 하이브가 동작하는 방식을 알기 위해 가장 먼저 해볼 것은 EXPLAIN 기능을 사용하여 하이브가 쿼리를 어떻게 맵리듀스 잡으로 변환하는지를 살펴보는 것입니다. 쿼리 앞에 EXPLAIN 키워드를 넣으면 쿼리 계획과 추가 정보를 알 수 있습니다. EXPLAIN EXTENDED를 사용하면 좀 더 많은 정보를 확인할 수 있습니다. LIMIT 튜닝 대부분 LIMIT 절은 여전히 데이터 전체에 대해 쿼리를 실행..

[하이브 완벽 가이드] Ch9. 스키마 설계

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. 날짜별 테이블 날짜별 테이블 패턴은 supply_2022_10_05, supply_2022_10_06과 같이 타임스탬프를 추가하여 테이블을 생성하는 패턴입니다. 하이브에서는 날짜별 테이블 패턴 대신 파티셔닝된 테이블을 사용하는 방법으로 이 문제를 해결할 수 있습니다. 파티션 설계 시 고려사항 HDFS는 작은 파일보다는 아주 큰 파일을 위해 설계되었습니다. 너무 많은 파티션을 가지고 있다는 것은 파일과 디렉터리를 불필요하게 많이 생성한다는 단점이 있습니다. 맵리듀스는 잡을 여러 개의 태스크로 변환합니다. 기본적으로 각 태스크는 시작과 종료 시에 부하가 걸리는 새로운 JVM 위에서 동작합니다. 작은 파일에 대해서도 각 파일마다 개별..

[하이브 완벽 가이드] Ch8. HiveQL : 색인(Index)

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. 하이브는 제한된 인덱스 기능을 가지고 있으며 인덱스 데이터를 원본 데이터가 아닌 별도의 테이블에 저장합니다. 인덱스는 논리적 파티션이 크기는 작고 개수가 많은 경우 파티셔닝을 대신해서 사용하기에 좋습니다. 다만 모든 쿼리가 인덱스로부터 이득을 얻을 수는 없기 때문에 EXPLAIN 문법을 사용하면 이를 확인할 수 있습니다. 인덱스 관리에는 추가적인 디스크 공간과 처리 비용이 필요하므로 득과 실을 잘 따져봐야 할 것입니다. 인덱스 생성 country와 state 두 개의 문자열 컬럼으로 파티셔닝된 매니지드 테이블인 employees 테이블이 있다고 가정할 때, 다음은 country 파티션에 인덱스를 생성하는 쿼리입니다. CREATE..

[하이브 완벽 가이드] Ch6. HiveQL : 쿼리

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. SELECT ... FROM .. WHERE ... 절 하이브에서 지원하는 컬렉션 데이터형에는 크게 세 종류가 있습니다. ARRAY : 0으로 시작하는 index를 이용해서 참조. 배열의 크기를 벗어난 index 참조시 NULL 반환 ex) subordinates[0] MAP : 숫자 대신 키 값을 색인으로 사용해서 참조. ex) deductions["State Taxes""] STRUCT : 점 표기법을 사용해서 참조. ex) address.city 컬럼을 선택할 때 정규표현식을 사용할 수도 있습니다. 아래는 stocks에서 symbol 컬럼과 price로 시작하는 모든 컬럼을 선택하는 쿼리입니다. SELECT symbol, ..

[하이브 완벽 가이드] Ch5. HiveQL : 데이터 조작(DML)

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. Managed 테이블에 데이터 로딩하기 하이브는 로우 레벨에서 삽입, 갱신, 삭제를 지원하지 않습니다. 데이터를 테이블에 넣는 유일한 방법은 벌크로 로딩하는 것뿐입니다. 아니면 테이블 디렉터리에 직접 파일을 복사할 수 있습니다. LOAD DATA 명령어를 명령어를 사용하여 데이터를 테이블에 로드합니다. LOAD DATA LOCAL INPATH '${env:HOME}/california-employees' OVERWRITE INTO TABLE employees -- 파티션된 테이블이 아니라면 아래 절은 생략 가능 PARTITION (country='US', state='CA'); 이 명령은 해당 파티션을 위한 디렉터리가 존재하지 ..

[하이브 완벽 가이드] Ch4. HiveQL : 데이터 정의(DDL)

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. HiveQL은 하이브 쿼리 언어로, SQL과 유사하지만 여러 차이점이 존재합니다. 하이브는 로우 레벨의 삽입, 변경, 삭제를 지원하지 않으며 트랜잭션 또한 지원하지 않습니다. 대신 하둡이 지원하는 범위 안에서 보다 나은 성능을 위해 확장할 수 있는 기능을 제공하며 사용자가 정의한 확장과 외부 프로그램을 하이브와 연동할 수 있습니다. 데이터베이스 생성, 삭제, 변경 하이브에서 데이터베이스 개념은 단지 테이블의 카탈로그 또는 네임스페이스에 지나지 않습니다. 이는 큰 규모로 작업시 테이블명의 충돌을 막는 유용한 방법입니다. 데이터베이스를 지정하지 않는다면 기본 데이터베이스를 사용합니다. 다음은 CREATE DABASE 명령을 통해 데..

[하이브 완벽 가이드] Ch3. 데이터형과 파일 포맷

이 글은 하이브 완벽 가이드 책을 읽고 그 중 일부 내용을 정리한 글입니다. 하이브는 관계형 데이터베이스에서 볼 수 있는 여러 원시 데이터형 뿐만 아니라 관계형 데이터베이스에서는 거의 볼 수 없는 세 가지 종류의 컬렉션 데이터형을 지원합니다. 따라서 텍스트 파일에서 이런 데이터형을 어떻게 표현할 것이며, 어떤 텍스트 저장 방법을 사용할지가 중요합니다. 하이브의 독특한 기능 중 하나는 파일에 데이터를 저장할 때 다양한 방법으로 인코딩할 수 있는 유연성을 제공한다는 점입니다. 또한 하이브는 다른 데이터베이스와 달리 데이터의 저장과 생명 주기를 사용자가 스스로 제어할 수 있도록 합니다. 원시 데이터형 데이터형 크기 리터럴 문법 예제 TINYINT 1바이트 크기의 정수 데이터형 20 SMALLINT 2바이트 크..