본문 바로가기
반응형

전체 카테고리147

[Presto] Memory Pool / Memory configuration (config.properties) Presto Memory 각 Memory Pool 에서 메모리를 할당한다. 무조건 General Pool에서 먼저 할당한다. 메모리의 종류는 2가지이다. user 메모리 group by, join 등 쿼리에 따른 메모리이다. system 메모리 input/output buffer 등에 대한 메모리이다. Presto Memory Pool headroom 메모리를 제외한 나머지 메모리(General, Reserved)가 Presto Worker가 실제 사용할 수 있는 메모리이다. (1) General Pool 쿼리를 실행하면 General Pool에서 제일 먼저 메모리가 할당된다. jvm 메모리 용량에서 headroom 메모리 용량을 뺀 나머지가 모두 General Pool 에 잡힌다. jvm - Reser.. 2020. 7. 22.
[HDFS] 하둡 Balancer 과정 개요 하둡 클러스터의 데이터 불균형 현상이 일어나는 원인과 밸런싱 과정을 알아본다. 하둡 클러스터 데이터 쏠림 현상 새로운 데이터 노드를 추가할 때 밸런서를 따로 돌리지 않으면 기존 데이터들은 새로운 데이터노드에 저장되지 않는다. 클라이언트 프로그램 클라이언트가 HDFS 쓰기 작업을 요청한다. 근데 어차피 어떤 데이터 노드에 쓸 건지는 네임노드가 결정해주는 건데 클라이언트 프로그램 때문에 데이터 쏠림이 발생하는 건가? HDFS 블록 할당 HDFS에 블록을 할당할 때 데이터노드들의 용량까지 고려되지 않는다. 그러다 보면 HDFS 언밸런싱이 생기게 된다. 나름의 할당 기준은 있다. 복제본 3개. Node local -> Rack local -> off switch 기준으로 블록이 할당된다. 하둡 클러스터 밸.. 2020. 7. 20.
[HDFS] Rack Awareness 란 HDFS 데이터 블록 복제 HDFS는 기본적으로 블록을 3개씩 복제한다. 복제시 아래와 같은 순서로 블록을 저장할 데이터노드를 선정한다. Node local > Rack local > off switch Node local : 작업하는 노드가 데이터노드의 일부라면, 여기에 블록을 저장한다. Rack local : 작업하는 노드와 동일한 랙에 있는 노드에 블록을 저장한다. off switch : 작업하는 노드와 다른 랙에 있는 노드에 블록을 저장한다. 이렇게 나누어 저장함으로써 장애가 생겨도 데이터 유실이 없도록 한다. 근데 하둡이 어떻게 노드의 위치를 알 수 있을까? 하둡의 Rack Awareness 설정을 통해 노드의 위치를 파악하는 것이다. 만약 namenode가 topology를 알아오지 못하면 무.. 2020. 7. 15.
[HDFS] 네임노드 SafeMode 켜지는 경우 네임노드 시작 과정 fsimage를 메모리에 로딩 editlog를 읽어 fsimage에 반영 (체크포인팅) 데이터노드가 블록리포트를 보내줌 safemode에 진입하고, 데이터노드가 보내준 블록리포트 정보를 토대로 블록 복제수가 일정 수준까지 만족했는지 확인한다. 만족했으면 safemode에서 빠져나온다. ... 아래 글에 네임노드 시작과정을 자세하게 정리해두었다. 네임노드 SafeMode 시 HDFS 읽기는 가능하다. HDFS 쓰기가 불가능하다. 네임노드 SafeMode는 언제 켜질까? 1) 네임노드를 시작할 때 블록 복제수가 일정 수준(dfs.namenode.safemode.threshold-pct = 0.999f)을 만족하는지 확인 되어야 safemode를 빠져나온다. 예를 들어 전체 블록수가 900.. 2020. 7. 14.
[Spark] Spark 예제 - 데이터 로딩, 조인, 필터링, 정렬 샘플데이터 data_products (상품데이터) 1#ROBITUSSIN PEAK COLD NIGHTTIME COLD PLUS FLU#9721.89#10 상품ID#상품이름#가격#수량? data_transaction (구매데이터) 2015-03-30#6:55 AM#51#68#1#9506.21 일자#시간#고객id#상품id#구매수량#가격 데이터 로딩 및 준비 //구매데이터 로딩 val tranFile = sc.textFile("/spark-in-action/ch04_data_transactions.txt") val tranData = tranFile.map(_.split("#")) //상품목록 로딩 val products = sc.textFile("/spark-in-action/ch04_data_product.. 2020. 7. 10.
[Spark] Spark 예제 - 고객별 구매횟수, 구매금액 등 구해보기 (count, sum, sort) 샘플데이터 2015-03-30#6:55 AM#51#68#1#9506.21 일자#시간#고객id#상품id#구매수량#가격 파일 로딩 및 고객 ID 별로 데이터 재생성하기 val tranFile = sc.textFile("/spark-in-action/ch04_data_transactions.txt") val tranData = tranFile.map(x => x.split("#")) //val tranData = tranFile.map(_.split("#")) // key : 고객ID, value : 구매기록 배열 var transByCust = tranData.map(tran => (tran(2).toInt, tran)) // transByCust.foreach(println) // (51,[Ljava.la.. 2020. 7. 6.
반응형