본문 바로가기
반응형

전체 글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.
DHCP ignore MAC Address (dhcpd.conf) DHCP (Dynamic Host Configuration Protocol) DHCP는 네트워크에 사용되는 IP주소를 DHCP서버가 중앙집중식으로 관리하는 클라이언트/서버 모델을 사용한다. DHCP 클라이언트는 네트워크 부팅과정에서 DHCP서버에 IP주소를 요청하고 IP를 할당 받는다. 뿐만 아니라, 서브넷마스크, 게이트웨이 주소, DNS 주소도 할당해준다. 일반적으로 같은 대역대에서 작동한다. MAC주소 기반으로 통신한다. 동일한 LAN 안에서 MAC주소를 통해 통신한다. (스위칭 O, 라우팅 X) 다른 대역대에서도 작동하려면 DHCP relay를 사용한다. (다른 대역대 통신을 위한 랜카드가 추가로 필요하겠다.) DHCP 설정 특정 Mac Address 를 가진 Server에는 DHCP로 IP를 할당.. 2020. 7. 2.
[Spark] Spark 예제 - json 데이터에서 원하는 데이터만 추출 테스트환경 zeppelin 0.8.1 spark 2.4.0 예제 github 이벤트 관련 json 데이터를 사용한다. push 횟수가 많은 순서대로 이름을 추출하고 정렬한다. 그 중에서 특정 명단에 있는 사람들만 뽑는다. 코드 %spark //최종버전 import scala.io.Source.fromFile object App { def main(args : Array[String]) { // git push 횟수가 많은 순서대로 이름을 뽑는다. val inputPath = "/spark-in-action/2015-03-01-23.json" val ghLog = spark.read.json(inputPath) val pushes = ghLog.filter("type = 'PushEvent'") val g.. 2020. 6. 25.
[spark] 파일 한 줄씩 읽기 (scala fromFile) 테스트환경 zeppelin 0.8.1 spark 2.4.0 코드 %spark import scala.io.Source.fromFile // fromFile : hdfs 경로 안됨. 로컬 경로만 가능 val empPath = "/root/sunny/spark-in-action/ghEmployess.txt" val employees = Set() ++ ( for{ line employees.contains(user) val isEmployee = spark.udf.register("isEmpUdf", isEmp) // udf 사용하기 sql("""select isEmpUdf("NathanNg") as isEmpUdf from orderedTable limit 1""").show() 2020. 6. 24.
반응형