복붙노트

[HADOOP] 하이브 테이블에 대한 JSON 파일의 항목 구분

HADOOP

하이브 테이블에 대한 JSON 파일의 항목 구분

우리는 우리가, 상단에 다음 추상적 인 하이브 테이블이 SerDe을 사용하여 HDFS로 덤프 할 계획 REST API를 호출을 통해 JSON 데이터 (특히 공공 소셜 미디어 게시물)를 수집하고 있습니다. 나는 파일에 JSON 항목에 따라 적절한 구분이 될 것입니다 무슨 생각 궁금해? 그것은 새로운 라인 ( "\ n을")인가? 그래서 다음과 같이 보일 것이다 :

{ id: entry1 ... post: }
{ id: entry2 ... post: }
...
{ id: entryn ... post: }

어떻게 우리가 포스트에서 예를 들어, JSON 데이터 자체 내에서 새 줄 문자가 발생하는 경우는 어떻습니까?

해결법

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

    1.가장 좋은 방법은 당신이 짐작 그대로 "\ n을"로 구분하여 한 줄에 하나의 기록을 할 것이다. 이것은 또한 당신이 JSON 요소 내부에있을 수 있습니다 "\ n을"를 탈출 조심해야한다는 것을 의미한다. 들여 쓰기 JSON 처리를 배포 할 수 있기 때문에, 하둡은 기록이 종료 될 때 N은 W 정도 크기의 덩어리 N에 W 노동자 바이트로 파일의 처리를 분할 할 수 있도록 / 말할 수 있어야합니다, 하둡 / 하이브 잘 작동하지 않습니다 W. 분할은 텍스트, TextInputFormat의 경우에 사용되어있어 특정 InputFormat에 의해 수행된다. TextInputFormat 기본적 난 (W-1에 대해 1 내지 I) N / W를 바이트 * 후 발견 "\ n"의 첫번째 인스턴스에서 파일을 분할한다. 이러한 이유로, 주변의 다른 "\ n을"을 갖는 하둡을 혼동 것이며, 그것은 당신에게 불완전한 기록을 제공 할 것입니다.

    가장 좋은 방법은 당신이 짐작 그대로 "\ n을"로 구분하여 한 줄에 하나의 기록을 할 것이다. 이것은 또한 당신이 JSON 요소 내부에있을 수 있습니다 "\ n을"를 탈출 조심해야한다는 것을 의미한다. 들여 쓰기 JSON 처리를 배포 할 수 있기 때문에, 하둡은 기록이 종료 될 때 N은 W 정도 크기의 덩어리 N에 W 노동자 바이트로 파일의 처리를 분할 할 수 있도록 / 말할 수 있어야합니다, 하둡 / 하이브 잘 작동하지 않습니다 W. 분할은 텍스트, TextInputFormat의 경우에 사용되어있어 특정 InputFormat에 의해 수행된다. TextInputFormat 기본적 난 (W-1에 대해 1 내지 I) N / W를 바이트 * 후 발견 "\ n"의 첫번째 인스턴스에서 파일을 분할한다. 이러한 이유로, 주변의 다른 "\ n을"을 갖는 하둡을 혼동 것이며, 그것은 당신에게 불완전한 기록을 제공 할 것입니다.

    대안으로, 나는 그것을 권하고 싶지 않다, 그러나 당신이 정말 원한다면 당신은 문자를 사용하여 속성을 "textinputformat.record.delimiter"하둡 / 하이브를 통해 파일을 읽어 구성하여 "\ n을"이외의 문자를 사용할 수 있습니다 즉, (001 또는 CTRL-A \ 일반적으로 필드 구분 기호로 하이브에 의해 사용되는, 예를 들어)하지만 그것은 또한 SerDe에서 지원해야하기 때문에 그 까다로운 일이 될 수 있습니다 JSON에되지 않습니다. 또한 레코드 구분 기호를 변경하는 경우, 복사 / HDFS에 파일을 사용하는 사람은 구분 기호를 인식해야한다, 또는 그들이 올바르게 구문 분석 할 수 없습니다, 및 "유지하면서, 그것을 할 특수 코드가 필요합니다 \ n "은 구분 기호로, 파일은 여전히 ​​일반 텍스트 파일 될 것입니다 및 기타 도구를 사용할 수 있습니다.

    SerDe에 관해서는, 나는 내가 쓴 부인으로,이 하나를 권 해드립니다 :) https://github.com/rcongiu/Hive-JSON-Serde

  2. from https://stackoverflow.com/questions/33820906/entry-delimiter-of-json-files-for-hive-table by cc-by-sa and MIT license