Spark 从入门到精通

news2024/12/23 19:00:47

Spark 从入门到精通

环境搭建

准备工作

创建安装目录
mkdir /opt/soft
cd /opt/soft
下载scala
wget https://downloads.lightbend.com/scala/2.13.10/scala-2.13.10.tgz -P /opt/soft
解压scala
tar -zxvf scala-2.13.10.tgz
修改scala目录名称
mv scala-2.13.10 scala-2
下载spark
wget https://dlcdn.apache.org/spark/spark-3.4.0/spark-3.4.0-bin-hadoop3-scala2.13.tgz -P /opt/soft
解压spark
tar -zxvf spark-3.4.0-bin-hadoop3-scala2.13.tgz 
修改目录名称
mv spark-3.4.0-bin-hadoop3-scala2.13 spark3
修改环境遍历
vim /etc/profile
export JAVA_HOME=/opt/soft/jdk8
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export ZOOKEEPER_HOME=/opt/soft/zookeeper

export HADOOP_HOME=/opt/soft/hadoop3

export HADOOP_INSTALL=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export YARN_HOME=${HADOOP_HOME}
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

export HIVE_HOME=/opt/soft/hive3
export HCAT_HOME=/opt/soft/hive3/hcatalog

export SQOOP_HOME=/opt/soft/sqoop-1

export FLUME_HOME=/opt/soft/flume

export HBASE_HOME=/opt/soft/hbase2

export PHOENIX_HOME=/opt/soft/phoenix

export SCALA_HOME=/opt/soft/scala-2

export SPARK_HOME=/opt/soft/spark3
export SPARKPYTHON=/opt/soft/spark3/python

export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HCAT_HOME/bin:$SQOOP_HOME/bin:$FLUME_HOME/bin:$HBASE_HOME/bin:$PHOENIX_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$SPARKPYTHON
source /etc/profile

Local模式

scala java
启动
spark-shell

sparkl local spark-shell

页面地址:http://spark01:4040

![sparkl local spark-shell

退出
:quit

sparkl local spark-shell

pyspark
启动
pyspark

spark local pyspark

页面地址:http://spark01:4040

spark local pyspark

退出
quit() or Ctrl-D

spark local pyspark

本地模式提交应用

在spark目录下执行

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.13-3.4.0.jar \
10
  1. –class表示要执行程序的主类,此处可以更换为咱们自己写的应用程序
  2. –master local[2] 部署模式,默认为本地模式,数字表示分配的虚拟CPU核数量
  3. spark-examples_2.13-3.4.0.jar 运行的应用类所在的jar包,实际使用时,可以设定为咱们自己打的jar包
  4. 数字10表示程序的入口参数,用于设定当前应用的任务数量

Standalone模式

编写核心配置文件

cont目录下

cd /opt/soft/spark3/conf
cp spark-env.sh.template spark-env.sh
vim spark-env.sh
export JAVA_HOME=/opt/soft/jdk8
export HADOOP_HOME=/opt/soft/hadoop3
export HADOOP_CONF_DIR=/opt/soft/hadoop3/etc/hadoop
export JAVA_LIBRAY_PATH=/opt/soft/hadoop3/lib/native

export SPARK_MASTER_HOST=spark01
export SPARK_MASTER_PORT=7077

export SPARK_WORKER_MEMORY=4g
export SPARK_WORKER_CORES=4
export SPARK_MASTER_WEBUI_PORT=6633

编辑slaves
cp workers.template workers
vim workers
spark01
spark02
spark03

配置历史日志
cp spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://lihaozhe/spark-log
hdfs dfs -mkdir /spark-log
vim spark-env.sh
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.retainedApplications=30 
-Dspark.history.fs.logDirectory=hdfs://lihaozhe/spark-log"
修改启动文件名称
mv sbin/start-all.sh sbin/start-spark.sh
mv sbin/stop-all.sh sbin/stop-spark.sh
分发搭配其他节点
scp -r /opt/soft/spark3 root@spark02:/opt/soft
scp -r /opt/soft/spark3 root@spark03:/opt/soft
scp -r /etc/profile root@spark02:/etc
scp -r /etc/profile root@spark03:/etc

在其它节点刷新环境遍历

source /etc/profile
启动
start-spark.sh
start-history-server.sh
webui

http://spark01:6633

spark standlone webui

http://spark01:18080

spark standlone history server

提交作业到集群
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://spark01:7077 \
./examples/jars/spark-examples_2.13-3.4.0.jar \
10

spark standlone webui

spark standlone history server

HA模式

编写核心配置文件

cont目录下

cd /opt/soft/spark3/conf
cp spark-env.sh.template spark-env.sh
vim spark-env.sh
export JAVA_HOME=/opt/soft/jdk8
export HADOOP_HOME=/opt/soft/hadoop3
export HADOOP_CONF_DIR=/opt/soft/hadoop3/etc/hadoop
export JAVA_LIBRAY_PATH=/opt/soft/hadoop3/lib/native

SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER 
-Dspark.deploy.zookeeper.url=spark01:2181,spark02:2181,spark03:2181 
-Dspark.deploy.zookeeper.dir=/spark3"

export SPARK_WORKER_MEMORY=4g
export SPARK_WORKER_CORES=4
export SPARK_MASTER_WEBUI_PORT=6633

hdfs dfs -mkdir /spark3
编辑slaves
cp workers.template workers
vim workers
spark01
spark02
spark03

配置历史日志
cp spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://lihaozhe/spark-log
hdfs dfs -mkdir /spark-log
vim spark-env.sh
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.retainedApplications=30 
-Dspark.history.fs.logDirectory=hdfs://lihaozhe/spark-log"
修改启动文件名称
mv sbin/start-all.sh sbin/start-spark.sh
mv sbin/stop-all.sh sbin/stop-spark.sh
分发搭配其他节点
scp -r /opt/soft/spark3 root@spark02:/opt/soft
scp -r /opt/soft/spark3 root@spark03:/opt/soft
scp -r /etc/profile root@spark02:/etc
scp -r /etc/profile root@spark03:/etc

在其它节点刷新环境遍历

source /etc/profile
启动
start-spark.sh
start-history-server.sh
webui

http://spark01:6633

spark ha webui

http://spark01:18080

spark ha history server

提交作业到集群
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://spark01:7077 \
./examples/jars/spark-examples_2.13-3.4.0.jar \
10
提交作业到Yarn
bin/spark-submit --master yarn \
--class  org.apache.spark.examples.SparkPi ./examples/jars/spark-examples_2.13-3.4.0.jar 10

spark ha webui

spark ha history server

spark-code

spark-core

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.lihaozhe</groupId>
    <artifactId>spark-code</artifactId>
    <version>1.0.0</version>
    <name>${project.artifactId}</name>
    <description>My wonderfull scala app</description>
    <inceptionYear>2010</inceptionYear>
    <licenses>
        <license>
            <name>My License</name>
            <url>http://....</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <encoding>UTF-8</encoding>
        <scala.version>2.13.10</scala.version>
        <park-core_2.13.version>3.4.0</park-core_2.13.version>
        <hadoop.version>3.3.5</hadoop.version>
        <commons-lang3.version>3.12.0</commons-lang3.version>
        <lombok.version>1.18.26</lombok.version>
        <lombok.version>1.18.26</lombok.version>
        <java-testdata-generator.version>1.1.2</java-testdata-generator.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>

        <!-- Test -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.3</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.scala-tools.testing</groupId>
            <artifactId>specs_2.10</artifactId>
            <version>1.6.9</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.scalatest</groupId>
            <artifactId>scalatest_2.13</artifactId>
            <version>3.2.15</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>java-testdata-generator</artifactId>
            <version>${java-testdata-generator.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>
        <!--spark core-->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.13</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.5</version>
        </dependency>
    </dependencies>

    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <testSourceDirectory>src/test/scala</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                        <configuration>
                            <args>
                                <arg>-make:transitive</arg>
                                <arg>-dependencyfile</arg>
                                <arg>${project.build.directory}/.scala_dependencies</arg>
                            </args>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <useFile>false</useFile>
                    <disableXmlReport>true</disableXmlReport>
                    <!-- If you have classpath issue like NoDefClassError,... -->
                    <!-- useManifestOnlyJar>false</useManifestOnlyJar -->
                    <includes>
                        <include>**/*Test.*</include>
                        <include>**/*Suite.*</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

hdfs-conf

在 resources 目录下存放 hdfs 核心配置文件 core-site.xml 和hdfs-site.xml

rdd
数据集方式构建RDD
public class JavaDemo01 {
    public static void main(String[] args) {
        String appName = "rdd";
        // SparkConf conf = new SparkConf().setAppName(appName).setMaster("local");
        // spark基础配置
        SparkConf conf = new SparkConf().setAppName(appName);
        // 本地运行
        conf.setMaster("local");
        try (JavaSparkContext sc = new JavaSparkContext(conf)) {
            List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);
            // 借助并行数据集 Parallelized Collections 构建 RDD
            JavaRDD<Integer> distData = sc.parallelize(data);
        }
    }
}

object ScalaDemo01 {
  def main(args: Array[String]): Unit = {
    val appName: String = "rdd"
    // val conf = new SparkConf().setAppName(appName).setMaster("local")
    // spark基础配置
    val conf = new SparkConf().setAppName(appName)
    // 本地运行
    conf.setMaster("local")
    // 构建 SparkContext spark 上下文
    val sc = new SparkContext(conf)

    val data = Array(1, 2, 3, 4, 5)
    // 借助并行数据集 Parallelized Collections 构建 RDD
    val distData = sc.parallelize(data)
  }
}

文件方式构建RDD
public static void main(String[] args) {
        String appName = "rdd";
        // SparkConf conf = new SparkConf().setAppName(appName).setMaster("local");
        // spark基础配置
        SparkConf conf = new SparkConf().setAppName(appName);
        // 本地运行
        conf.setMaster("local");
        try (JavaSparkContext sc = new JavaSparkContext(conf)) {
            // 借助文件 构建 RDD
            JavaRDD<String> lines = sc.textFile("hdfs://lihaozhe/data/words.txt");
            JavaRDD<Integer> lineLengths = lines.map(s -> s.length());
            int totalLength = lineLengths.reduce((a, b) -> a + b);
            System.out.println(totalLength);
        }
    }
}

object ScalaDemo02 {
  def main(args: Array[String]): Unit = {
    val appName: String = "rdd"
    // val conf = new SparkConf().setAppName(appName).setMaster("local")
    // spark基础配置
    val conf = new SparkConf().setAppName(appName)
    // 本地运行
    conf.setMaster("local")
    // 构建 SparkContext spark 上下文
    val sc = new SparkContext(conf)

    // 借助HDFS文件 RDD
    val distFile = sc.textFile("hdfs://lihaozhe/data/words.txt")
    // 遍历输出
    distFile.foreach(println)
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

容灾到对象存储,能降低多少灾备成本?以华为云容灾为例

根据IPlytics的数据显示&#xff0c;华为是唯一一家进入全球十大云计算专利拥有者排行榜的中国公司&#xff1b; 华为是唯一一家提供端到端服务能力的云服务商&#xff0c;从底层的物理设备到上层的虚拟化建设都是有华为自主研发的产品&#xff1b; 华为是国内唯一一家提供5线全…

开源大模型文档

开源大模型综述 排行榜1.LLaMA资源&#xff1a; 2.Chinese-LLaMA-Alpaca资源&#xff1a; 3.Alpaca资源&#xff1a; 4.Alpaca-LoRA5.Vicuna资源&#xff1a; 6.OpenChatKit资源&#xff1a; 7.GPT4ALL8.Raven RWKV资源&#xff1a; 9.OPT资源&#xff1a; 10.Flan-T5-XXL资源&…

PowerShell install 一键部署subversion

subversion SVN是subversion的缩写&#xff0c;是一个开放源代码的版本控制系统&#xff0c;通过采用分支管理系统的高效管理&#xff0c;简而言之就是用于多个人共同开发同一个项目&#xff0c;实现共享资源&#xff0c;实现最终集中式的管理。 TortoiseSVN TortoiseSVN 是…

ICG-Azide/Alkyne吲哚菁绿标记叠氮/炔基-星戈瑞

ICG-Azide 吲哚菁绿标记叠氮 分子式&#xff1a;C48H56N6O4S 分子量&#xff1a;813.07 外观&#xff1a;固体/粉末 激发、发射波长:785/821nm 规格&#xff1a;mg 溶解性&#xff1a;溶于DMSO或DMF ICG-Azide是一种新型的荧光探针&#xff0c;其化学性质独特。它是一种含…

MongoDb简单使用

介绍 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 它支持的数据结构非常松…

leetcode50 快速幂

https://leetcode.cn/problems/powx-n/实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c; x n x^n xn &#xff09;。 示例 1&#xff1a;输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例 2&#xff1a;输入&#xff1a;…

安全工程师必读 ——《安全技术工具扫盲》

安全技术 SAST - 静态应用安全测试&#xff08;白盒检测&#xff09;DAST - 动态应用安全测试&#xff08;黑盒检测&#xff09;IAST - 交互式应用安全测试&#xff08;灰盒检测&#xff09;RASP - 运行时应用自我保护Dependency Scanning&#xff08;依赖项安全扫描&#xff…

袋鼠云产品功能更新报告05期|应有尽“优”,数栈一大波功能优化升级!

这段时间&#xff0c;我们对产品本身以及客户反馈的一些问题进行了持续的更新和优化&#xff0c;包括对离线平台数据同步功能的更新&#xff0c;数据资产平台血缘问题的优化等&#xff0c;力求满足不同行业用户的更多需求&#xff0c;为用户带来极致的产品使用体验。 以下为袋…

边缘计算节点是啥?边缘计算与CDN有什么关系?一文带你了解边缘计算节点BEC(2)

上文已经为大家详细介绍了边缘计算节点 BEC 与 CDN 之间的关系&#xff0c;对于 CDN 而言&#xff0c;边缘计算不仅仅只增加了存储、计算的功能&#xff0c;还有网络、安全等等一系列的基础能力。 如果大家感兴趣&#xff0c;欢迎阅读我们上一篇文章 边缘计算节点是啥&#x…

如何在pythonanywhere上部署Django项目?

PythonAnywhere是一个基于云的Python开发平台&#xff0c;它允许用户在云端运行、开发和部署&#xff0c;该平台提供了Python编程环境、Web框架、数据库和Web服务器等工具&#xff0c;让用户可以轻松地创建和部署Python应用程序。PythonAnywhere还提供了免费和付费的服务&#…

Java设计模式其一(概述、UML图、软件设计模式) | 穷其道者,归处亦同

文章目录 1. 设计模式概述1.1 软件设计模式的概念1.2 学习设计模式的必要性1.3 设计模式分类 2. UML图2.1 类图概述2.2 类图的作用2.3 类图的表示法2.3.1 类的表达方式2.3.2 类与类之间关系的表达方式 3. 软件设计原则3.1 开闭原则3.2 里氏替换原则3.3 依赖倒转原则3.4 接口隔离…

Java【多线程基础6】定时器的使用方式 + 模拟实现Timer

文章目录 前言一、定时器1, 什么是定时器2, 如何使用定时器 二、模拟实现定时器1, 初步实现2, 问题改善 总结 前言 &#x1f4d5;各位读者好, 我是小陈, 这是我的个人主页 &#x1f4d7;小陈还在持续努力学习编程, 努力通过博客输出所学知识 &#x1f4d8;如果本篇对你有帮助, …

6.文本三剑客--sed、awk

文章目录 文本三剑客sed介绍命令介绍打印内容删除替换插入分组 文本三剑客 sed 介绍 sed编辑器 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来 编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么…

高阶python | 堆栈列表:RPN应用(模拟逆波兰式功能实现)

python版本&#xff1a;3.10 在列表中&#xff0c;append和pop方法有一个特殊的用途。可以在列表上使用这两个方法让列表变成一个堆栈使用。 这就是一个栈&#xff0c;它是先进后出&#xff0c;类似单门轿厢电梯一样的设计&#xff0c;出入口共用 堆栈最有用的应用之一就是做逆…

【社区团购】预制菜零售如何打造精准社群?

预制菜作为现代生活的新型“网红”食品&#xff0c;其受欢迎程度日益提高。而在商业竞争日益激烈的当下&#xff0c;如何让你的预制菜零售业务&#xff08;文章编辑ycy6221&#xff09;具有巨大的竞争优势呢&#xff1f;社区团购是一个不错的切入点&#xff0c;这不仅是为了扩大…

5月12号软件资讯更新合集.....

Vue 3.3 “浪客剑心” 发布 Vue 3.3 已正式发布&#xff0c;代号 "Rurouni Kenshin"&#xff08;浪客剑心&#xff09;。 公告写道&#xff0c;此版本专注于改进开发者使用体验 —— 特别是 SFC<script setup> 与 TypeScript 的结合使用。一同发布的还有 Vue…

【C语言】操作符详解(上)

操作符详解&#xff08;上&#xff09; 1.操作符分类2.算数操作符3.移位操作符3.1 右移3.2 左移 4.位操作符4.1位操作符发的应用 5.赋值操作符6.单目操作符7.关系操作符8.逻辑操作符 1.操作符分类 算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操…

Vue3-黑马(四)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-axios-获取数据 &#xff08;2&#xff09;vue3-基础-axios-发送数据 &#xff08;3&#xff09;vue3-基础-axios-baseURL &#xff08;1&#xff09;vue3-基础-axios-获取数据 第三方库axios是对xhr的封装&#xff0…

智安网络|网络安全威胁风险分析:识别以及预防黑客和钓鱼攻击

随着网络技术的不断发展和普及&#xff0c;网络安全问题日益严峻。黑客、病毒、恶意软件、钓鱼攻击等威胁不断涌现&#xff0c;给个人、企业、国家的信息安全带来了极大的威胁。如何识别、分析和预防网络安全威胁已成为所有人必须要解决的问题。本篇文章将从黑客攻击和钓鱼攻击…

proc文件系统

proc介绍 (1)proc是虚拟文件系统&#xff0c;虚拟的意思就是proc文件系统里的文件不对应硬盘上任何文件&#xff0c;我们用去查看proc目录下的文件大小都是零,是接受到请求才动态生成的&#xff1b; (2)proc文件系统是开放给上层了解内核运行状态的窗口&#xff0c;通过读取pro…