아파치 하이브
Apache Hive![]() |
![]() | |
원저작자 | 페이스북, 주식회사 |
---|---|
개발자 | 기부자 |
초기 릴리즈 | 2010년 10월 1일, [1] | 전(
안정된 릴리스 | 3.1.2 / 2019년 8월 [2] , 전( |
저장소 | github |
기입처 | 자바 |
운영 체제 | 크로스 플랫폼 |
이용가능기간: | SQL |
유형 | 데이터 웨어하우스 |
면허증. | Apache 라이센스 2.0 |
웹 사이트 | hive |
Apache Hive는 데이터 쿼리 [3]및 분석을 제공하기 위해 Apache Hadoop 위에 구축된 데이터 웨어하우스 소프트웨어 프로젝트입니다.Hive는 Hadoop과 통합된 다양한 데이터베이스 및 파일 시스템에 저장된 데이터를 쿼리할 수 있는 SQL과 같은 인터페이스를 제공합니다.분산된 데이터에 대한 SQL 애플리케이션 및 쿼리를 실행하려면 MapReduce Java API에 기존 SQL 쿼리를 구현해야 합니다.Hive는 낮은 수준의 Java API에서 쿼리를 구현할 필요 없이 기본 Java에 SQL 유사 쿼리(HiveQL)를 통합하는 데 필요한 SQL 추상화를 제공합니다.대부분의 데이터 웨어하우징 애플리케이션은 SQL 기반 쿼리 언어로 작동하므로 Hive는 SQL 기반 애플리케이션을 [4]Hadoop으로 이식할 수 있도록 지원합니다.아파치 하이브는 페이스북에서 처음 개발되었지만 넷플릭스나 금융산업규제청(FINRA)[5][6]과 같은 다른 회사에서 사용하고 개발했습니다.Amazon은 Amazon Web Services의 [7]Amazon Elastic MapReduce에 포함된 Apache Hive 소프트웨어 포크를 보유하고 있습니다.
특징들
Apache Hive는 Hadoop의 HDFS 및 호환되는 파일 시스템(Amazon S3 파일 시스템 및 Alluxio)에 저장된 대규모 데이터셋 분석을 지원합니다.읽기 시 스키마가 있는 HiveQL이라는[8] SQL 유사 쿼리 언어를 제공하고 쿼리를 MapReduce, Apache Tez[9] 및 Spark 작업으로 투명하게 변환합니다.이 세 가지 실행 엔진은 모두 Hadoop의 리소스 네고시에이터인 YAN(Yet Another Resource Negotiator)에서 실행할 수 있습니다.쿼리를 가속화하기 위해 인덱스를 제공했지만 버전 3.0에서는 이 기능이 제거되었습니다. Hive의 다른 기능은 다음과 같습니다.
- 일반 텍스트, RCFile, HBase, ORC 등 다양한 스토리지 유형.
- 관계형 데이터베이스 관리 시스템의 메타데이터 스토리지로 쿼리 실행 중 의미 검사를 수행하는 시간을 대폭 단축합니다.
- DEFLATE, BWT, snapy 등의 알고리즘을 사용하여 Hadoop 생태계에 저장된 압축 데이터 운영
- 날짜, 문자열 및 기타 데이터 마이닝 도구를 조작하기 위한 내장 User-Defined Functions(UDF; 사용자 정의 함수)입니다.하이브는 UDF 세트의 확장을 지원하여 내장 함수에 의해 지원되지 않는 사용 사례를 처리합니다.
- SQL 유사 쿼리(HiveQL)는 MapReduce, Tez 또는 Spark 작업으로 암묵적으로 변환됩니다.
기본적으로 Hive는 내장된 Apache Derby 데이터베이스에 메타데이터를 저장하며 MySQL과 같은 다른 클라이언트/서버 데이터베이스를 선택적으로 [11]사용할 수 있습니다.
하이브에서 지원되는 최초의 4가지 파일 형식은 [12]플레인 텍스트, 시퀀스 파일, ORC(optimized [14]row columnar) 형식[13] 및 RCFile이었습니다.Apache Parquet은 0.10 이후 버전에서 플러그인을 통해 읽을 수 있으며 기본적으로 0.13부터 [15][16]시작됩니다.
아키텍처
![]() |
하이브 아키텍처의 주요 컴포넌트는 다음과 같습니다.
- Metstore: 스키마 및 위치와 같은 각 테이블의 메타데이터를 저장합니다.또한 클러스터 [17]전체에 분산된 다양한 데이터 세트의 진행률을 추적하는 데 도움이 되는 파티션 메타데이터도 포함되어 있습니다.데이터는 기존의 RDBMS 형식으로 저장됩니다.메타데이터는 드라이버가 데이터를 추적하는 데 도움이 되며, 이는 매우 중요합니다.따라서 백업 서버는 정기적으로 데이터를 복제하여 데이터 손실 시 검색할 수 있습니다.
- 드라이버: HiveQL 문을 수신하는 컨트롤러와 같이 동작합니다.세션을 생성하여 스테이트먼트의 실행을 시작하고 실행 라이프 사이클과 진행 상황을 감시합니다.HiveQL 문을 실행하는 동안 생성된 필수 메타데이터를 저장합니다.드라이버는 축소 작업 [14]후 얻은 데이터 또는 쿼리 결과의 수집 지점 역할도 합니다.
- 컴파일러: HiveQL 쿼리 컴파일을 수행하여 쿼리를 실행 계획으로 변환합니다.이 계획에는 쿼리에서 변환된 출력을 얻기 위해 Hadoop MapReduce가 수행해야 하는 작업 및 단계가 포함되어 있습니다.컴파일러는 쿼리를 추상 구문 트리(AST)로 변환합니다.호환성 및 컴파일 시간 오류를 확인한 후 AST를 DAG([18]Directed Acyclic Graph)로 변환합니다.DAG는 입력 쿼리 및 [17]데이터에 따라 연산자를 MapReduce 단계 및 작업으로 나눕니다.
- Optimizer: 실행 계획에서 다양한 변환을 수행하여 최적화된 DAG를 가져옵니다.성능 [19]향상을 위해 결합 파이프라인을 단일 결합으로 변환하는 등 변환을 함께 통합할 수 있습니다.또한 축소 작업 전에 데이터에 변환을 적용하는 등의 작업을 분할하여 성능과 확장성을 향상시킬 수 있습니다.그러나 최적화에 사용되는 변환 로직은 다른 [14]최적화 도구를 사용하여 수정하거나 파이프라인할 수 있습니다.
- 실행자 : 컴파일 및 최적화 후 실행자는 태스크를 실행합니다.Hadoop의 작업 추적기와 상호 작용하여 실행할 작업을 예약합니다.종속성이 있는 작업이 다른 모든 필수 구성 요소가 [19]실행되는 경우에만 실행되도록 함으로써 작업의 파이프라인 작업을 처리합니다.
- CLI, UI 및 Trift 서버:명령줄 인터페이스(CLI)는 쿼리, 명령 및 프로세스 상태를 모니터링하여 외부 사용자가 하이브와 상호 작용할 수 있는 사용자 인터페이스를 제공합니다.절약 서버를 사용하면 외부 클라이언트가 JDBC 또는 ODBC [20]프로토콜과 유사하게 네트워크를 통해 하이브와 상호 작용할 수 있습니다.
하이브QL
HiveQL은 SQL을 기반으로 하지만 SQL-92 표준을 엄격하게 준수하지는 않습니다.HiveQL은 SQL에 없는 다중 삽입 및 선택 시 테이블 생성을 포함한 확장을 제공합니다.HiveQL은 트랜잭션 및 구체화된 뷰에 대한 지원이 부족했으며 제한된 하위 쿼리만 [21][22]지원했습니다.완전한 ACID 기능을 사용한 삽입, 업데이트 및 삭제 지원은 릴리즈 0.14에서 [23]사용할 수 있게 되었습니다.
내부적으로 컴파일러는 HiveQL 문을 [24]MapReduce, Tez 또는 Spark 작업의 유도 비순환 그래프로 변환하여 Hadoop에 제출합니다.
예
워드 카운트 프로그램은 입력에서 각 워드가 발생한 횟수를 카운트합니다.단어 수는 HiveQL에서 다음과 같이 [4]쓸 수 있습니다.
떨어지다 테이블 한다면 존재한다 문서; 만들다 테이블 문서 (선 스트링); 로드 데이터. 패스 'input_file' 덮어쓰기 안으로 테이블 문서; 만들다 테이블 word_words_displays(단어) ~하듯이 선택한다. 단어, 세어보세요(1) ~하듯이 세어보세요 부터 (선택한다. 폭발하다(분열되다(선, '\s')) ~하듯이 단어 부터 문서) 임시직 그룹. 타고 단어 주문 타고 단어;
각 문장에 대한 간단한 설명은 다음과 같습니다.
떨어지다 테이블 한다면 존재한다 문서; 만들다 테이블 문서 (선 스트링);
테이블 확인docs
존재하며 존재하면 드롭합니다.라는 이름의 새 테이블을 만듭니다.docs
한 줄의 활자로STRING
불렀다line
.
로드 데이터. 패스 'input_file' 덮어쓰기 안으로 테이블 문서;
지정된 파일 또는 디렉토리(이 경우 "input_file")를 테이블에 로드합니다. OVERWRITE
에, 데이터를 로드하는 타겟테이블을 재기입하도록 지정합니다.그렇지 않으면 데이터가 추가됩니다.
만들다 테이블 word_words_displays(단어) ~하듯이 선택한다. 단어, 세어보세요(1) ~하듯이 세어보세요 부터 (선택한다. 폭발하다(분열되다(선, '\s')) ~하듯이 단어 부터 문서) 임시직 그룹. 타고 단어 주문 타고 단어;
쿼리CREATE TABLE word_counts AS SELECT word, count(1) AS count
라고 하는 테이블을 만듭니다.word_counts
두 개의 열이 있습니다.word
그리고.count
이 쿼리는 내부 쿼리에서 입력을 가져옵니다.(SELECT explode(split(line, '\s')) AS word FROM docs) temp"
이 쿼리는 입력 워드를 에일리어스된 임시 테이블의 다른 행으로 분할하는 역할을 합니다.temp
.그GROUP BY WORD
는 키를 기반으로 결과를 그룹화합니다.그 결과,count
각 단어에 대한 발생 횟수가 들어 있는 열word
기둥.그ORDER BY WORDS
단어를 알파벳 순으로 정렬하다
기존 데이터베이스와의 비교
Hive의 스토리지 및 쿼리 작업은 기존 데이터베이스의 작업과 매우 유사합니다.Hive는 SQL 방언이지만 관계형 데이터베이스와 비교했을 때 Hive의 구조와 동작에는 많은 차이가 있습니다.차이점은 주로 Hive가 Hadoop 에코시스템을 기반으로 구축되고 Hadoop 및 MapReduce의 제한을 준수해야 한다는 것입니다.
스키마는 기존 데이터베이스의 테이블에 적용됩니다.이러한 기존 데이터베이스에서는 일반적으로 데이터가 테이블에 로드될 때 테이블이 스키마를 적용합니다.이를 통해 데이터베이스는 입력된 데이터가 테이블 정의에 지정된 대로 테이블의 표현을 따르도록 할 수 있습니다.이 설계를 스키마 온 라이트라고 합니다.이에 비해 하이브는 쓰기 시 테이블 스키마에 대해 데이터를 검증하지 않습니다.대신 데이터를 읽을 때 실행 시간 검사를 수행합니다.이 모델을 읽을 [21]때 스키마라고 합니다.두 가지 접근법에는 각각 장단점이 있습니다.로드 시간 동안 테이블 스키마에 대해 데이터를 검사하면 오버헤드가 증가하므로 기존 데이터베이스가 데이터를 로드하는 데 시간이 더 오래 걸립니다.데이터가 손상되지 않았는지 확인하기 위해 로드 시 데이터에 대해 품질 검사를 수행합니다.파손된 데이터를 조기에 검출하면 예외 처리를 조기에 실시할 수 있습니다.데이터 로드 후 또는 데이터 로드 중에 테이블이 스키마와 일치하도록 강제되므로 쿼리 시간 성능이 향상됩니다.반면 하이브는 스키마 체크 없이 데이터를 동적으로 로드할 수 있어 초기 로드는 빠르지만 쿼리 시 성능이 상대적으로 느리다는 단점이 있습니다.하이브는 로드 시 스키마를 사용할 수 없을 때 장점이 있지만 나중에 [21]동적으로 생성됩니다.
트랜잭션은 기존 데이터베이스의 주요 작업입니다.일반적인 RDBMS와 마찬가지로 하이브는 Atomicity, Consistency, Isolation 및 Durability의 네 가지 트랜잭션 속성(ACID)을 모두 지원합니다.하이브의 트랜잭션은 하이브 0.13에서 도입되었지만 파티션 [25]레벨로만 제한되었습니다.최신 버전의 Hive 0.14에서는 완전한 ACID 속성을 지원하기 위해 이러한 기능이 완전히 추가되었습니다.Hive 0.14 이상에서는 INSERT, DELETE 및 [26]UPDATE와 같은 다양한 행 수준 트랜잭션을 제공합니다.INSERT, UPDATE, DELETE 트랜잭션을 활성화하려면 다음과 같은 구성 속성에 적절한 값을 설정해야 합니다.hive.support.concurrency
,hive.enforce.bucketing
,그리고.hive.exec.dynamic.partition.mode
를 클릭합니다.[27]
보안.
Hive v0.7.0은 Hadoop 보안과의 통합을 추가했습니다.Hadoop은 보안을 제공하기 위해 Kerberos 인증 지원을 사용하기 시작했습니다.Kerberos는 클라이언트와 서버 간의 상호 인증을 허용합니다.이 시스템에서는 고객의 티켓 요구가 요구와 함께 전달됩니다.이전 버전의 Hadoop은 사용자가 사용자 이름을 스푸핑하여 다음과 같은 몇 가지 문제가 있었습니다.hadoop.job.ugi
동일한 사용자(hadoop 또는 mapred)에서 실행되는 MapReduce 작업 및 속성.Hive v0.7.0과 Hadoop 보안의 통합을 통해 이러한 문제는 대부분 해결되었습니다.TaskTracker 작업은 TaskTracker 작업을 실행한 사용자에 의해 실행되며 TaskTracker 작업은 다음 설정을 통해 사용자 이름을 스푸핑할 수 없습니다.hadoop.job.ugi
소유물.하이브에서 새로 만든 파일에 대한 권한은 HDFS에 의해 결정됩니다.Hadoop 분산 파일 시스템 권한 모델은 사용자, 그룹 및 읽기, 쓰기 및 실행의 세 가지 권한을 가진 다른 엔티티를 사용합니다.새로 생성된 파일에 대한 기본 권한은 하이브 구성 변수의 마스크 해제 값을 변경하여 설정할 수 있습니다.hive.files.umask.value
를 클릭합니다.[4]
「 」를 참조해 주세요.
레퍼런스
- ^ "Release release-1.0.0 · apache/Hive". GitHub.
- ^ "26 August 2019: release 3.1.2 available". Retrieved 28 August 2019.
- ^ Venner, Jason (2009). Pro Hadoop. Apress. ISBN 978-1-4302-1942-2.
- ^ a b c Programming Hive [Book].
- ^ Hive/Hadoop 사용 사례 연구
- ^ OSCON Data 2011, Adrian Cockcroft, YouTube "Netflix에서의 데이터 흐름"
- ^ Amazon Elastic MapReduce 개발자 가이드
- ^ HiveQL 언어 설명서
- ^ 아파치 테즈
- ^ 하이브 언어 설명서
- ^ Lam, Chuck (2010). Hadoop in Action. Manning Publications. ISBN 978-1-935182-19-1.
- ^ 텍스트 및 하이브를 통한 하둡 및 빅데이터 최적화텍스트 및 하이브를 통한 하둡 및 빅데이터 최적화
- ^ "ORC Language Manual". Hive project wiki. Retrieved April 24, 2017.
- ^ a b c "Facebook's Petabyte Scale Data Warehouse using Hive and Hadoop" (PDF). Archived from the original (PDF) on 2011-07-28. Retrieved 2011-09-09.
- ^ "Parquet". 18 Dec 2014. Archived from the original on 2 February 2015. Retrieved 2 February 2015.
- ^ Massie, Matt (21 August 2013). "A Powerful Big Data Trio: Spark, Parquet and Avro". zenfractal.com. Archived from the original on 2 February 2015. Retrieved 2 February 2015.
- ^ a b "Design - Apache Hive - Apache Software Foundation". cwiki.apache.org. Retrieved 2016-09-12.
- ^ "Abstract Syntax Tree". c2.com. Retrieved 2016-09-12.
- ^ a b Dokeroglu, Tansel; Ozal, Serkan; Bayir, Murat Ali; Cinar, Muhammet Serkan; Cosar, Ahmet (2014-07-29). "Improving the performance of Hadoop Hive by sharing scan and computation tasks". Journal of Cloud Computing. 3 (1): 1–11. doi:10.1186/s13677-014-0012-6.
- ^ "HiveServer - Apache Hive - Apache Software Foundation". cwiki.apache.org. Retrieved 2016-09-12.
- ^ a b c White, Tom (2010). Hadoop: The Definitive Guide. O'Reilly Media. ISBN 978-1-4493-8973-4.
- ^ 하이브 언어 설명서
- ^ 하이브에서의 ACID와 트랜잭션
- ^ "Hive A Warehousing Solution Over a MapReduce Framework" (PDF). Archived from the original (PDF) on 2013-10-08. Retrieved 2011-09-03.
- ^ "Introduction to Hive transactions". datametica.com. Archived from the original on 2016-09-03. Retrieved 2016-09-12.
- ^ "Hive Transactions - Apache Hive - Apache Software Foundation". cwiki.apache.org. Retrieved 2016-09-12.
- ^ "Configuration Properties - Apache Hive - Apache Software Foundation". cwiki.apache.org. Retrieved 2016-09-12.