Data Engineering 37

Hive Join

SQL Skin을 사용하는 가장 큰 이유는 아마도 Join 연산 때문일 것이다. Mysql DB를 다룰 때 초보 수준에서 약간 중급으로 넘어가면서 흔히들 많이 어려워 하는 것이 Join 구문입니다. 먼저, 아래와 같은 테이블 두개가 있다고 합시다. +————+————–+——+ | name | phone | pid | +————+————–+——+ | Mr Brown | 01225 708225 | 1 | | Miss Smith | 01225 899360 | 2 | | Mr Pullen | 01380 724040 | 3 | +————+————–+——+ +——+——+———————-+ | pid | spid | selling | +——+——+———————-+ | 1 | 1 | Old House Farm | | 3..

HiveHBaseTableInputFormat.java

이 파일은 Hbase에 있는 테이블을 Hive에서 생성할 때 (Metadata mapping) 사용된다. Mapping 방법에 대해 HBase 개발자 닉 디미덕은 아래와 같이 제시한다.(나는 닉 미더덕이라고 부르는데 HBase in Action 책 쓴사람이고 HBase 개발자다) https://ko.hortonworks.com/blog/hbase-via-hive-part-1/ 하나는 HBaseStorageHandler 를 이용하여 HBase 테이블을 Hive Metastore에 등록하는 방법이고다른 하나는 HiveHBaseTableInputFormat 및 HiveHBaseTableOutputFormat. HBase 테이블을 Hive에 직접 등록하는 방법이다. HBaseStorageHandler 는 Hba..

Hive - Presto 연동

HBase의 데이터를 빠르게 조회하기 위해 Presto를 사용했다. Presto Cli를 통해 Presto에 접속하려면 Server 정보를 알아야한다. [hadoop@ip-10-251-157-177 ~]# presto-cli --server 10.251.157.177:8889 --catalog hive --schema default; 스키마 검색presto:default> show schemas from hive; Schema-------------------- default information_schema(2 rows) Query 20190218_042334_00002_k6s2t, FINISHED, 3 nodesSplits: 36 total, 36 done (100.00%)0:00 [2 rows, 3..

HBase -> Hive 연동

Hbase의 noSQL Data를 분석이나 Service에서 그대로 사용하려면 개발 공수가 많이 든다.그래서 주로 SQL on Hadoop을 쓴다. 나는 Hbase를 Data Ware House로 구성하고 SQL On Hadoop으로 Hive + Presto를 사용했는데먼저 HBase -> Hive Porting 하는 방법을 기술한다. 1. HBase에 테이블이 존재한다고 가정한다. hbase(main):001:0> listTABLEcost_tbltbil_aws_dtbil_aws_stbil_azr_day_stbil_comn_ctbil_oprt_dtl_htbil_pfx_htbil_svg_set_inst_ltbil_svg_set_ltbil_tag_htic_tbil_aws_dtoc_tbil_aws_dtpms_..

HBase Bulk Loading

Hbase에 importtsv를 통해 Bulk Loading 하는 방법을 소개함. 기본적인 내용은 http://hbase.apache.org/0.94/book/ops_mgt.html#importtsv 에 나와있다.하지만 나는 이대로 하니까 안됐다.. 먼저 csv 데이터를 준비하고 HDFS에 넣는다. 먼저 Hadoop에 폴더를 생성해야하는데 아래와같이 하위 디렉토리까지는 자동으로 안만들어진다. [hadoop@ip-10-251-156-185 ~]$ hadoop fs -df -hFilesystem Size Used Available Use%hdfs://ip-10-251-156-185.ap-northeast-2.compute.internal:8020 69.5 G 15.8 M 69.2 G 0%[hadoop@ip-..

kafka 와 spark stream의 데이터 처리 방식

나는 exactly once를 구현했다. 무슨 뜻이냐면... 『데이터는 정확히 한번 처리된다』 당연히 데이터가 여러번 처리되면 안되겠지.. Spark Streaming는 처음에 Receiver를 이용하여 Kafka에 초기에 한번 접속 후 데이터를 받아오는 구조로 설계되었다. 그 후에 복구를 위해 WAL 기능이 추가되었는데 이게 문제가 되는게 Receiver가 데이터를 가져오자마자 WAL에 저장하고 데이터 처리 도중에 죽었다면 Spark Streaming은 기동 시 WAL 에서 데이터를 꺼내서 처리하고 Kafka는 아까 읽었던 부분부터 Read Offset을 다시 수행한다. 데이터가 중복된다는 뜻이지. 이걸 방지하기 위해 Kafka Direct API를 제공하는데 메카니즘은 이렇다. Offset 관리를 일..

spark 성능 개선

SPARK job 성능에 중요한 영향을 미치는 설정 값들에 대해 정리한다. 1. 용어정리 하나의 Spark executor = 하나의 YARN container 라고 보면된다.그리고 하나의 task = 하나의 core = 하나의 vcore 다.하나의 executor가 여러개의 task를 동시에(concurrent) 부릴 수 있다. Driver : 중앙 조정자Executor : 분산 작업 노드 드라이버와 익스큐터는 각각 독립된 자바 프로세스 1. 드라이버 사용자의 main 메소드가 실행되는 프로세스 • 주요 역할 사용자 프로그램을 태스크로 변환하여 클러스터로 전송 1. 연산들의 관계를 DAG(Directed Acyclic Graph) 생성 2. DAG를 물리적인 실행 계획으로 변환 •최적화를 거쳐 여러 개..

머신러닝과 딥러닝

둘다 AI의 범주에 속하는 방법론인데 머신러닝과 딥러닝은 다르다. '사람'이 하느냐, '기계'가 하느냐에 따라 구분된다. 가령 머신러닝은 개발자가 다양한 고양이 사진을 컴퓨터에게 보여주고 ‘이것이 고양이이다.’라고 알려준 다음, 새로운 고양이 사진을 보았을 때 ‘고양이’라고 판단할 수 있도록 하는 것이며, 딥러닝은 스스로가 여러 가지 고양이 사진을 찾아보고 '고양이'에 대해 학습한 다음 새로운 고양이 사진을 보고 '고양이'라고 구분하는 것이다.