在CentOS上安装和配置Spark Standalone
1.确认Java已安装
在CentOS上运行以下命令以确认Java是否已安装:
java -version
如果Java未安装,请按照以下步骤进行安装:
sudo yum install java-1.8.0-openjdk-develx
tar -zxvf jdk-8u291-linux-x64.tar.gz
修改/etc/profile文件,末尾添加
export JAVA_HOME=/usr/local/src/jdk1.8.0_291 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
2.下载Spark
在Spark官网上下载Spark压缩包,解压到指定目录下:
$ wget https://downloads.apache.org/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz $ tar zxvf spark-3.1.2-bin-hadoop3.2.tgz $ mv spark-3.1.2-bin-hadoop3.2 /opt/spark
3.配置环境变量
在/etc/profile文件中添加以下内容(包括了上面的jdk配置):
export JAVA_HOME=/usr/local/src/jdk1.8.0_291 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH export SPARK_HOME=/opt/spark export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
然后执行以下命令,使环境变量生效:
$ source /etc/profile
4.配置Spark Standalone集群
在Spark Standalone模式下,需要配置主节点和从节点。以下是配置主节点和从节点的步骤:
配置主节点
在主节点上,创建一个配置文件/opt/spark/conf/spark-env.sh,并添加以下内容:(/opt/spark/conf/spark-env.sh.template改名即可)
export SPARK_MASTER_HOST=172.17.207.167 export SPARK_MASTER_PORT=7077 export SPARK_MASTER_WEBUI_PORT=8080 export JAVA_HOME=/usr/local/src/jdk1.8.0_291 export SPARK_WORKER_INSTANCES=1 export SPARK_WORKER_MEMORY=1g export SPARK_WORKER_CORES=1
其中,SPARK_MASTER_HOST 是主节点的IP地址,SPARK_MASTER_PORT是主节点端口号。
5.启动Spark Standalone集群
master:
启动:$SPARK_HOME/sbin/start-master.sh 停止:$SPARK_HOME/sbin/stop-master.sh 停止全部:$SPARK_HOME/sbin/stop-all.sh
6.启动从节点
启动:$SPARK_HOME/sbin/start-worker.sh spark://172.17.207.167:7077 停止:$SPARK_HOME/sbin/stop-worker.sh
7.检查Spark是否正在运行
可以通过访问http://172.17.207.167:8080来检查Spark是否正在运行。
可以使用以下命令来查看CentOS中安装的Spark版本:
spark-submit --version
8.springboot 如何调用Spark Standalone(尚未测试)
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-spark</artifactId> <version>2.3.0.RELEASE</version> </dependency> 在application.properties文件中添加以下配置: # Spark Standalone配置 spring.data.spark.master-url=spark://<主节点IP地址>:7077 spring.data.spark.app-name=myapp 其中,<主节点IP地址>是Spark Standalone主节点的IP地址。 编写Spark应用程序 在Spring Boot应用程序中,可以使用Spring Data Spark提供的SparkContext对象来创建RDD并执行Spark任务。例如: @RestController public class HelloController { @Autowired private SparkContext sparkContext; @GetMapping("/hello") public String hello() { JavaRDD<String> lines = sparkContext.textFile("hdfs://localhost:9000/input/data.txt"); long count = lines.count(); return "Total lines: " + count; } } 运行Spring Boot应用程序 运行Spring Boot应用程序,访问http://localhost:8080/hello即可执行Spark任务并返回结果。 以上就是使用Spring Data Spark模块调用Spark Standalone的步骤。
9. java如何调用Spark Standalone(尚未测试)
SparkConf sparkConf = new SparkConf() .setAppName("Your Application Name") .set("spark.master", "spark://32.115.36.153:7077") //.set("spark.driver.host", "1.119.125.180") //.set("spark.driver.bindAddress", "1.119.125.180") //.set("spark.driver.port", "8091") //.set("spark.driver.blockManager.port", "8091") .set("spark.driver.maxResultSize", "1g") .set("spark.driver.memory", "1g") .set("spark.driver.cores", "1") .set("spark.executor.memory", "1g") .set("spark.executor.cores", "1") .set("spark.executor.instances", "1") .set("spark.rpc.message.maxSize", "1024") .set("spark.driver.allowMultipleContexts", "true") .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); JavaSparkContext sparkContext = new JavaSparkContext(sparkConf); /*JavaRDD<String> lines = sparkContext.textFile("hdfs://localhost:9000/input/data.txt"); long count = lines.count(); System.out.println("Total lines: " + count);*/ JavaRDD<Integer> rdd = sparkContext.parallelize(Arrays.asList(1, 2, 3, 4, 5)); int sum = rdd.reduce((a, b) -> a + b); System.out.println("Sum of numbers is: " + sum); sparkContext.close();
10.Java应用程序和Spark Master节不在同一个网络还能调用吗?
是的,可以调用,Java应用程序和Spark Master节点不必在同一个网络中才能进行通信,但需要确保它们之间有网络连接。如果Java应用程序和Spark Master节点在不同的网络中,则可能需要进行一些网络设置和配置才能使它们相互通信。
以下是一些可能的解决方法:
1.确认网络连接
确保Java应用程序和Spark Master节点之间有网络连接,并且网络连接稳定。您可以使用ping命令测试网络连接是否正常。
2.配置网络路由
如果Java应用程序和Spark Master节点在不同的子网中,则可能需要配置网络路由。请参考您的操作系统文档或网络管理员,了解如何配置网络路由。
3.配置防火墙
如果Java应用程序和Spark Master节点在不同的网络中,则可能需要配置防火墙。请确保已允许从Java应用程序连接到Spark Master节点的端口,并且Spark Master节点可以访问Java应用程序。
4.使用虚拟专用网络(VPN)
如果Java应用程序和Spark Master节点在不同的网络中,并且网络连接不稳定或者无法通过其他方式解决,则可以考虑使用虚拟专用网络(VPN)来进行通信。VPN可以将两个网络连接在一起,并提供安全的加密连接。
需要注意的是,如果Java应用程序和Spark Master节点在不同的网络中,则可能会出现一些性能问题和延迟。因此,最好将它们放在同一个网络中,以便获得更好的性能和响应时间。