Python 2.7 将本地IPython笔记本连接到带气隙群集上的Spark

Python 2.7 将本地IPython笔记本连接到带气隙群集上的Spark,python-2.7,hadoop,ipython-notebook,putty,pyspark,Python 2.7,Hadoop,Ipython Notebook,Putty,Pyspark,我有一台用于日常工作的W7机器。我的公司在私有云上也有一个气隙Hadoop集群。我只能通过油灰接触云层。 当我想在集群上使用Spark时,我会启动putty,然后执行以下两项操作之一: 只要把pyspark从外壳上发射出去就行了 使用VNC访问集群上的RedHat GUI,然后在Spark模式下启动IPython notebook 有没有办法使用我的本地W7 IPython笔记本连接到Spark 在Daniel Darabos评论之后,进行一些尝试和错误编辑 我在我的W7机器上安装了Spa

我有一台用于日常工作的W7机器。我的公司在私有云上也有一个气隙Hadoop集群。我只能通过油灰接触云层。 当我想在集群上使用Spark时,我会启动putty,然后执行以下两项操作之一:

  • 只要把pyspark从外壳上发射出去就行了
  • 使用VNC访问集群上的RedHat GUI,然后在Spark模式下启动IPython notebook
有没有办法使用我的本地W7 IPython笔记本连接到Spark


在Daniel Darabos评论之后,进行一些尝试和错误编辑

我在我的W7机器上安装了Spark。 然后我创建了一个新的pyspark配置文件,并在下面更改了启动文件。 此时,我可以在本地启动Ipython,并成功地让它创建一个spark上下文。 当我跑步时:

sc.stop()
conf = SparkConf().setAppName('SPark Test').setMaster('localhost:7077')
sc = SparkContext(conf=conf)
然后我得到一个错误:

---------------------------------------------------------------------------
Py4JJavaError                             Traceback (most recent call last)
<ipython-input-15-1e8f5b112924> in <module>()
      1 sc.stop()
      2 conf = SparkConf().setAppName('SPark Test').setMaster('localhost:7077')
----> 3 sc = SparkContext(conf=conf)

C:\Spark\python\pyspark\context.pyc in __init__(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, gateway, jsc, profiler_cls)
    111         try:
    112             self._do_init(master, appName, sparkHome, pyFiles, environment, batchSize, serializer,
--> 113                           conf, jsc, profiler_cls)
    114         except:
    115             # If an error occurs, clean up in order to allow future SparkContext creation:

C:\Spark\python\pyspark\context.pyc in _do_init(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, jsc, profiler_cls)
    168 
    169         # Create the Java SparkContext through Py4J
--> 170         self._jsc = jsc or self._initialize_context(self._conf._jconf)
    171 
    172         # Create a single Accumulator in Java that we'll send all our updates through;

C:\Spark\python\pyspark\context.pyc in _initialize_context(self, jconf)
    222         Initialize SparkContext in function to allow subclass specific initialization
    223         """
--> 224         return self._jvm.JavaSparkContext(jconf)
    225 
    226     @classmethod

C:\Spark\python\lib\py4j-0.8.2.1-src.zip\py4j\java_gateway.py in __call__(self, *args)
    699         answer = self._gateway_client.send_command(command)
    700         return_value = get_return_value(answer, self._gateway_client, None,
--> 701                 self._fqn)
    702 
    703         for temp_arg in temp_args:

C:\Spark\python\pyspark\sql\utils.pyc in deco(*a, **kw)
     34     def deco(*a, **kw):
     35         try:
---> 36             return f(*a, **kw)
     37         except py4j.protocol.Py4JJavaError as e:
     38             s = e.java_exception.toString()

C:\Spark\python\lib\py4j-0.8.2.1-src.zip\py4j\protocol.py in get_return_value(answer, gateway_client, target_id, name)
    298                 raise Py4JJavaError(
    299                     'An error occurred while calling {0}{1}{2}.\n'.
--> 300                     format(target_id, '.', name), value)
    301             else:
    302                 raise Py4JError(

Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.
: org.apache.spark.SparkException: Could not parse Master URL: 'localhost:7077'
    at org.apache.spark.SparkContext$.org$apache$spark$SparkContext$$createTaskScheduler(SparkContext.scala:2693)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:506)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:61)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:234)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
    at py4j.Gateway.invoke(Gateway.java:214)
    at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:79)
    at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:68)
    at py4j.GatewayConnection.run(GatewayConnection.java:207)
    at java.lang.Thread.run(Unknown Source)
---------------------------------------------------------------------------
Py4JJavaError回溯(最近一次调用)
在()
1 sc.停止()
2 conf=SparkConf().setAppName('SPark Test').setMaster('localhost:7077'))
---->3 sc=SparkContext(conf=conf)
C:\Spark\python\pyspark\context.pyc在uuuu init_uuu中(self、master、appName、sparkHome、pyFiles、environment、batchSize、serializer、conf、gateway、jsc、profiler\u cls)
111尝试:
112 self.\u do\u init(主程序、appName、sparkHome、pyFiles、环境、batchSize、序列化程序、,
-->113形态、jsc、探查器(cls)
114除:
115#如果发生错误,请清理以允许将来创建SparkContext:
_do_init中的C:\Spark\python\pyspark\context.pyc(self、master、appName、sparkHome、pyFiles、environment、batchSize、serializer、conf、jsc、profiler\u cls)
168
169#通过Py4J创建Java SparkContext
-->170 self.\u jsc=jsc或self.\u初始化上下文(self.\u conf.\u jconf)
171
172#用Java创建一个累加器,我们将通过它发送所有更新;
C:\Spark\python\pyspark\context.pyc在初始化上下文(self,jconf)中
222在函数中初始化SparkContext以允许子类特定的初始化
223         """
-->224返回self._jvm.JavaSparkContext(jconf)
225
226@classmethod
C:\Spark\python\lib\py4j-0.8.2.1-src.zip\py4j\java\u gateway.py在调用中(self,*args)
699 answer=self.\u gateway\u client.send\u命令(command)
700返回值=获取返回值(应答,自。\网关\客户端,无,
-->701自我评价(fqn)
702
703对于临时参数中的临时参数:
C:\Spark\python\pyspark\sql\utils.pyc in deco(*a,**kw)
34 def装饰(*a,**千瓦):
35尝试:
--->36返回f(*a,**kw)
37除py4j.protocol.Py4JJavaError为e外:
38 s=e.java_exception.toString()
C:\Spark\python\lib\py4j-0.8.2.1-src.zip\py4j\protocol.py在get\u return\u值中(应答、网关\u客户端、目标\u id、名称)
298 raise Py4JJavaError(
299'调用{0}{1}{2}时出错。\n'。
-->300格式(目标id,,,,名称),值)
301其他:
302升起Py4JError(
Py4JJavaError:调用None.org.apache.spark.api.java.JavaSparkContext时出错。
:org.apache.spark.sparkeexception:无法分析主URL:'localhost:7077'
位于org.apache.spark.SparkContext$.org$apache$spark$SparkContext$$createTaskScheduler(SparkContext.scala:2693)
位于org.apache.spark.SparkContext(SparkContext.scala:506)
位于org.apache.spark.api.java.JavaSparkContext(JavaSparkContext.scala:61)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:234)
位于py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
在py4j.Gateway.invoke处(Gateway.java:214)
位于py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:79)
在py4j.commands.ConstructorCommand.execute处(ConstructorCommand.java:68)
在py4j.GatewayConnection.run处(GatewayConnection.java:207)
位于java.lang.Thread.run(未知源)

使用PuTTY创建一个SSH隧道,将本地端口(例如
7077
)转发到Spark主机(例如
Spark主机:7077
)。然后在本地IPython笔记本中使用本地端口(
spark://localhost:7077
)作为Spark master的地址。

谢谢。我已经在PuTTY中创建了一个到服务器名称:4040的隧道,并按照教程在W7上安装Spark。我一定是做错了什么,因为我可以连接到本地Spark,但不能连接到群集。请参阅对我的问题的编辑。您需要
spark://localhost:7077
,而不仅仅是
localhost:7077
。我编辑了我的答案,以澄清这一点。