[HADOOP] hadoop의 전역 변수
HADOOPhadoop의 전역 변수
내 프로그램은 반복 맵 / 축소 접근법을 따릅니다. 그리고 특정 조건이 충족되면 중지해야합니다. 어쨌든 전역 변수를 설정하여 모든 맵 / 축소 작업에 배포 할 수 있으며 전역 변수가 완료 조건에 도달했는지 확인하십시오.
이 같은.
While(Condition != true){
Configuration conf = getConf();
Job job = new Job(conf, "Dijkstra Graph Search");
job.setJarByClass(GraphSearch.class);
job.setMapperClass(DijkstraMap.class);
job.setReducerClass(DijkstraReduce.class);
job.setOutputKeyClass(IntWritable.class);
job.setOutputValueClass(Text.class);
}
condition은 각 map / reduce 실행 중에 / 수정 된 전역 변수입니다.
해결법
-
==============================
1.map-reduce 작업을 실행할 때마다 출력의 상태와 카운터에 포함 된 값 등을 검사하고 하나 이상의 반복이 필요한지 여부에 따라 반복을 제어하는 노드에서 결정을 내릴 수 있습니다. 나는 당신이 시나리오에서 글로벌 상태에 대한 필요성이 어디서 왔는지 이해하지 못한다고 생각합니다.
map-reduce 작업을 실행할 때마다 출력의 상태와 카운터에 포함 된 값 등을 검사하고 하나 이상의 반복이 필요한지 여부에 따라 반복을 제어하는 노드에서 결정을 내릴 수 있습니다. 나는 당신이 시나리오에서 글로벌 상태에 대한 필요성이 어디서 왔는지 이해하지 못한다고 생각합니다.
일반적으로 실행중인 노드간에 상태가 공유되는 두 가지 주요 방법이 있습니다 (공유 상태는 확장 성을 제한하기 때문에 최대한 피할 수 있습니다).
-
==============================
2.Configuration.set (문자열 이름, 문자열 값)을 사용하여 Mappers / Reducers / etc에서 액세스 할 수있는 값을 설정할 수 있습니다.
Configuration.set (문자열 이름, 문자열 값)을 사용하여 Mappers / Reducers / etc에서 액세스 할 수있는 값을 설정할 수 있습니다.
운전 기사 :
conf.set("my.dijkstra.parameter", "value");
예 : 귀하의 매퍼에서 :
public void configure(JobConf job) { myParam = job.get("my.dijkstra.parameter"); }
그러나이 방법을 사용하면 이전 작업의 결과를보고 반복을 다시 시작할지 여부를 결정하는 데 도움이되지 않습니다. 나. 이 값은 작업 실행 후에 다시 푸시되지 않습니다.
또한 Hadoop의 DistributedCache를 사용하여 모든 노드에 분산되는 파일을 저장할 수 있습니다. 이런 방식으로 전달하려는 가치가 작은 것이라면 HDFS에 무엇인가를 저장하는 것보다 조금 낫습니다.
물론 이러한 목적으로 카운터를 사용할 수도 있습니다. 그러나 알고리즘에서 의사 결정을하기에는 너무 안정적이지 않습니다. 어떤 경우에는 두 번 증가 할 수있는 것처럼 보입니다 (실패 또는 추측 실행의 경우와 같이 특정 태스크가 두 번 이상 실행 된 경우) - 확실하지 않습니다.
-
==============================
3.이것이 Hadoop 2.0에서 작동하는 방식입니다.
이것이 Hadoop 2.0에서 작동하는 방식입니다.
운전 기사 :
conf.set("my.dijkstra.parameter", "value");
그리고 귀하의 매퍼 :
protected void setup(Context context) throws IOException, InterruptedException { Configuration conf = context.getConfiguration(); strProp = conf.get("my.dijkstra.parameter"); // and then you can use it }
-
==============================
4.계단식 연결을 사용하여 여러 개의 Hadoop 작업을 구성 할 수 있습니다. 전역 상태 변수를 유지하고 더미 내용으로 초기화하려는 HDFS 경로를 지정하십시오. 반복 할 때마다이 HDFS 경로의 현재 내용을 읽고, 그 내용을 삭제하고, 여러 단계의 맵 / 축소 단계를 수행하고 마지막으로 전역 상태 변수를 업데이트하는 전역 축소 작업을 수행합니다. 작업의 성격에 따라 추측 실행을 비활성화하고 많은 재 시도를 허용해야 할 수도 있습니다.
계단식 연결을 사용하여 여러 개의 Hadoop 작업을 구성 할 수 있습니다. 전역 상태 변수를 유지하고 더미 내용으로 초기화하려는 HDFS 경로를 지정하십시오. 반복 할 때마다이 HDFS 경로의 현재 내용을 읽고, 그 내용을 삭제하고, 여러 단계의 맵 / 축소 단계를 수행하고 마지막으로 전역 상태 변수를 업데이트하는 전역 축소 작업을 수행합니다. 작업의 성격에 따라 추측 실행을 비활성화하고 많은 재 시도를 허용해야 할 수도 있습니다.
from https://stackoverflow.com/questions/2888788/global-variables-in-hadoop by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop - Mapper에서 직접 HBase에 쓰기 (0) | 2019.07.07 |
---|---|
[HADOOP] Hbase Java 예제를 실행하는 방법? (0) | 2019.07.07 |
[HADOOP] Hadoop MapReduce : 감속기 수에 대한 설명 (0) | 2019.07.07 |
[HADOOP] Hive INSERT OVERWRITE DIRECTORY 명령 출력이 분리 문자로 분리되지 않습니다. 왜? (0) | 2019.07.07 |
[HADOOP] / hbase 오류에 대한 Hbase 클라이언트 ConnectionLoss (0) | 2019.07.07 |