복붙노트

[HADOOP] 몽고 - 하둡 커넥터를 사용하여 MongoDB와 하이브를 연결할 수 없습니다

HADOOP

몽고 - 하둡 커넥터를 사용하여 MongoDB와 하이브를 연결할 수 없습니다

나는 설치하고 처음으로, 몽고 - 하둡 코어 2.0.2 하이브를 구성하려합니다. 나는 하둡 2.8.0, 하이브 2.1.1 및 MongoDB를 3.4.6을 설치했습니다. 개별적으로 실행할 때 모든 것이 잘 작동합니다.

내 문제는 내가 하이브로 MongoDB를 연결할 수 아니에요입니다. 여기 https://github.com/mongodb/mongo-hadoop/wiki/Hive-Usage 언급 한 바와 같이 나는이에 대한 몽고 - 하둡 커넥터를 사용하고 있습니다 필요한 항아리는 하둡과 하이브 lib 디렉토리에 추가됩니다. 심지어 나는 하이브 콘솔에서 hive.sh 또는 런타임에 추가합니다.  테이블 쿼리를 만들고 실행하는 동안 나는 오류를 얻고있다

내 검색어는

CREATE EXTERNAL TABLE testHive
(
    id STRING,
    name STRING
)
STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler'
WITH SERDEPROPERTIES('mongo.columns.mapping'='{"id":"_id","name":"name"}')
TBLPROPERTIES('mongo.uri'='mongodb://localhost:27017/hiveDb.testHive');

그리고 나는 다음과 같은 오류가 발생합니다

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. com/mongodb/hadoop/io/BSONWritable
hive> ERROR hive.ql.exec.DDLTask - java.lang.NoClassDefFoundError: com/mongodb/hadoop/io/BSONWritable
    at com.mongodb.hadoop.hive.BSONSerDe.initialize(BSONSerDe.java:132)
    at org.apache.hadoop.hive.serde2.SerDeUtils.initializeSerDe(SerDeUtils.java:537)
    at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:424)
    at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:411)
    at org.apache.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:279)
    at org.apache.hadoop.hive.ql.metadata.Table.getDeserializer(Table.java:261)

그것은 COM / MongoDB를 / 하둡 / IO / BSONWritable 클래스가 클래스 경로에 있지하지만 필요한 (몽고 - 하둡-core.jar를) 항아리와 클래스가 항아리에 존재하는 추가 한 것을 알 수있다. 내가 사용하고 항아리의 버전

몽고 - 하둡 코어 2.0.2,

몽고 - 하둡 - 하이브 2.0.2,

몽고 - 자바 3.0.2 드라이버

감사

해결법

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

    1.명시 적으로 항아리를 등록해야합니다. 당신의 하이브 스크립트에서 사용 ADD의 JAR는, 예를 들어, 이러한 JAR 파일 (코어, 하이브, 그리고 자바 드라이버)를 포함하는 JAR /path-to/mongo-hadoop-hive-.jar를 추가하려면 명령 ;.

    명시 적으로 항아리를 등록해야합니다. 당신의 하이브 스크립트에서 사용 ADD의 JAR는, 예를 들어, 이러한 JAR 파일 (코어, 하이브, 그리고 자바 드라이버)를 포함하는 JAR /path-to/mongo-hadoop-hive-.jar를 추가하려면 명령 ;.

    당신이 하이브 쉘에서 실행하는 경우, 다음과 같이 사용합니다.

    하이브 /path-to/mongo-hadoop-hive-.jar JAR의 추가>;

    그런 다음 쿼리를 실행합니다.

  2. from https://stackoverflow.com/questions/45566804/unable-to-connect-hive-with-mongodb-using-mongo-hadoop-connector by cc-by-sa and MIT license