一、环境准备
在开始安装Spark之前,确保你已经安装了以下环境:
- Java 8或更高版本
- Hadoop 2.7或更高版本(如果你计划使用HDFS)
同时,你需要确保已经下载了Spark的二进制包,并将其解压到一个目录下。在本教程中,我们将Spark解压到了/opt/spark目录下。
二、配置环境变量
在开始使用Spark之前,你需要配置SPARK_HOME和PATH环境变量。通过设置SPARK_HOME变量,Spark才能知道你的Spark安装路径。而将$SPARK_HOME/bin添加到PATH中,则可以方便地运行Spark命令。
export SPARK_HOME=/opt/spark export PATH=$SPARK_HOME/bin:$PATH
三、启动Spark单机模式
首先,我们尝试在单机模式下启动Spark。
在终端中执行以下命令:
$SPARK_HOME/sbin/start-master.sh
这将启动一个Spark Master节点。你可以通过http://localhost:8080/访问它。在浏览器中打开该页面,你应该能够看到Spark的Web UI。
现在,要启动一个Worker节点,请执行以下命令:
$SPARK_HOME/sbin/start-worker.sh spark://:
在这里,<master>和<port>应该替换为你之前启动的Master节点的主机名和端口号。例如,如果你刚才使用默认端口号启动了Master节点,那么命令应该如下所示:
$SPARK_HOME/sbin/start-worker.sh spark://localhost:7077
现在,你已经成功在本地启动了一个Spark集群!
四、运行第一个Spark应用程序
让我们编写我们的第一个Spark应用程序并在集群上运行它。这个应用程序将简单地读取一个文本文件并计算出它中出现的每个单词的出现次数。
首先,创建一个文本文件:
echo "hello world goodbye world" > example.txt
然后,创建一个Python脚本来计算单词计数:
from pyspark import SparkContext sc = SparkContext("local", "Word Count") text_file = sc.textFile("example.txt") word_counts = text_file.flatMap(lambda line: line.split()) \ .map(lambda word: (word, 1)) \ .reduceByKey(lambda count1, count2: count1 + count2) word_counts.saveAsTextFile("word_counts")
保存该Python脚本并运行它:
$SPARK_HOME/bin/spark-submit word_count.py
这将在集群上运行该应用程序,并在当前目录下输出一个名为word_counts的文件夹。在这个文件夹中,你应该能够看到一个名为part-00000的文件,其中包含了单词计数的结果。
五、启动Spark Standalone集群
如果你想要在一个真正的集群上运行Spark,那么你需要启动一个Spark Standalone集群。幸运的是,Spark提供了一个用于启动这种集群的脚本。
在终端中执行以下命令来启动一个3个Worker节点的集群:
$SPARK_HOME/sbin/start-all.sh
这将启动一个Master节点和3个Worker节点。你可以通过http://localhost:8080/访问Master的Web UI。
六、在集群上运行应用程序
现在,你已经成功启动了一个Spark Standalone集群。让我们将我们的应用程序运行在该集群上。
与之前一样,我们需要编写一个Python脚本来读取文本文件并计算单词计数。这里的不同之处在于,我们需要将应用程序提交到集群上运行,而不是在本地运行它。
创建一个名为word_count.py的文件,并将以下代码放入其中:
from pyspark import SparkContext sc = SparkContext("spark://: ", "Word Count") text_file = sc.textFile("hdfs:///path/to/your/example.txt") word_counts = text_file.flatMap(lambda line: line.split()) \ .map(lambda word: (word, 1)) \ .reduceByKey(lambda count1, count2: count1 + count2) word_counts.saveAsTextFile("hdfs:///path/to/save/word_counts")
在这里,<master>和<port>应该替换为你的Spark Master的主机名和端口号。例如,如果你刚才使用默认端口号启动了Master节点,那么命令应该如下所示:
sc = SparkContext("spark://localhost:7077", "Word Count")
然后,将该Python脚本提交到Spark集群:
$SPARK_HOME/bin/spark-submit --master spark://: word_count.py
现在,你已经成功地在Spark集群上运行了应用程序!计算出的单词计数结果将保存在HDFS中。
七、停止Spark Standalone集群
当你完成Spark Standalone集群的使用时,你应该停止它以释放资源。你可以通过执行以下命令来停止集群:
$SPARK_HOME/sbin/stop-all.sh
这将停止Master和所有Worker节点。