SPARK [RDD 파 티 션]

1642 단어
RDD 는 잘못 사용 되 고 병행 하 는 데이터 구조 로 분 구 의 속성 을 가지 고 있 습 니 다. 이 분 구 는 한 기계 의 분 구 일 수도 있 고 여러 기계 의 분 구 일 수도 있 습 니 다. RDD 분 구 의 수량 에 대해 이 RDD 와 관련 되 어 동시 계산 하 는 입도 입 니 다.모든 파 티 션 은 하나의 단독 task 에서 실 행 됩 니 다.
hdfs 파일 에서 만 든 RDD 의 파 티 션 개 수 를 지정 할 수 있 습 니 다. 파 티 션 수 와 block 수가 일치 하면 로 컬 파일 에서 RDD 를 만 들 면 기본적으로 기계 의 cpu 개수 입 니 다.
//       
>val rdd = sc.textFile("/home/reducer2/cluster/hadoop/readme.md")
>rdd.partitions.size
res0: INT = 8  // cpu   

//      
>val rdd = sc.textFile("/home/reducer2/cluster/hadoop/readme.md",6);

RDD 의 첫 번 째 위치 preferred Locations spark 는 작업 을 수행 할 때 가능 한 한 데이터 에서 가장 가 까 운 노드 에 연산 자 를 할당 하고 데이터 의 네트워크 IO 를 줄 입 니 다. RDD 가 생 성 된 위치 가 첫 번 째 위치 입 니 다. HDFS 가 생 성 한 RDD 라면 첫 번 째 위 치 는 block 이 있 는 노드 입 니 다.전환 을 거 친 RDD 라면 RDD 가 있 는 노드 에 연산 자 를 할당 해 야 한다.
큰 파일 40G 가 있 으 면 RDD 를 만 들 고 block 개수 와 같은 파 티 션 을 만 듭 니 다. 기본 블록 이 128 M 이면 320 개의 block (paritions) 이 생 깁 니 다. 모두 5 대의 natanode 가 평균 320 개의 block 을 분배 했다 면 데이터 node 마다 최소 64 개의 파 티 션 이 있 습 니 다.현재 파 티 션 1 을 계산 하려 면 첫 번 째 단 계 는 RDD 파 티 션 1 의 최 우선 위 치 를 알 아야 합 니 다.
val location = rdd.preferredLocations(rdd.dependecies(0))
res1:Set[String] =(192.168.110.1,192.168.110.2,192.168.110.3) // block      

그러나 실제 개발 과정 에서 우 리 는 단일 구역 의 집행 상황 에 주목 하지 않 고 다음 과 같다.
val rdds = sc.textFile("/.../..");
varl count = rdds.filter(line=>line.contains("error"))

filter 를 실행 할 때 실제 적 으로 모든 파 티 션 에서 이 함 수 를 실행 하고 마지막 에 새로운 RDD 를 생 성 합 니 다. 새로운 RDD 의 파 티 션 상황 은 이전의 파 티 션 과 대체적으로 같 을 수 있 습 니 다. 같은 기계 노드 에서 기계 간 의 데이터 재 배열 을 줄 일 수 있 습 니 다.

좋은 웹페이지 즐겨찾기