【发布时间】: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-corev2.1.4 并且有同样的问题......当我使用CqlPagingInputFormatfromcassandra-allv2.0.5 时它工作正常。你解决了你的问题吗?可以分享一下解决方法吗? -
如果很重要:我将
InputCQLPageRowSize设置为MAXCqlConfigHelper.setInputCQLPageRowSize(job.getConfiguration(), "" + Integer.MAX_VALUE); -
我设法解决了我的问题 - 它与
$HADOOP_HOME/lib目录中的库冲突有关。删除旧库后,我的工作正常(尽管如此,我正在使用一个胖罐子来运行我的工作) -
我删除了
$HADOOP_HOME/lib中的所有内容,然后我从原始 hadoop 包中复制了库。
标签: hadoop mapreduce cassandra