복붙노트

[HADOOP] Cosmos의 JSON 파일에서 열을 선택할 때 MapReduce 오류

HADOOP

Cosmos의 JSON 파일에서 열을 선택할 때 MapReduce 오류

문제는 다음과 같습니다.

Cygnus 0.2.1로 테이블을 만든 후 Hive에서 열을 선택하려고 할 때 MapReduce 오류가 발생합니다. Cygnus가 hadoop에서 생성 한 파일을 보면 사용 된 형식이 JSON임을 알 수 있습니다. 이 문제는 CSV 형식으로 hadoop 파일을 만들 때 이전 버전의 Cygnus에서 나타나지 않았습니다.

그것을 테스트하기 위해 각 형식에서 읽은 두 테이블을 남겼습니다. 다음 쿼리를 사용하여 오류를 비교하고 볼 수 있습니다.

SELECT entitytype FROM fiware_ports_meteo; (it fails, created with 0.2.1 in JSON format)
SELECT entitytype FROM fiware_test_table; (it works, created with 0.2 in CSV format)

HDFS 파일의 경로는 각각 다음과 같습니다.

/user/fiware/ports/meteo
/user/fiware/testTable/

CSV 형식이 예상대로 작동하기 때문에 MapReduce 작업으로 JSON 파일을 구문 분석하면 오류가 발생했다고 생각합니다.

이 문제를 어떻게 피할 수 있습니까?

해결법

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

    1.Json serde를 Hive 클래스 경로에 추가하기 만하면됩니다. 권한이없는 사용자는 Hive CLI에서이를 수행 할 수 있습니다.

    Json serde를 Hive 클래스 경로에 추가하기 만하면됩니다. 권한이없는 사용자는 Hive CLI에서이를 수행 할 수 있습니다.

    hive> ADD JAR /usr/local/hive-0.9.0-shark-0.8.0-bin/lib/json-serde-1.1.9.3-SNAPSHOT.jar;
    

    원격 Hive 클라이언트를 개발 한 경우 다른 쿼리 실행과 동일한 작업을 수행 할 수 있습니다. Java를 사용한다고 가정 해 봅시다.

    Statement stmt = con.createStatement();
    stmt.executeQuery(“ADD JAR /usr/local/hive-0.9.0-shark-0.8.0-bin/lib/json-serde-1.1.9.3-SNAPSHOT.jar”);
    stmt.close();
    
  2. from https://stackoverflow.com/questions/25024342/mapreduce-error-when-selecting-column-from-json-file-in-cosmos by cc-by-sa and MIT license