[HADOOP] 하둡 맵리 듀스 작업이 맵에서 멈춤 100 % 감소 51 %
HADOOP하둡 맵리 듀스 작업이 맵에서 멈춤 100 % 감소 51 %
그래서, 나는 어딘가에서 무한 루프를 찾고 있는데, 이것을 일으킬 수있는 다른 것이 있는지 모르겠습니다. 나는 네 개의 클러스터 노드를 사용하고 있으므로 같은 종류의 다른 질문에서 제안한 것처럼 RAM이 부족하지 않을 것이라고 확신합니다.
내 코드 :
package org.myorg;
import java.io.IOException;
import java.util.*;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import util.hashing.*;
public class LatLong {
public static class Map extends Mapper<Object, Text, Text, Text> {
//private final static IntWritable one = new IntWritable(1);
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] longLatArray = line.split(",");
double longi = Double.parseDouble(longLatArray[0]);
double lat = Double.parseDouble(longLatArray[1]);
//List<Double> origLatLong = new ArrayList<Double>(2);
//origLatLong.add(lat);
//origLatLong.add(longi);
Geohash inst = Geohash.getInstance();
//encode is the library's encoding function
String hash = inst.encode(lat,longi);
//Using the first 5 characters just for testing purposes
//Need to find the right one later
int accuracy = 4;
//hash of the thing is shortened to whatever I figure out
//to be the right size of each tile
Text shortenedHash = new Text(hash.substring(0,accuracy));
Text origHash = new Text(hash);
context.write(shortenedHash, origHash);
}
}
public static class Reduce extends Reducer<Text, Text, Text, Text> {
private IntWritable totalTileElementCount = new IntWritable();
private Text latlongimag = new Text();
private Text dataSeparator = new Text();
@Override
public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
int elementCount = 0;
boolean first = true;
Iterator<Text> it = values.iterator();
String lat = new String();
String longi = new String();
Geohash inst = Geohash.getInstance();
while (it.hasNext()) {
elementCount = elementCount+1;
if(first)
{
double[] doubleArray = (inst.decode(it.next().toString()));
lat = Double.toString(doubleArray[0]);
longi = Double.toString(doubleArray[1]);
first = false;
}
}
totalTileElementCount.set(elementCount);
//Geohash inst = Geohash.getInstance();
String mag = totalTileElementCount.toString();
latlongimag.set(lat+","+ longi +","+mag+",");
dataSeparator.set("");
context.write(latlongimag, dataSeparator );
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = new Job(conf, "wordcount");
job.setJarByClass(LatLong.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.waitForCompletion(true);
}
}
해결법
-
==============================
1.내부
내부
while (it.hasNext()) { elementCount = elementCount+1; if(first) { double[] doubleArray = (inst.decode(it.next().toString())); lat = Double.toString(doubleArray[0]); longi = Double.toString(doubleArray[1]); first = false; } }
first = false로 설정하십시오. 따라서 다음 while (it.hasNext ()) 루프 반복에서는 if (first)가 입력되지 않고 it.next ()가 다시 호출되지 않으므로 요소가 둘 이상인 경우 it.hasNext ()는 항상 true를 반환하고 이 while 루프를 떠나지 않을 것입니다.
from https://stackoverflow.com/questions/24089330/hadoop-mapreduce-job-stuck-at-map-100-reduce-51 by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 가방 안에 랭크? (0) | 2019.09.12 |
---|---|
[HADOOP] Windows에서 HBase가 독립형 모드로 시작되지 않음 (0) | 2019.09.12 |
[HADOOP] Hadoop 버전과 Hadoop-common 버전 사이에는 어떤 관계가 있습니까? (0) | 2019.09.12 |
[HADOOP] 버킷과 인덱싱의 차이 (Hive (Bigdata)) (0) | 2019.09.12 |
[HADOOP] Apache Drill이 업데이트, 삭제, 삽입 조작을 실행할 수있는 경우 (0) | 2019.09.12 |