在集群上运行python编写的spark应用程序(过程记录)

本文详细记录了在集群上启动Hadoop和Spark的过程,包括遇到的无法加载本地库的警告、Yarn应用已结束的错误,以及在运行Python Spark程序时的挑战。通过检查依赖库、配置环境变量和解决Java库路径问题,最终成功运行程序,但Web界面仍显示失败。此外,还指出了Spark shell在yarn-cluster模式下不适用的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动hadoop

root@master:/usr/local/hadoop-2.7.5/sbin#./start-all.sh

This script is Deprecated. Instead use start-dfs.shand start-yarn.sh

Starting namenodes on [master]

master: starting namenode, logging to/usr/local/hadoop-2.7.5/logs/hadoop-root-namenode-master.out

slave02: starting datanode, logging to/usr/local/hadoop-2.7.5/logs/hadoop-root-datanode-slave02.out

slave01: starting datanode, logging to/usr/local/hadoop-2.7.5/logs/hadoop-root-datanode-slave01.out

Starting secondary namenodes [0.0.0.0]

0.0.0.0: starting secondarynamenode, logging to/usr/local/hadoop-2.7.5/logs/hadoop-root-secondarynamenode-master.out

starting yarn daemons

starting resourcemanager, logging to/usr/local/hadoop-2.7.5/logs/yarn-root-resourcemanager-master.out

slave02: starting nodemanager, logging to/usr/local/hadoop-2.7.5/logs/yarn-root-nodemanager-slave02.out

slave01: starting nodemanager, logging to/usr/local/hadoop-2.7.5/logs/yarn-root-nodemanager-slave01.out

root@master:/usr/local/hadoop-2.7.5/sbin#

启动spark

root@master:/usr/local/spark/sbin# ./start-all.sh

starting org.apache.spark.deploy.master.Master,logging to/usr/local/spark/logs/spark-root-org.apache.spark.deploy.master.Master-1-master.out

slave01: starting org.apache.spark.deploy.worker.Worker,logging to/usr/local/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave01.out

slave02: startingorg.apache.spark.deploy.worker.Worker, logging to/usr/local/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave02.out

slave01: failed to launchorg.apache.spark.deploy.worker.Worker:

slave01: full log in/usr/local/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave01.out

slave02: failed to launchorg.apache.spark.deploy.worker.Worker:

slave02: full log in/usr/local/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave02.out

root@master:/usr/local/spark/sbin#

查看运行情况

root@master:/usr/local/spark/sbin#jps

3042 Master

3124 Jps

2565 NameNode

565ResourceManager

2758SecondaryNameNode

 

root@slave01:/usr/bin#jps

1152 Jps

922 NodeManager

812 DataNode

1084 Worker

 

root@slave02:/usr/local/spark/python/lib#jps

993 Worker

721 DataNode

1061 Jps

831 NodeManager

查看web界面


在宿主机(即在安装docker的虚拟机中),打开浏览器,输入master的IP:8080查看,此时宿主机是可以访问docker中的容器的

运行python程序

root@master:~/pysparkfile#python3 text.py

Setting defaultlog level to "WARN".

To adjustlogging level use sc.setLogLevel(newLevel).

SLF4J: Classpath contains multiple SLF4J bindings.

SLF4J: Foundbinding in[jar:file:/usr/local/spark/jars/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Foundbinding in [jar:file:/usr/local/hadoop-2.7.5/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindingsfor an explanation.

SLF4J: Actualbinding is of type [org.slf4j.impl.Log4jLoggerFactory]

18/04/2207:50:11 WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable

Lines with a:61, Lines with b: 27 

查看web界面并没有什么变化

启动pyspark

root@master:/usr/local/spark# pyspark

/usr/local/spark/bin/pyspark: line 53: python:command not found

Python 3.5.2 (default, Nov 23 2017, 16:37:01)

[GC

使用Python编写Apache Spark Streaming程序的基本步骤如下: 1. **环境准备**: - 安装Scala、Spark和Py4J(Python for Java),因为Spark Streaming是基于Scala构建的,而Py4J提供PythonScala之间的交互支持。 - 配置Spark环境变量,确保`SPARK_HOME`指向安装的Spark目录。 2. **导入库**: 导入必要的Spark模块,比如`pyspark.streaming`和`pyspark.context`,以及与你的数据源相关的库(如`socketIOClient`或`kafka-python`)。 ```python from pyspark import SparkContext, SparkConf from pyspark.streaming import StreamingContext ``` 3. **创建SparkContext和StreamingContext**: - 创建一个SparkContext,这是Spark应用程序的基础,用于连接到集群资源。 - 使用SparkContext创建StreamingContext,并设置一个接收窗口的时间长度(滑动窗口)和间隔频率。 ```python conf = SparkConf().setAppName("SparkStreamingApp") sc = SparkContext(conf=conf) ssc = StreamingContext(sc, seconds=10) # 每隔10秒接收一次新的批次数据 ``` 4. **数据源配置**: 根据你的需求,选择数据源,可能是从文件、Socket、Kafka、Twitter等。创建一个DStream(分布式序列化数据流)实例。 5. **数据处理函数**: 编写函数处理每个批次的数据。这通常包括解析输入数据、应用转换、执行计算等操作。例如,使用`map()`、`flatMap()`、`filter()`等函数进行数据预处理。 ```python def process_data(rdd): # 对rdd进行处理... return processed_rdd ``` 6. **将处理后的数据发送出去**: 将处理后的DStream映射到另一个操作,如保存到HDFS、打印结果或者进一步处理。 7. **启动和停止StreamingContext**: 调用`ssc.start()`开始流水线,然后等待一段时间后调用`ssc.stop(stopSparkContext=True, stopGracefully=False)`关闭它。 8. **异常处理**: 为了防止程序意外终止,通常会添加try-except-finally块来优雅地处理异常并关闭资源。 ```python try: ssc.start() ssc.awaitTerminationOrTimeout(60) # 等待60秒 except Exception as e: print(f"Error occurred: {e}") finally: ssc.stop() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值