[HADOOP] 하둡에서 NullWritable을 사용할 때의 이점
HADOOP하둡에서 NullWritable을 사용할 때의 이점
Null 텍스트를 사용하는 것보다 NullWritable을 null 키 / 값에 사용하면 (즉, 새 Text (null)) 이점은 무엇입니까? «하둡 : 확실한 가이드»책에서 다음을 볼 수 있습니다.
출력이 NullWritable을 사용하여 어떻게 쓰여지는지 명확히 이해하지 못합니까? MapReduce 프레임 워크가 null 키 / 값 (null 중 하나)을 읽는 것을 무시할 수 있도록 초기 출력 파일에이 파일의 키 또는 값이 null임을 나타내는 단일 상수 값이 있습니까? 또한 실제로는 null 텍스트가 직렬화됩니까?
감사,
Venkat
해결법
-
==============================
1.런타임시 키 / 값 유형을 지정해야합니다. 따라서 NullWritable을 쓰거나 읽는 모든 것이 해당 유형을 처리 할 것이라는 것을 미리 알 수 있습니다. 파일에 마커 등이 없습니다. 그리고 기술적으로 NullWritable은 "읽기"입니다. NullWritable을 "읽는"것은 사실상 아무 작업도하지 않습니다. 당신은 아무것도 쓰거나 읽지 않는다는 것을 너 자신을 위해 볼 수있다 :
런타임시 키 / 값 유형을 지정해야합니다. 따라서 NullWritable을 쓰거나 읽는 모든 것이 해당 유형을 처리 할 것이라는 것을 미리 알 수 있습니다. 파일에 마커 등이 없습니다. 그리고 기술적으로 NullWritable은 "읽기"입니다. NullWritable을 "읽는"것은 사실상 아무 작업도하지 않습니다. 당신은 아무것도 쓰거나 읽지 않는다는 것을 너 자신을 위해 볼 수있다 :
NullWritable nw = NullWritable.get(); ByteArrayOutputStream out = new ByteArrayOutputStream(); nw.write(new DataOutputStream(out)); System.out.println(Arrays.toString(out.toByteArray())); // prints "[]" ByteArrayInputStream in = new ByteArrayInputStream(new byte[0]); nw.readFields(new DataInputStream(in)); // works just fine
그리고 새로운 Text (null)에 대한 질문은 다시 한번 시도해보십시오 :
Text text = new Text((String)null); ByteArrayOutputStream out = new ByteArrayOutputStream(); text.write(new DataOutputStream(out)); // throws NullPointerException System.out.println(Arrays.toString(out.toByteArray()));
텍스트는 null 문자열로 전혀 작동하지 않습니다.
-
==============================
2.나는 run 메소드를 변경한다. 성공
나는 run 메소드를 변경한다. 성공
@Override public int run(String[] strings) throws Exception { Configuration config = HBaseConfiguration.create(); //set job name Job job = new Job(config, "Import from file "); job.setJarByClass(LogRun.class); //set map class job.setMapperClass(LogMapper.class); //set output format and output table name //job.setOutputFormatClass(TableOutputFormat.class); //job.getConfiguration().set(TableOutputFormat.OUTPUT_TABLE, "crm_data"); //job.setOutputKeyClass(ImmutableBytesWritable.class); //job.setOutputValueClass(Put.class); TableMapReduceUtil.initTableReducerJob("crm_data", null, job); job.setNumReduceTasks(0); TableMapReduceUtil.addDependencyJars(job); FileInputFormat.addInputPath(job, new Path(strings[0])); int ret = job.waitForCompletion(true) ? 0 : 1; return ret; }
-
==============================
3.자신의 Writable 클래스에 문자열을 래핑 할 수 있으며 빈 문자열이 있는지 여부를 나타내는 부울 값을 가질 수 있습니다.
자신의 Writable 클래스에 문자열을 래핑 할 수 있으며 빈 문자열이 있는지 여부를 나타내는 부울 값을 가질 수 있습니다.
@Override public void readFields(DataInput in) throws IOException { ... boolean hasWord = in.readBoolean(); if( hasWord ) { word = in.readUTF(); } ... }
과
@Override public void write(DataOutput out) throws IOException { ... boolean hasWord = StringUtils.isNotBlank(word); out.writeBoolean(hasWord); if(hasWord) { out.writeUTF(word); } ... }
from https://stackoverflow.com/questions/16198752/advantages-of-using-nullwritable-in-hadoop by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] MapReduce 대안 (0) | 2019.07.05 |
---|---|
[HADOOP] HDFS 디렉토리 크기를 확인하는 방법은 무엇입니까? (0) | 2019.07.05 |
[HADOOP] Hadoop의 단일 모드와 가상 분산 모드의 차이점은 무엇입니까? (0) | 2019.07.04 |
[HADOOP] hadoop에서 "uber 모드"의 목적은 무엇입니까? (0) | 2019.07.04 |
[HADOOP] hadoop은 로컬 파일 시스템 폴더를 HDFS에 복사합니다. (0) | 2019.07.04 |