我的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
这是我迄今为止所做的事情:
./bin/cassandra
cql
和keyspace ="testkeyspace2"
的{{1}}以及一些密钥和相应的值创建了测试数据。运行以下table="emp"
shell命令。
pyspark
得到了上述错误。
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>
我做错了吗?
我对这一切都很陌生,所以我可以使用一些建议。谢谢!
答案 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;