在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节点在不同的网络中,则可能会出现一些性能问题和延迟。因此,最好将它们放在同一个网络中,以便获得更好的性能和响应时间。
posted @ 2023-04-25 11:38  一万年以前  阅读(297)  评论(0编辑  收藏  举报