Hadoop Ecosystem

    [HDFS] JMX Metrics 값 불러오기

    Hadoop의 HDFS를 사용하다보면 현재 HDFS의 사용량을 여러가지 방법들로 확인합니다. 예를 들어 NameNode의 Web UI를 접속해 확인하거나 Ambari와 같은 배포판 관리 시스템에서도 쉽게 확인할 수 있습니다. 그런데 만약 모니터링 시스템을 직접 개발해서 사용한다면 코드 상에서 어떻게 HDFS의 정보를 가져올 수 있을까요? 이 방법에 대해 소개해드리겠습니다. NameNode Web UI 우리가 흔히 원하는 HDFS 정보들은 NameNode Web UI에서 모두 제공을 하고있습니다. 보통 NameNode의 50070 포트로 쉽게 접속할 수 있습니다. ( http://{NameNode}:50070 ) NameNode JMX 위의 NameNode Web UI는 HDFS 정보들을 어디서 가져오는 ..

    [Hive] Compile 상세 과정 #2 - Optimization 종류와 소스 코드 분석

    이전 글에 이어서 Hive의 Compile 상세 과정 중 Optimization의 여러 종류와 Compile 과정의 소스 코드를 분석하도록 하겠습니다. Hive Optimization 종류 Hive는 쿼리를 최종적인 Task Tree로 만들기까지의 Compile 과정에서 여러 종류의 Optimization을 수행합니다. 3가지 종류의 Optimization에 대해서 소개하도록 하겠습니다. CBO (Cost-Based Optimization) Semantic Analyzer가 AST를 OP Tree로 만드는 과정에서의 Optimization. - 참고 링크 : https://cwiki.apache.org/confluence/display/Hive/Cost-based+optimization+in+Hive C..

    [Hive] Compile 상세 과정 #1 - 쿼리 변화 과정과 형태

    Hive를 이용하면서 Client로부터 제출된 쿼리가 어떻게 MR Job으로까지 변환이 될까라는 궁금증이 항상 있었습니다. 그래서 내부적인 Compile 과정에 대해서 공부를 하게 되었고, 소스 코드를 직접 분석해 봤습니다. 이전에 작성한 [Hive] Hive 아키텍처와 HiveServer2 & Hive Metastore 글을 먼저 읽으면 본 게시글을 이해하는데 도움이 될 겁니다. Hive Architecture Review - 주요 프로세스로 HiveServer2, Metastore 존재 - Driver가 중심에서 컴파일 과정, Task 전달 등 수행. - Hive 쿼리의 변화 과정을 알기 위해선 위 그림의 Compiler 과정을 알아야함. Hive 쿼리 처리 과정 - Hive 쿼리가 최종적으로 Map..

    [Hive] Complex Json 데이터 테이블 생성하기 (Json SerDe)

    Json 데이터를 사용하다보면 Json의 스키마 자체가 상당히 복잡하고 거대한 경우가 있습니다. 이번 글에서는 complex Json 데이터를 이용해 Hive 테이블을 생성하는 방법에 대해 소개하겠습니다. Json 데이터로 Hive 테이블 만들기 Json 데이터로 Hive 테이블을 만드는 방법은 여러가지가 있겠지만 이번 글에서는 Json SerDe를 이용한 방법을 소개할 예정입니다. 우선 Json SerDe를 위한 jar 파일부터 아래 링크에서 다운받도록 하겠습니다. https://jar-download.com/maven-repository-class-search.php?search_box=org.openx.data.jsonserde.JsonSerDe Download dependencies for jav..

    [Hive] IntelliJ로 Runtime Debugging하기

    이번 글에서는 Hive를 Runtime 중에 소스 코드 레벨에서 Debugging하는 방법에 대해 소개하겠습니다. Hive를 사용할 때 발생하는 에러는 보통 구글링을 해서 해결하곤 합니다. 하지만 구글링으로도 방법을 찾을 수 없을 때 근본적인 원인 파악을 위해 소스 코드 레벨에서 분석해야만 할 때가 있습니다. 아래의 방법으로 IntelliJ로 소스 코드 레벨에서 Debugging을 한다면 좀 더 쉽고 정확한 문제 해결을 할 수 있습니다. 사전 준비 Hive Debugging을 위해서 아래의 두가지를 준비합니다. IntelliJ 설치 https://www.jetbrains.com/ko-kr/idea/download/#section=mac Hive 소스 코드 다운로드 ( 사용하는 버전에 맞게 ) https:..

    [Hive] limit 사용 시 leastNumRows 에러 발생 이슈

    이번 글에서는 Hive 쿼리를 limit 절과 함께 사용할 때 발생하는 leastNumRows 에러 발생 이슈와 해결 과정에 대해 공유하겠습니다. 문제 발견 Hive 테이블을 select 할 때 limit 절을 사용하면 에러가 발생하는 문제를 발견하게 되었습니다. Hive CLI에서 실행시킨 쿼리 예제와 발생하는 에러는 아래와 같았습니다. select AA_COL from AA_TABLE where partition_p=p1 limit 35; java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: leastNumRows check failed 문제 상황 다양한 케이스들에 따라 위의 에러 발생 여부가 달랐습니다. 일단 사전에 설정되었던..

    [NiFi] Json 데이터의 동적 크기 Array 전처리하기 (Base64 decoding)

    이번 글에서는 NiFi에서 Json 파일을 전처리하는 방법 중 하나에 대해 소개하겠습니다. NiFi에서 Json 데이터를 처리하기 위한 다양한 Procssor들이 존재합니다. 하지만 Json 데이터가 단순히 key / value 값들만 존재한다면 처리가 쉽겠지만, 경우에 따라서는 Json 데이터에 Array 타입이 존재할 수 있습니다. 그리고 Array의 크기가 고정이라면 다행이지만 데이터마다 동적인 크기를 가질 때는 상당히 골치 아파집니다. 아래 내용에서 이와 같은 동적인 크기의 Array 타입을 처리하는 방법을 제시하겠습니다. Json 데이터 예시 이번 글에서 다룰 Json 데이터의 구조와 예시를 보여드리겠습니다. Json의 가장 최상위에 A, B라는 key 값들이 존재합니다. A는 Array 타입으..

    [Hive] Metastore의 heap memory 증가 이슈 해결 과정

    이번 글에서는 토이 프로젝트를 진행하면서 Hive Metastore의 heap memory가 비정상적으로 증가하는 이슈의 해결 과정에 대해 공유하겠습니다. 해당 이슈 해결 과정을 보기에 앞서 [Hive] Hive 아키텍처와 HiveServer2 & Hive Metastore 글을 읽으면 좀 더 이해하기 쉬울 것이라고 생각됩니다. 문제 발견 Hive를 사용하면서 Hive 쿼리가 정상적으로 수행되지 않는 문제를 발견하게 되었습니다. 처음에는 Hiveserver2가 다운된 문제라고 생각했습니다. 하지만 이상한 점은 Hiveserver2 프로세스가 죽지 않고 살아있었다는 점입니다. 어쨌든 문제의 원인을 파악하기 위해 Hiveserver2의 로그를 분석했습니다. 로그 분석 hiveserver2.log WARN [..