복붙노트

[HADOOP] Hive는 어떻게 데이터를 저장하고 SerDe는 무엇입니까?

HADOOP

Hive는 어떻게 데이터를 저장하고 SerDe는 무엇입니까?

SerDe는 테이블을 쿼리 할 때 파일의 바이트에서 내부적으로 하이브가 사용하는 개체로 데이터 행을 deserialize하여 해당 데이터 행을 조작합니다. INSERT 또는 CTAS를 수행 할 때 (441 페이지의 "데이터 가져 오기"참조) 테이블의 SerDe는 하이브의 내부 데이터 표현을 출력 파일에 기록 된 바이트로 직렬화합니다.

해결법

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

    1.답변

    답변

    SerDe를 쓰는 방법에 대한 자세한 내용은이 게시물 읽기

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

    2.이 측면에서 우리는 Hive를 일종의 데이터베이스 엔진으로 볼 수 있습니다. 이 엔진은 레코드로 빌드 된 테이블에서 작업 중입니다. Hive (다른 데이터베이스와 마찬가지로)가 내부 형식으로 작업하게 만들 때 우리는 신경 쓰지 않습니다. Hive가 우리 자신의 파일을 테이블 (외부 테이블)로 처리하게하려면 파일의 데이터를 레코드로 변환하는 방법을 알려야합니다. 이것이 바로 SerDe의 역할입니다. Hive가 데이터를 읽고 쓸 수있게 해주는 플러그인으로 볼 수 있습니다. 예를 들어, CSV로 작업하고 싶습니다. 다음은 CSV_Serde의 예입니다. https://github.com/ogrodnek/csv-serde/blob/master/src/main/java/com/bizo/hive/serde/csv/CSVSerde.java 메서드 serialize는 데이터를 읽고 CSV라고 가정하고 필드로 잘라냅니다. deserialize 메서드는 레코드를 가져 와서 CSV 형식으로 지정합니다.

    이 측면에서 우리는 Hive를 일종의 데이터베이스 엔진으로 볼 수 있습니다. 이 엔진은 레코드로 빌드 된 테이블에서 작업 중입니다. Hive (다른 데이터베이스와 마찬가지로)가 내부 형식으로 작업하게 만들 때 우리는 신경 쓰지 않습니다. Hive가 우리 자신의 파일을 테이블 (외부 테이블)로 처리하게하려면 파일의 데이터를 레코드로 변환하는 방법을 알려야합니다. 이것이 바로 SerDe의 역할입니다. Hive가 데이터를 읽고 쓸 수있게 해주는 플러그인으로 볼 수 있습니다. 예를 들어, CSV로 작업하고 싶습니다. 다음은 CSV_Serde의 예입니다. https://github.com/ogrodnek/csv-serde/blob/master/src/main/java/com/bizo/hive/serde/csv/CSVSerde.java 메서드 serialize는 데이터를 읽고 CSV라고 가정하고 필드로 잘라냅니다. deserialize 메서드는 레코드를 가져 와서 CSV 형식으로 지정합니다.

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

    3.Hive는 세미 구조화 된 데이터와 구조화되지 않은 데이터를 (1) 복합 데이터 유형 (구조체, 배열, 공용체) (2) SerDe를 사용함으로써

    Hive는 세미 구조화 된 데이터와 구조화되지 않은 데이터를 (1) 복합 데이터 유형 (구조체, 배열, 공용체) (2) SerDe를 사용함으로써

    SerDe 인터페이스를 사용하면 레코드를 처리하는 방법을 하이브에 지시 할 수 있습니다. Serializer는 하이브가 작업중인 java 객체를 가져 와서 하이브가 저장할 수있는 것으로 변환하고 Deserializer는 레코드의 바이너리 표현을 가져 와서 하이브가 조작 할 수있는 Java 객체로 변환합니다.

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

    4.나는 위의 개념이 serialise와 deserialise를 가지고 있다고 생각한다. Serialise가 write 일 때 구조화 된 데이터는 저장을 위해 비트 / 바이트 스트림으로 직렬화됩니다. read시, 데이터는 비트 / 바이트 저장 형식에서 리더가 요구하는 구조로 deserialize됩니다. 예를 들어 Hive는 행과 열처럼 보이는 구조를 필요로하지만 hdfs는 데이터를 비트 / 바이트 블록에 저장하므로 쓰기시 직렬화되고 읽기는 deserialise가됩니다.

    나는 위의 개념이 serialise와 deserialise를 가지고 있다고 생각한다. Serialise가 write 일 때 구조화 된 데이터는 저장을 위해 비트 / 바이트 스트림으로 직렬화됩니다. read시, 데이터는 비트 / 바이트 저장 형식에서 리더가 요구하는 구조로 deserialize됩니다. 예를 들어 Hive는 행과 열처럼 보이는 구조를 필요로하지만 hdfs는 데이터를 비트 / 바이트 블록에 저장하므로 쓰기시 직렬화되고 읽기는 deserialise가됩니다.

  5. from https://stackoverflow.com/questions/14605640/how-does-hive-stores-data-and-what-is-serde by cc-by-sa and MIT license