无法从Spark连接到cassandra

时间:2016-01-19 16:34:50

标签: apache-spark cassandra pyspark datastax spark-cassandra-connector

我的cassandra中有一些测试数据。我试图从spark获取此数据,但我收到如下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o25.load.

java.io.IOException: Failed to open native connection to Cassandra at {127.0.1.1}:9042

这是我迄今为止所做的事情:

  1. 已启动./bin/cassandra
  2. 使用带有cqlkeyspace ="testkeyspace2"的{​​{1}}以及一些密钥和相应的值创建了测试数据。
  3. 写了 standalone.py
  4. 运行以下table="emp" shell命令。

    pyspark
  5. 得到了上述错误。

  6. standalone.py:

    sudo ./bin/spark-submit --jars spark-streaming-kafka-assembly_2.10-1.6.0.jar \
    --packages TargetHolding:pyspark-cassandra:0.2.4 \
    examples/src/main/python/standalone.py
    

    我也试过了from pyspark import SparkContext, SparkConf from pyspark.sql import SQLContext conf = SparkConf().setAppName("Stand Alone Python Script") sc = SparkContext(conf=conf) sqlContext = SQLContext(sc) loading=sqlContext.read.format("org.apache.spark.sql.cassandra")\ .options(table="emp", keyspace = "testkeyspace2")\ .load()\ .show() ,但我得到了同样的错误。

    调试:

    我检查了

    --packages datastax:spark-cassandra-connector:1.5.0-RC1-s_2.11

    并且看到它正在侦听端口9042。

    完整日志跟踪:

    netstat -tulpn | grep -i listen | grep <cassandra_pid>
    

    我做错了吗?

    我对这一切都很陌生,所以我可以使用一些建议。谢谢!

3 个答案:

答案 0 :(得分:3)

根据我们在问题评论中的对话,问题是“localhost”用于cassandra.yaml文件中的rpc_address。 Cassandra使用操作系统将“localhost”解析为127.0.0.1并明确地监听该接口。

要解决此问题,您需要在cassandra.yaml中将rpc_address更新为127.0.1.1并重新启动cassandra或将SparkConf更新为引用127.0.0.1,即:

conf = SparkConf().setAppName("Stand Alone Python Script")
                  .set("spark.cassandra.connection.host", "127.0.0.1")

虽然对我来说有点奇怪的是spark.cassandra.connection.host也默认为'localhost',所以我觉得fire cassandra连接器将'localhost'解析为'127.0.1.1'而cassandra很奇怪将其解析为'127.0.0.1'。

答案 1 :(得分:0)

我在/etc/hosts检查了我的linux主机文件,内容就像

127.0.0.1       localhost
127.0.1.1       <my hostname>

我把它改为:

127.0.0.1       localhost
127.0.0.1       <my hostname>

它工作正常。

正如您在自己的日志文件line number 58中所看到的,它提到了Your hostname, ganguly resolves to a loopback address: 127.0.1.1; using 192.168.1.32 instead (on interface wlan0),我想这也适用于您的情况。

答案 2 :(得分:0)

在你的--packages依赖项旁边添加它,它对我来说非常好。 --conf spark.cassandra.connection.host =&#34; 127.0.0.1&#34;