这是关于使用MongoDB驱动程序在HIVE和MongoDB之间建立连接。我已经通过在线链接,并注意到许多人只是轻松通过它。
然而,我一直面临着建立连接的重大问题。
首先,我在Windows 64位系统上使用Cloudera Quickstart VM 5.5。 此VM托管Hadoop沙箱。
我的桌面上安装了MongoDB(同样也支持Cloudera VM)。 MongoDB数据库没有身份验证。
我已经下载了用于连接2个环境的3个连接罐。
以下是步骤列表: -
在MongoDB上创建了集合并填充了数据。在端口27017上运行的MongoDB数据库服务器
启动Hive shell和 将以下jar添加到类路径中: -
mongo-hadoop-core-2.0.2.jar mongo-hadoop-hive-2.0.2.jar mongo-java-driver-3.5.0.jar
(最后一个 - Mongo-java-driver是从mongodb本身引用的网站下载的)
我将上述罐子上传到下面提到的目录中的HDFS,然后最终启动了HIVE shell并在hive shell中添加了jar: -
> ADD JAR hdfs:///tmp/hive/mongo/mongo-hadoop-core-2.0.2.jar;
> ADD JAR hdfs:///tmp/hive/mongo/mongo-hadoop-hive-2.0.2.jar;
> ADD JAR hdfs:///tmp/hive/mongo/mongo-java-driver-3.5.0.jar;
然后我从应该工作的HIVE shell运行这个命令: -
CREATE TABLE RAVINE ( id INT, h_name STRING, h_age INT ) STORED BY "com.mongodb.hadoop.hive.MongoStorageHandler" WITH SERDEPROPERTIES ('mongo.columns.mapping'='{"id":"_id","h_name":"name","h_age":"a ge"}') TBLPROPERTIES("mongo.uri"="mongodb://100.96.237.185:27017/test.beehive");
我得到的错误与Arvind上面提到的相同: -
FAILED:执行错误,返回代码1 org.apache.hadoop.hive.ql.exec.DDLTask。 COM / mongodb的/ util的/ JSON
我浏览了cloudera日志,看看错误是什么,并在这个日志上搞砸了: -
来自cloudera的日志文件
如果您要查看上述错误日志。它说
“无法读取jar文件”,java.util.zip.zipcollection无效END 标题(错误的中央目录偏移量)
这很令人困惑,因为我已经获得了同样的jar文件 - >来自https://mongodb.github.io/mongo-java-driver/
的“mongo-java-driver”为什么从同一网站下载的jar会导致此类错误?我假设有一个腐败的jar文件的可能性,所以我尝试从3.5.0下载各种驱动程序版本。一直到3.0.4 !!没有变化 - 同样的错误。
现在这是我的问题。在下载java驱动程序的站点上,Mongodb显示了maven依赖性: -
所以我的问题很简单!!如何从mongoDB网站下载的jar给我这样的错误 - 例如错误的偏移!!
有没有人对我接下来要做什么有任何建议,网上的大多数链接都是https://github.com/mongodb/mongo-hadoop/wiki/Hive-Usage 似乎听起来这是一个非常简单易行的30分钟过程,但是我花了几天才到达这个状态。
感谢任何帮助甚至建议。
答案 0 :(得分:0)
这些jar应位于本地unix目录中,而不是HDFS上。将所有这些jar放在UNIX框中的某个目录中,从那里运行Hive查询,然后将其添加为。
hive> ADD JAR /home/hive/mongo/mongo-hadoop-core-2.0.2.jar;
如果仍然无效,请尝试降级为v1.5.1
的{{1}}
请参阅与此相关的类似问题。 Unable to connect Hive with MongoDB using mongo-hadoop connector