본문 바로가기

Bigdata

(13)
Druid 정리(5) 쿼리Aggregation Queries· Timeseries· TopN· GroupBy Metadata Queries· Time Boundary· Segment Metadata· Datasource Metadata Search Queries· Search 어떤 쿼리를 사용해야 하나?· GroupBy 대신에 Timeseries나 TopN을 사용하는 것을 추천한다.· GroupBy는 드루이드에서 가장 유연하지만 가장 성능이 낮다.· Timeseries는 GroupBy보다 분명히 빠르다.( 디멘전을 그룹핑해서 요청하는 집계가 아닐 경우)· 싱글 디멘전에서 그룹핑과 정렬은 TopN 쿼리가 GroupBy보다 더 최적화돼있다. 집계 쿼리 사용은 결론적으로..· 그룹핑 없이 전체 소스에 필터링, 집계, 정렬을 할 경..
Druid 정리(4) 조인· 드루이드는 쿼리타임 룩업을 통해 제한된 조인을 지원한다.· 쿼리타임 룩업의 흔한 사용 케이스는 한 디멘전의 값을 또 다른 값으로 교체하는 것이다.· 이것은 star-schema 조인과 유사하다.· 드루이드는 아직 조인을 완벽하게 지원하지 않는다.· 비록 드루이드의 저장 포멧이 조인의 구현을 허락할지라도 아직 다음의 이유 때문에 조인을 완벽하게 서포트하지 않는다. · 조인 쿼리의 확장은 분산 데이터베이스 작업의 지속적인 병목 현상이다. · 기능의 점진적인 향상은 동시 처리가 많이 걸린 작업 부하를 관리 할 때 예상되는 문제보다 가치가 떨어지는 것으로 인식된다.· 조인 쿼리는 본질적으로 공유 키 집합을 기반으로 하는 두 개 이상의 데이터 스트림을 병합한다.· 조인 쿼리를 위한 주요한 고레벨 전략은 해..
Druid 정리(3) 스키마 변경· 데이터 소스의 스키마는 언제나 변할 수 있고 드루이드는 세그먼트 사이에 다른 스키마를 지원한다. 세그먼트 교체· 드루이드는 데이터소스, 간격, 버전, 파티션 넘버등을 사용하여 유니크하게 세그먼트를 구분한다.· 만약 시간 간격(granularity)에 여러 세그먼트가 있을 경우 파티션 넘버는 오직 세거먼트 아이디에서만 보인다.· 예를 들어 만약 hourly 세그먼트를 가지고 있을 경우 한 세그먼트보다 한 시간 안에 더 많은 데이터를 가질 수 있다.· 같은 hour에 여러 세그먼트를 만들 수 있다.· 이 세그먼트들은 같은 데이터소스, 간격, 버전을 공유하지만 선형적으로 증가하는 파티션 넘버를 가진다.· 나중에 어느 시점에서 새 스키마로 데이터를 다시 색인화하면 새로 작성된 세그먼트의 버전 ID..
Druid 정리(2) 스키마 디자인· 드루이드는 비정규화된 데이터와 컬럼(timestamp, dimension, metric)을 취급한다.· 모든 행은 timestamp를 가져야 한다. 데이터는 항상 time으로 파티션되고 모든 쿼리는 time filter를 가진다.· 쿼리 결과는 역시 분, 시간, 일등과 같은 time 버킷으로 나눠질 수 있다.· Dimension은 필터링이나 그룹핑 될 수 있는 필드이다. String, String 배열, Long, Double, float 타입을 가진다.· Metric은 집계될 수 있는 필드이다. 숫자형으로 저장되지만 HyperLogLog sketches나 approximate histogram sketches 같은 Complex 객체 형태로 저장될 수 있다. 숫자형 디멘전· 숫자형 타입..
Druid 정리(1) 주요기능 · 컬럼너 저장 포멧 · 확장형 분산 시스템 · 대용량 병렬 처리 · 실시간 또는 일괄 처리 · 자기 치유, 자기 균형 조정 · 내결함성 아키텍처 · 빠른 필터링을위한 인덱스 · 근사치 알고리즘 · ingest time에 자동 집계 드루이드를 쓰면 좋을 때 · 데이터 적재를 많이 하지만 업데이트가 적을 때 · 대부분의 쿼리가 집계(group by), 검색, 스캔인 경우 · 응답속도를 100ms 이하로 잡고 싶은 경우 · 둘 이상의 테이블이 있는 경우 쿼리는 큰 테이블을 조회하고 작은 테이블을 lookup 함 · 높은 카디널리티 데이터(URLs, user Ids)를 가지고 빠르게 카운팅, 랭킹을 구해야 하는 경우 · kafka, HDFS, s3등과 같은 저장소에서 데이터를 로드하고 싶은 경우 드루..
[kafka] topic이 delete가 되지 않을 경우 해결법 kafka에서 토픽을 삭제하는 방법은 아래와 같다. 먼저 server.properties에 다음 옵션을 추가해야 한다. delete.topic.enable = true 그리고 아래의 명령어를 실행하면 해당 토픽이 marked되고 일정 시간 후에 전체 클러스터에 토픽이 삭제되게 된다. bin/kafka-topics.sh --delete --zookeeper --topic 하지만 UnknownTopicOrPartitionException 같은 에러가 발생하면서 주키퍼에서까지 지워졌던 토픽이 다른 노드에 의해 복구되어 삭제가 되지 않는 경우가 있다. 이런 경우는 카프카 클러스터를 재시작할 때 원할하게 실행되지 않은 경우 발생하여 전체 클러스터를 다시 시작해도 지속적으로 발생하게 된다. :org.apache.k..
[Hadoop] HDFS에 파일 쓰기 이번 글에서는 하둡 hdfs에 파일을 저장하는 방법을 알아보겠다.기본적인 형태는 일반 파일 입출력과 크게 차이가 있지 않다.첫번째로는 하둡에 저장하기 위해 DFSOutputStream을 추상화한 FSDataOutputStream을 이용하는점.두번째로는 FileSystem과 Path 객체를 이용해 hdfs의 경로 및 기타 설정을 해야하는 차이가 있을 뿐이다. 아래는 예제 코드이다. public static void main(String[] args) throws Exception { FSDataOutputStream fout = null; try { Path path = new Path("hdfs://NaeNode:port/path/file"); String data = "data"; FileSystem ..
[hive] LzoTextInputFormat 일 때 TextFile을 읽지 못하는 경우 hive table의 InputFormat이 LzoTextInputFormat인 경우에 hive에서는 lzo로 압축된 파일과 일반 텍스트파일을 모두 읽는 것이 가능하다. 하지만 spark에서 해당 테이블을 조회시 lzo로 압축된 데이터는 읽어지지만 텍스트 형식의 파일은 읽지 못하는 경우가 있었다. 확인 결과 spark에서 참조하는 hive-site.xml에 아래의 옵션이 누락되어 발생하는 문제였다. lzo.text.input.format.ignore.nonlzo false lzo.text.input.format.ignore.nonlzo는 자동으로 LZO가 아닌 입력을 무시해야하는지 여부를 나타내는 속성이다. 속성이 true(기본값)인 경우 LZO가 아닌 파일은 무시된다. 속성이 false이면 LZO가 아..