(하둡) 직렬화
직렬화는 네트워크 전송을 위해 구조화된 객체를 바이트 스트림으로 전환하는 과정이다. 역지렬화는 바이트 스트림을 일련의 구조화된 객체로 역전환하는 과정이다. 직렬화는 프로세스간 통신과 영속적인 저장소와 같은 분산 데이터 처리의 독특한 두 영역에서 나타난다. 하둡 시스템에서 노드 사이의 프로세스 간 통신은 원격 프로시저 호출(RPC) 을 사용하여 구현한다. RPC프로토콜은 원격 노드로 보내기 위한 메시지를 하나의 바이너리 스트림으로 구성하기 위해 직렬화를 사용하고, 그 후 원격 노드에서 바이너리 스트림을 원본 메시지로 재구성하기 위해 역직렬화를 사용한다. 일반적으로 RPC직렬화 포맷이 유익한 이유는 다음과 같다. 간결성 간결한 포맷을 사용하면 데이터 센터에서 가장 희소성이 높은 자원인 네트워크 대역폭을 절약할 수 있다. 고속화 프로세스 간 통신은 분산 시스템을 위한 백본을 형성하기 때문에 직렬화와 역직렬화는 가능한 오버헤드가 작아야한다. 확장성 프로토콜은 새로운 요구사항을 만족시키기 위해 점차 변경되므로 클라이언트와 서버 사이의 통제 방식과 관련된 프로토콜의 발전도 직관적이어야한다. 예를들어 새로운 인자를 메소드 호출에 추가할 수 있어야하고, 새로운 서버는 기존 클라이언트에서(새로운 인자없이) 예전 포맷의 메시지도 수용할 수 있어야한다. 상호운용성 일부 시스템을 위해 다양한 언어로 작성된 클라이언트를 지원하는 편이 좋으며, 이를 가능하도록 포맷을 설계할 필요가있다. 하둡은 Writeable이라는 매우 간결하고 빠른 자체 직렬화 포맷을 사용한다. 그러나 확장하거나 자바외에 다른 언어를 사용하는 것은 어렵다. 에이브로는(Writable의 일부 한계를 극복하기 위해 설계된 직렬화시스템) 자바 기본자료형을 위한 Writable래퍼 char(IntWritable로 저장가능)를 제외한 모든 자바 기본 자료형을 위한 Writable 래퍼가 존...