분류 전체보기
[Algorithm][KMP] 28. Find the Index of the First Occurrence in a String
KMP 알고리즘이란? 문자열을 한개씩 비교하는 것이 아니라 지금까지 비교한 문자열 중 접두사, 접미사가 같을 경우 중간 과정을 생략하고 비교하는 알고리즘 시간 복잡도 \( O(n + m) \) 문제 링크 https://leetcode.com/problems/find-the-index-of-the-first-occurrence-in-a-string/ 이번 문제는 주어진 문자열에서 sub 문자열이 몇번 째 index에 존재하는지를 답안으로 내야합니다. 단순하게 생각하면 단순 문자열 비교로 보일 수 있지만, 주어진 조건을 보면 문자열의 길이가 10000입니다. 그래서 단순 비교를 한다면 당연히 시간초과가 발생합니다. 단순 전체 비교 방법 우선 단순 비교로 문제를 푸는 방법을 소개하겠습니다. 전체 문자열의 시작..
[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 타입으..
[Review] 분단된 데이터를 2000 노드 이상의 단일 데이터 플랫폼에 통합(LINE)
본 게시물은 기업 컨퍼런스 발표 자료 및 영상을 요약 및 리뷰하는 글입니다. 저작권에 문제가 있다면 연락 부탁드립니다. Conference LINE DEVELOPER DAY 2021 LINE DEVELOPER DAY 2021 LINE DEVELOPER DAY 2021은 11월 10일부터 11일까지 이틀간 열리는 온라인 기술 컨퍼런스입니다. 다양한 엔지니어가 참여해 여러 분야에 걸쳐 첨단 기술과 도전 경험, 직면하고 있는 과제에 대해 공유합 linedevday.linecorp.com Slide Slide 링크 Video Youtube 링크 발표에 대한 내용을 요약하며 제 개인적인 생각은 초록색으로 작성하겠습니다. 라인에서는 모든 데이터를 축적하고 사용할 수 있는 데이터 플랫폼을 IU라고 부르고 있습니다. ..
[Hive] Metastore의 heap memory 증가 이슈 해결 과정
이번 글에서는 토이 프로젝트를 진행하면서 Hive Metastore의 heap memory가 비정상적으로 증가하는 이슈의 해결 과정에 대해 공유하겠습니다. 해당 이슈 해결 과정을 보기에 앞서 [Hive] Hive 아키텍처와 HiveServer2 & Hive Metastore 글을 읽으면 좀 더 이해하기 쉬울 것이라고 생각됩니다. 문제 발견 Hive를 사용하면서 Hive 쿼리가 정상적으로 수행되지 않는 문제를 발견하게 되었습니다. 처음에는 Hiveserver2가 다운된 문제라고 생각했습니다. 하지만 이상한 점은 Hiveserver2 프로세스가 죽지 않고 살아있었다는 점입니다. 어쨌든 문제의 원인을 파악하기 위해 Hiveserver2의 로그를 분석했습니다. 로그 분석 hiveserver2.log WARN [..
[Hive] Hive 아키텍처와 HiveServer2 & Hive Metastore
이번 글에서는 Hive의 디테일한 아키텍처와 HiveServer2, Hive Metastore의 내용을 주로 다루도록 하겠습니다. Hive 아키텍쳐 Hive 아키텍처는 크게 HiveServer와 RDB, Hadoop의 관계로 구성할 수 있습니다. HiveServer는 Apache Thrift를 기반으로 만들어졌습니다. 여기서 Thrift는 서로 다른 언어 간의 통신을 가능하게 해주는 cross-language RPC 프레임워크로써, HiveServer2 이전에는 HiveServer를 Thrift server라고 부르곤 했습니다. 이번 글에서는 편의상 HiveServer2 이전 버전을 HiveServer1이라고 하겠습니다. - Client : Client가 Hive 쿼리를 사용할 수 있는 인터페이스. ..
[Hive] Unable to fetch table .null 에러 해결 방법
이번 글에서는 빅데이터 클러스터를 운영하면서 Hive 관련 "Unable to fetch table .null" 에러가 발생했던 경험을 공유하겠습니다. 문제 상황 & 분석 과정 클러스터 운영 중에 특정 Hive Table이 에러가 발생하며 drop을 포함한 모든 명령어가 먹히지 않는 문제가 발생했습니다. 문제 상황은 아래와 같았습니다. - Hiveserver 정상 - Hive에 접속해 Table 리스트를 보면 존재함 - Hue에서 UI를 통한 Hive Table 조회시 에러 발생 - 문제가 되던 특정 Table에 HQL 수행 시 에러 발생 - 해당 Table drop도 불가능 Failed: SemanticException Unable to fetch table [table_name].null 해당 문제..
Riot Data Pipeline 구축하기 #5 - Kafka Producer client 구현 및 데이터 전처리 과정
이번 글에서는 Riot 데이터를 불러와 Kafka 클러스터에 Produce하는 과정 및 이슈 사항들을 정리하겠습니다. Producer Client 구현 특정 Summoner의 데이터를 불러와 Kafka에 produce 하는 과정을 "/produceSummonerMatchInfo" 주소의 API로 구현했습니다. 지난 글에서 언급했듯이, Summoner 이름을 input으로, Match 정보를 output으로 하는 Riot API는 존재하지 않습니다. 그래서 필요로 하는 API를 여러개 사용하여 최종적으로 Match 정보를 Produce하도록 해야했습니다. 세부 과정으로는 아래와 같습니다. 1. Summoner 이름으로 puuid 가져오기. 2. puuid로 match id list 가져오기. 3. Matc..
[NiFi] Untrusted proxy 및 UninheritableFlowException 에러 해결 방법
NiFi를 사용하면서 UninheritableFlowException 에러를 해결했던 방법을 공유하겠습니다. 참고로 제가 테스트 했던 NiFi는 File 기반의 유저 인증 방식을 사용했다는 점 참고 바랍니다.( FileUserGroupProvider ) 문제 상황 & 분석 과정 해당 에러는 NiFi 노드 증설 시 발생했던 에러입니다. 신규 노드에 대해서 서버 작업을 모두 완료한 뒤 NiFi 설치를 완료했습니다. 그리고 이후에 NiFi 관련 설정 파일을 수정했습니다. - File authorizers.xml - 수정한 내용 , 항목에 신규 노드 정보 추가 - 관련 참고 링크 https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#mult..