복붙노트

[HADOOP] Hadoop이 String이나 Integer 대신에 Text 나 ​​IntWritable 같은 클래스를 필요로하는 이유는 무엇입니까?

HADOOP

Hadoop이 String이나 Integer 대신에 Text 나 ​​IntWritable 같은 클래스를 필요로하는 이유는 무엇입니까?

Hadoop이 이러한 새로운 클래스를 도입해야하는 이유는 무엇입니까? 그들은 단지 인터페이스를 복잡하게 만드는 것처럼 보입니다.

해결법

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

    1.Hadoop 방식으로 객체를 처리하기 위해서. 예를 들어, hadoop은 java의 String 대신 Text를 사용합니다. hadoop의 Text 클래스는 java String과 유사하지만 Text는 Comparable, Writable 및 WritableComparable과 같은 인터페이스를 구현합니다.

    Hadoop 방식으로 객체를 처리하기 위해서. 예를 들어, hadoop은 java의 String 대신 Text를 사용합니다. hadoop의 Text 클래스는 java String과 유사하지만 Text는 Comparable, Writable 및 WritableComparable과 같은 인터페이스를 구현합니다.

    MapReduce에는 이러한 인터페이스가 모두 필요합니다. Comparable 인터페이스는 감속기가 키를 정렬 할 때를 비교하는 데 사용되고 Writable은 결과를 로컬 디스크에 쓸 수 있습니다. java Serializable은 hadoop에 너무 크거나 무겁기 때문에 java Serializable을 사용하지 않습니다. Writable은 매우 가벼운 방식으로 hadoop 객체를 직렬화 할 수 있습니다.

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

    2.큰 데이터 세계에서 구조화 된 객체는 네트워크를 통해 이동하거나 클러스터의 디스크에 유지하기 위해 바이트 스트림으로 직렬화해야하므로 필요에 따라 다시 직렬화됩니다. Facebook과 같은 규모로 방대한 양의 데이터를 저장 및 이동하려면 데이터를 효율적으로 관리하고 저장 공간을 최소화하고 가능한 한 이동할 시간이 필요합니다.

    큰 데이터 세계에서 구조화 된 객체는 네트워크를 통해 이동하거나 클러스터의 디스크에 유지하기 위해 바이트 스트림으로 직렬화해야하므로 필요에 따라 다시 직렬화됩니다. Facebook과 같은 규모로 방대한 양의 데이터를 저장 및 이동하려면 데이터를 효율적으로 관리하고 저장 공간을 최소화하고 가능한 한 이동할 시간이 필요합니다.

    문자열과 정수는 단순히 너무 뚱뚱합니다. Text 및 IntWritable은 각각 동일한 유형의 정보를 나타내는 바이트 배열 위에 훨씬 쉽게 추상화를 제공합니다.

  3. ==============================

    3.Apache 설명서 페이지에서 :

    Apache 설명서 페이지에서 :

    쓰기 가능한 인터페이스는 다음과 같이 설명됩니다.

    이 새로운 API를 사용하면 복잡하지 않습니다. 이러한 새로운 클래스를 사용한 직렬화 프로세스는 선명하고 간결합니다.

    Hadoop의 효과를 위해 클러스터의 노드간에 엄청난 수의 원격 호출이 발생하기 때문에 직렬화 / 직렬화 해제 프로세스를 최적화해야합니다. 따라서 직렬화 형식은 빠르고, 작고, 확장 가능하며 상호 운용 가능해야합니다. 이러한 이유로 인해 Hadoop 프레임 워크는 Java 기본 데이터 유형을 대체 할 IO 클래스를 제공합니다. 예 : int 형의 IntWritbale, long 형의 LongWritable, String 용의 텍스트 등.

    Hadoop에서이 주제에 대한 자세한 내용을 확인할 수 있습니다. 최종 가이드 : 4th Edition

  4. ==============================

    4.좀 더 좋은 정보 :

    좀 더 좋은 정보 :

    관련성 높은 두 가지 기능이 있습니다.

    「Writable」인터페이스를 가지고있어, DataOutput 스트림에의 기입 해, DataInput 스트림으로부터의 읽어내는 방법을 명시 적으로 알고 있습니다.

    set () 작업을 통해 내용이 업데이트됩니다. 이렇게하면 새 인스턴스를 만들지 않고 동일한 값을 반복적으로 재사용 할 수 있습니다. 동일한 매퍼 또는 감속기가 반복적으로 호출되는 경우 훨씬 효율적입니다. 생성자에서 쓰기 가능 인스턴스를 만들고 다시 사용하면됩니다.

    비교해 보면, Java의 Serializable 프레임 워크는 객체를 "마술처럼"직렬화합니다. 그러나 이것은 약간 부서지기 쉽고 일반적으로 이전 버전의 클래스에서 생성 된 값을 읽을 수 없습니다. 자바 객체 스트림은 객체의 그래프를 전송하도록 설계되었습니다. 이미 객체 참조가 푸시 아웃 된 것을 기억하고 돌아 오는 동안 동일한 작업을 수행해야합니다. writables는 자체 포함하도록 설계되었습니다.

    이것은 http://hortonworks.com/community/forums/topic/why-hadoop-uses-default-longwritable-or-intwritable/입니다.

  5. from https://stackoverflow.com/questions/19441055/why-does-hadoop-need-classes-like-text-or-intwritable-instead-of-string-or-integ by cc-by-sa and MIT license