[HADOOP] 메모리의 하둡 환원제 가치?
HADOOP메모리의 하둡 환원제 가치?
나는 감속기에 많은 수의 값으로 끝날지도 모르는 MapReduce 작업을 작성 중입니다. 한 번에 메모리에로드되는 모든 값이 걱정됩니다.
Iterable
감속기 출력은 입력 된 값보다 훨씬 더 클 것이지만 출력이 필요에 따라 디스크에 기록됩니다.
해결법
-
==============================
1.너는 책을 올바르게 읽는 중이다. 감속기는 모든 값을 메모리에 저장하지 않습니다. 대신 Iterable 값 목록을 반복 할 때 각 Object 인스턴스가 다시 사용되므로 지정된 시간에 하나의 인스턴스 만 유지합니다.
너는 책을 올바르게 읽는 중이다. 감속기는 모든 값을 메모리에 저장하지 않습니다. 대신 Iterable 값 목록을 반복 할 때 각 Object 인스턴스가 다시 사용되므로 지정된 시간에 하나의 인스턴스 만 유지합니다.
예를 들어 후속 코드에서 obj ArrayList는 루프 이후에 예상되는 크기를 가지지 만 모든 요소는 동일하게 유지되며 Text val 인스턴스는 반복 될 때마다 다시 사용됩니다.
public static class ReducerExample extends Reducer<Text, Text, Text, Text> { public void reduce(Text key, Iterable<Text> values, Context context) { ArrayList<Text> objs = new ArrayList<Text>(); for (Text val : values){ objs.add(val); } } }
(어떤 이유로 든 각 val에 대해 추가 작업을 수행하려는 경우 깊은 복사본을 만들어 저장해야합니다.)
물론 단일 값조차도 메모리보다 클 수 있습니다. 이 경우 개발자가 위의 매퍼에서 데이터를 축소하여 값이 너무 크지 않도록 조치하는 것이 좋습니다.
업데이트 : Hadoop The Definitive Guide 2nd Edition의 199-200 페이지를보십시오.
This code snippet makes it clear that the same key and value objects are used on each invocation of the map() method -- only their contents are changed (by the reader's next() method). This can be a surprise to users, who might expect keys and vales to be immutable. This causes prolems when a reference to a key or value object is retained outside the map() method, as its value can change without warning. If you need to do this, make a copy of the object you want to hold on to. For example, for a Text object, you can use its copy constructor: new Text(value). The situation is similar with reducers. In this case, the value object in the reducer's iterator are reused, so you need to copy any that you need to retain between calls to the iterator.
-
==============================
2.전체적으로 메모리에있는 것이 아니라 일부가 디스크에서 비롯된 것입니다. 프레임 워크가 Iterable을 세그먼트로 분리하고 디스크를 메모리 1에 하나씩로드하는 것처럼 코드를 살펴보아야합니다.
전체적으로 메모리에있는 것이 아니라 일부가 디스크에서 비롯된 것입니다. 프레임 워크가 Iterable을 세그먼트로 분리하고 디스크를 메모리 1에 하나씩로드하는 것처럼 코드를 살펴보아야합니다.
org.apache.hadoop.mapreduce.task.ReduceContextImpl org.apache.hadoop.mapred.BackupStore
-
==============================
3.다른 사용자가 인용 한 것처럼 전체 데이터가 메모리에로드되지 않았습니다. Apache 설명서 링크에서 mapred-site.xml 매개 변수 중 일부를 살펴보십시오.
다른 사용자가 인용 한 것처럼 전체 데이터가 메모리에로드되지 않았습니다. Apache 설명서 링크에서 mapred-site.xml 매개 변수 중 일부를 살펴보십시오.
mapreduce.reduce.merge.inmem.threshold
기본값 : 1000입니다. 이는 메모리 내 병합 프로세스의 파일 수로 임계 값입니다.
mapreduce.reduce.shuffle.merge.percent
기본값은 0.66입니다. 메모리 내 병합이 시작될 사용 임계 값으로, mapreduce.reduce.shuffle.input.buffer.percent에 정의 된대로 메모리 내 맵 출력 저장에 할당 된 총 메모리의 백분율로 표시됩니다.
mapreduce.reduce.shuffle.input.buffer.percent
기본값은 0.70입니다. shuffle 동안 최대 힙 크기에서 맵 출력 저장에 할당 할 메모리의 백분율.
mapreduce.reduce.input.buffer.percent
기본값은 0입니다. 최대 힙 크기에 상대적인 메모리 비율 - 축소 중에지도 출력을 유지합니다. 셔플이 완료되면 메모리에 남아있는 맵 출력은이 임계 값보다 작아 져야 감소가 시작될 수 있습니다.
mapreduce.reduce.shuffle.memory.limit.percent
기본값은 0.25입니다. 단일 셔플이 소비 할 수있는 메모리 내 한계의 최대 백분율
from https://stackoverflow.com/questions/11024638/hadoop-reducer-values-in-memory by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] pyspark 사용, hadoop 파일 시스템에서 2D 이미지 읽기 / 쓰기 (0) | 2019.06.15 |
---|---|
[HADOOP] 네임 스페이스 이미지 및 로그 편집 (0) | 2019.06.15 |
[HADOOP] 하이브 - LIKE 연산자 (0) | 2019.06.15 |
[HADOOP] core-site.xml에 fs.default.name을 설정하면 HDFS가 Safemode로 설정됩니다. (0) | 2019.06.15 |
[HADOOP] Apache Spark 비대칭 데이터 처리 (0) | 2019.06.15 |