【问题标题】:Hadoop map jobs fail with com.datastax.driver.core.exceptions.NoHostAvailableExceptionHadoop 映射作业因 com.datastax.driver.core.exceptions.NoHostAvailableException 而失败
【发布时间】:2014-11-21 06:30:46
【问题描述】:

我正在尝试使用 hadoop map-reduce 对存储在 cassandra 中的数据进行分析。为此,我使用通过 maven 依赖项cassandra-all 提供的类CqlInputFormat。目前我们一直在生产环境中使用这个依赖的 2.0.10 版本。另外,我们使用的是 caassandra-driver-core,版本为 2.1.1。

现在,当我向我的 jobtracker 提交一个简单的 map-reduce 作业时,我的所有映射器任务都会失败,并出现以下异常。

这里要注意的另一件重要事情是,如果我使用cassandra-all 的2.0.6 中提供的CqlPagingInputFormat,一切正常。但是这个输入格式在后面的版本中已经去掉了。

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: 10.40.242.174:9042 (com.datastax.driver.core.exceptions.DriverException: Timeout while trying to acquire available connection (you may want to increase the driver number of per-host connections)))
    at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:65)
    at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:258)
    at com.datastax.driver.core.Cluster.connect(Cluster.java:267)
    at org.apache.cassandra.hadoop.cql3.CqlRecordReader.initialize(CqlRecordReader.java:137)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:521)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
    at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: 10.40.242.174:9042 (com.datastax.driver.core.exceptions.DriverException: Timeout while trying to acquire available connection (you may want to increase the driver number of per-host connections)))
    at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:103)
    at com.datastax.driver.core.SessionManager.execute(SessionManager.java:446)
    at com.datastax.driver.core.SessionManager.executeQuery(SessionManager.java:482)
    at com.datastax.driver.core.SessionManager.executeAsync(SessionManager.java:88)
    at com.datastax.driver.core.AbstractSession.executeAsync(AbstractSession.java:60)
    at com.datastax.driver.core.Cluster.connect(Cluster.java:260)
    ... 9 more

欢迎提出任何意见。

【问题讨论】:

  • 似乎 Cassandra 未处于活动状态,或者您没有提供有效的端点。可以发一下代码吗?
  • 我正在使用 Cassandra v2.0.11 和 caassandra-driver-core v2.1.4 并且有同样的问题......当我使用 CqlPagingInputFormatfrom cassandra-all v2.0.5 时它工作正常。你解决了你的问题吗?可以分享一下解决方法吗?
  • 如果很重要:我将InputCQLPageRowSize设置为MAX CqlConfigHelper.setInputCQLPageRowSize(job.getConfiguration(), "" + Integer.MAX_VALUE);
  • 我设法解决了我的问题 - 它与 $HADOOP_HOME/lib 目录中的库冲突有关。删除旧库后,我的工作正常(尽管如此,我正在使用一个胖罐子来运行我的工作)
  • 我删除了 $HADOOP_HOME/lib 中的所有内容,然后我从原始 hadoop 包中复制了库。

标签: hadoop mapreduce cassandra


【解决方案1】:

我在使用cassandra-all-2.0.10时遇到了完全相同的问题,但使用版本cassandra-all-2.0.12已经解决了问题。

我认为更正在此提交中: Potentially use non-local hosts in CqlConfigHelper

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    相关资源
    最近更新 更多