복붙노트

[SCALA] 왜 HDFS에 대한 한계는 2GB 스파크 RDD 파티션이 무엇입니까?

SCALA

왜 HDFS에 대한 한계는 2GB 스파크 RDD 파티션이 무엇입니까?

나는 데이터를 양성하는 mllib 랜덤 포레스트를 사용할 때 오류가 발생합니다. 내 데이터 세트가 거대하고 기본 파티션은 작은 상대적입니다. 그래서 나타내는 던져 예외, 다음과 같이 시킴으로 빨리 스택 추적을 "크기는 Integer.MAX_VALUE를 초과"

Integer.MAX_SIZE는 것 같다 2GB의 인 메모리의 일부 파티션 밖으로 그. 내가 1000 내 RDD 파티션을 repartiton 그래서, 각각의 파티션은 이전과 훨씬 적은 데이터를 저장할 수있다. 마지막으로, 문제는 해결된다!

그래서, 내 질문은 : 왜 파티션 크기는 2G 제한이? 스파크의 제한 설정에는 구성이없는 것 같다

해결법

  1. ==============================

    1.스파크의 블록에 대한 기본적인 추상화 불행히도에 Integer.MAX_VALUE (~ 2GB)의 제한이 ByteBuffer를이다.

    스파크의 블록에 대한 기본적인 추상화 불행히도에 Integer.MAX_VALUE (~ 2GB)의 제한이 ByteBuffer를이다.

    그것은 방지가 매우 큰 데이터 세트와 함께 불꽃의 사용 중요한 문제입니다. 파티션의 수를 늘리면 (OP의 경우와 같은)를 해결하지만, 변환 데이터를 증가시킬 수있는 부분 (flatMap 등) 또는 데이터가 기울어 진 경우의 대형 체인이있는 경우 예를 들어, 항상 가능하지 않습니다 수 있습니다.

    제안 된 솔루션은 블록 ByteBuffer의 목록을 지원할 수 LargeByteBuffer 같은 추상화을 마련하는 것입니다. 이 영향 전반적인 스파크 아키텍처는, 그래서 그것은 아주 잠시 동안 해결되지 않은 남아있다.

  2. ==============================

    2.블록 크기는 데이터 스토어 분할에 기초 카산드라, HBase를하거나 Accumulo 같은 데이터 저장소를 사용하는 경우 문제가있다 (이상 10 기가 될 수 있음). 이러한 데이터 저장소로부터 데이터를로드하면 파티션의 1000 즉시 다시 분할해야 할 때 당신은 2gig 제한을 불어없이 데이터를 조작 할 수 있습니다.

    블록 크기는 데이터 스토어 분할에 기초 카산드라, HBase를하거나 Accumulo 같은 데이터 저장소를 사용하는 경우 문제가있다 (이상 10 기가 될 수 있음). 이러한 데이터 저장소로부터 데이터를로드하면 파티션의 1000 즉시 다시 분할해야 할 때 당신은 2gig 제한을 불어없이 데이터를 조작 할 수 있습니다.

    사용 스파크 대부분의 사람들은 정말 많은 데이터를 사용하지 않는; 그들에게 엑셀에 저장할 수있는 더 큰 또는 타블로는 그들에게 빅 데이터 인 경우; 품질 데이터를 사용하거나 제한과 작업에 샘플 크기가 작은만큼을 사용하는 대부분의 데이터 과학자.

    대량의 데이터를 처리 할 때, 데이터가 정리 된 후에 만 ​​MapReduce를 사용한 스파크로 되돌아 갈 필요 끝. 이 스파크 사회의 대부분은 문제를 해결에 관심이없는, 그러나 불행한 일이다.

    간단한 해결책은 추상화를 생성하고 기본값으로 된 ByteArray 사용하는 것입니다; 그러나, 많은 작업을 처리 할 수있는 64 비트 데이터 포인터와 스파크 작업을 오버로드 할 수 있습니다.

  3. from https://stackoverflow.com/questions/29689719/why-does-spark-rdd-partition-has-2gb-limit-for-hdfs by cc-by-sa and MIT license