【问题标题】:Hive crashing on where clauseHive 在 where 子句上崩溃
【发布时间】:2016-10-14 19:01:58
【问题描述】:

我正在尝试让 hive-hadoop-mongo 设置工作。我已将数据从 json 文件导入 mongodb,然后在 hive 中创建了连接到 mongo 的内部和外部表:

CREATE EXTERNAL TABLE reviews(
    user_id STRING, 
    review_id STRING, 
    stars INT, 
    date1 STRING,
    text STRING,
    type STRING,
    business_id STRING
     )
    STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler'
    WITH SERDEPROPERTIES('mongo.columns.mapping'='{"date1":"date"}')
    TBLPROPERTIES('mongo.uri'='mongodb://localhost:27017/test.reviews');

这部分工作正常,因为全选查询 (select * from reviews) 会输出应有的所有内容。但是当我使用 where 子句(例如select * from reviews where stars=4)时,蜂巢崩溃了。

我在启动 hive 时添加了以下 jar:

add jar mongo-hadoop.jar;
add jar mongo-java-driver-3.3.0.jar;
add jar mongo-hadoop-hive-2.0.1.jar;

如果它在任何意义上是相关的,我正在为此使用 Amazon 的 EMR 集群,并且我通过 ssh 连接。

感谢大家的帮助

这是配置单元抛出的错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.exec.Utilities.deserializeExpression(Ljava/lang/String;)Lorg/apache/hadoop/hive/ql/plan/ExprNodeGenericFuncDesc;
    at com.mongodb.hadoop.hive.input.HiveMongoInputFormat.getFilter(HiveMongoInputFormat.java:134)
    at com.mongodb.hadoop.hive.input.HiveMongoInputFormat.getRecordReader(HiveMongoInputFormat.java:103)
    at org.apache.hadoop.hive.ql.exec.FetchOperator$FetchInputFormatSplit.getRecordReader(FetchOperator.java:691)
    at org.apache.hadoop.hive.ql.exec.FetchOperator.getRecordReader(FetchOperator.java:329)
    at org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:455)
    at org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:424)
    at org.apache.hadoop.hive.ql.exec.FetchTask.fetch(FetchTask.java:144)
    at org.apache.hadoop.hive.ql.Driver.getResults(Driver.java:1885)
    at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:252)
    at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:183)
    at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:399)
    at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:776)
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:714)
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:641)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

【问题讨论】:

    标签: mongodb hadoop hive emr


    【解决方案1】:

    如下所示的克里特表并检查。

    CREATE [EXTERNAL] TABLE <tablename>
    (<schema>)
    ROW FORMAT SERDE 'com.mongodb.hadoop.hive.BSONSerDe'
    [WITH SERDEPROPERTIES('mongo.columns.mapping'='<JSON mapping>')]
    STORED AS INPUTFORMAT 'com.mongodb.hadoop.mapred.BSONFileInputFormat'
    OUTPUTFORMAT 'com.mongodb.hadoop.hive.output.HiveBSONFileOutputFormat'
    [LOCATION '<path to existing directory>'];
    

    不是使用 StorageHandler 来读取、序列化、反序列化并将数据从 Hive 对象输出到 BSON 对象,而是单独列出各个组件。这是因为在处理原生 HDFS 文件系统时使用 StorageHandler 有太多的负面影响

    【讨论】:

    • 我现在收到此错误:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: java.io.IOException No FileSystem for scheme: mongodb)
    • 在相关说明中,这是否意味着 hive 将读取 mongodb 转储文件而不是直接查询 mongo?
    【解决方案2】:

    我明白了

    WITH SERDEPROPERTIES('mongo.columns.mapping'='{"date1":"date"}')
    

    并且您正在查询未映射的列星。

    【讨论】:

    • 文档说映射是可选的,但要确保我映射了所有内容。我仍然遇到同样的错误。
    【解决方案3】:

    我在我们的集群上遇到了这个问题。

    集群 hive 版本高于 mongo-hive 中的版本(即 1.2.1)

    旧类 org.apache.hadoop.hive.ql.exec.Utilities.deserializeExpression 已重命名为 org.apache.hadoop.hive.ql.exec.SerializationUtilities.deserializeExpression

    你需要自己重建jar。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多