[HADOOP] Hive는 어떻게 데이터를 저장하고 SerDe는 무엇입니까?
HADOOPHive는 어떻게 데이터를 저장하고 SerDe는 무엇입니까?
SerDe는 테이블을 쿼리 할 때 파일의 바이트에서 내부적으로 하이브가 사용하는 개체로 데이터 행을 deserialize하여 해당 데이터 행을 조작합니다. INSERT 또는 CTAS를 수행 할 때 (441 페이지의 "데이터 가져 오기"참조) 테이블의 SerDe는 하이브의 내부 데이터 표현을 출력 파일에 기록 된 바이트로 직렬화합니다.
해결법
-
==============================
1.답변
답변
SerDe를 쓰는 방법에 대한 자세한 내용은이 게시물 읽기
-
==============================
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.Hive는 세미 구조화 된 데이터와 구조화되지 않은 데이터를 (1) 복합 데이터 유형 (구조체, 배열, 공용체) (2) SerDe를 사용함으로써
Hive는 세미 구조화 된 데이터와 구조화되지 않은 데이터를 (1) 복합 데이터 유형 (구조체, 배열, 공용체) (2) SerDe를 사용함으로써
SerDe 인터페이스를 사용하면 레코드를 처리하는 방법을 하이브에 지시 할 수 있습니다. Serializer는 하이브가 작업중인 java 객체를 가져 와서 하이브가 저장할 수있는 것으로 변환하고 Deserializer는 레코드의 바이너리 표현을 가져 와서 하이브가 조작 할 수있는 Java 객체로 변환합니다.
-
==============================
4.나는 위의 개념이 serialise와 deserialise를 가지고 있다고 생각한다. Serialise가 write 일 때 구조화 된 데이터는 저장을 위해 비트 / 바이트 스트림으로 직렬화됩니다. read시, 데이터는 비트 / 바이트 저장 형식에서 리더가 요구하는 구조로 deserialize됩니다. 예를 들어 Hive는 행과 열처럼 보이는 구조를 필요로하지만 hdfs는 데이터를 비트 / 바이트 블록에 저장하므로 쓰기시 직렬화되고 읽기는 deserialise가됩니다.
나는 위의 개념이 serialise와 deserialise를 가지고 있다고 생각한다. Serialise가 write 일 때 구조화 된 데이터는 저장을 위해 비트 / 바이트 스트림으로 직렬화됩니다. read시, 데이터는 비트 / 바이트 저장 형식에서 리더가 요구하는 구조로 deserialize됩니다. 예를 들어 Hive는 행과 열처럼 보이는 구조를 필요로하지만 hdfs는 데이터를 비트 / 바이트 블록에 저장하므로 쓰기시 직렬화되고 읽기는 deserialise가됩니다.
from https://stackoverflow.com/questions/14605640/how-does-hive-stores-data-and-what-is-serde by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Spark RDD에서 빈 파티션을 제거하십시오. (0) | 2019.07.21 |
---|---|
[HADOOP] 스파크가 다른 사용자로 원사에 제출 (0) | 2019.07.21 |
[HADOOP] java.lang.OutOfMemoryError : 하이브가있는 Java 힙 공간 (0) | 2019.07.21 |
[HADOOP] 노드 / hbase가 ZooKeeper에 없습니다. (0) | 2019.07.21 |
[HADOOP] hdfs의 파일 경로 (0) | 2019.07.20 |