zoukankan      html  css  js  c++  java
  • Spark3学习入门【基于Java】

    Spark 是离线数据处理的一种大数据技术,和Flick相比数据处理要延后,因为Flick是实时数据处理,而Spark需要先读取数据到内存。

    Spark的库是基于Scala写的,虽然Scala也是运行在jvm上的,但是Spark提供的Java  api的能力和原生api并不完全相同,据说执行效率也有微弱差异。

    但是scala语法比较难,编码也不如Java规范,用的人和企业越来越少。为了更好推广和更好交接,我们也选择Java API。

    环境搭建

    要用spark的库有两种方法:官方下载或maven依赖。

    官方下载

    到apache下载网站 Downloads | Apache Spark 点击链接下载

    下载后解压到某位置。比如我放在 D:\Programs\spark-3.2.0-bin-hadoop3.2,这里就是SPARK_HOME,可以加到系统的环境变量里。

    里面的bin是可执行文件和脚本,jar就是Java的api包:

    里面有200+个jar,其中以spark开头的有21个。使用的时候把这个jar目录或者里面特定的jar包引入到项目即可:

    maven依赖进来

    在上面的下载页面可以同时看到maven的坐标

    依赖进来

    1. </dependencies><dependencies>
    2.     <dependency> <!-- Spark dependency -->
    3.         <groupId>org.apache.spark</groupId>
    4.         <artifactId>spark-core_2.12</artifactId>
    5.         <version>3.2.0</version>
    6.     </dependency>
    7. </dependencies>

    spark-core只是spark的核心和最重要的部分,但是它一般不能独立使用。它里面定义了spark的工作流程和算法,比较底层,提供给其他spark模块使用。

    安装hadoop

    spark不少功能都是依赖hadoop的,因为spark不提供数据存储的能力(它提供的能力是和map-reduce阶段类似的),那它读取的数据通常都是hdfs来的(当然也可以从其他路径来)。为了以后方便,可以提前安装好hadoop。

    从spark下载页面可以看到,和我们这个版本搭配的hadoop是版本3.3。

    Hadoop下载页面是 Apache Hadoop,下载后解压到特定目录,并添加环境变量HADOOP_HOME。

    小试牛刀

    1. 通过IDEA创建一个Maven项目,引入jar包或通过maven导入:<dependencies>
    2.     <dependency> <!-- Spark dependency -->
    3.         <groupId>org.apache.spark</groupId>
    4.         <artifactId>spark-sql_2.12</artifactId>
    5.         <version>3.2.0</version>
    6.     </dependency>
    7. </dependencies>

    注意这里引入的是最常用的spark-sql包,解压目录里也能找到。sql模块提供了数据帧和数据集 DataFrame和DataSet的处理,针对的是结构化数据。

    > 除了sql模块,还有streaming模块处理流式计算,MLlib处理机器学习,和处理图数据的GraphX。可能有之前就接触过spark的会说RDD,著名的弹性分布式数据集,这个已经过时了,被spark-sql取代

    编写程序:

    1. import org.apache.spark.sql.SparkSession;
    2. import org.apache.spark.sql.Dataset;
    3.  
    4. public class SimpleApp {
    5.     public static void main(String[] args) {
    6.         String logFile = "D:\\Programs\\spark-3.2.0-bin-hadoop3.2\\README.md";
    7.         SparkSession spark = SparkSession.builder().appName("Simple Application").master("local").getOrCreate();
    8.         Dataset<String> logData = spark.read().textFile(logFile).cache();
    9. rr
    10.         String a1 = "scala";
    11.         String a2 = "Scala";
    12.         long numAs = logData.filter((org.apache.spark.api.java.function.FilterFunction<String>) s -> s.contains(a1)).count();
    13.         long numBs = logData.filter((org.apache.spark.api.java.function.FilterFunction<String>) s -> s.contains(a2)).count();
    14.  
    15.         System.out.println("Lines with " + a1 + ": " + numAs + ", lines with " + a2 + ": " + numBs);
    16.  
    17.         spark.stop();
    18.     }
    19. }

    程序运行

    执行上面的main方法就可以看到控制台打印出某个文件里有某个单词的行数。

    > 这个程序经过我的改造,官方 Quick Start - Spark 3.2.0 Documentation (apache.org) 给的例子直接运行会报错,连编译都报错。另外只能使用Java8,刚开始使用的java 16总报错也修不好。
    

    任务提交

    spark运行的都是一个个任务,需要提交给spark环境。接下来我们把项目打包成jar提交给spark。

    执行mvn package,就会在target目录下生成Jar包。拿到它的绝对路径

    通过SPARK_HOME\bin\spark-submit.bat来提交:

    .\bin\spark-submit --class "SimpleApp" --master local[4] 绝对路径.jar

    这样可以执行完并打印计数,但是我本地会报错,执行完的时候要删除零时文件删不掉

    在IDEA中可以成功删掉,在cmd中用管理员也删不掉

    下一步

    接下来开始学习spark sql和spark streaming。

    学习网站:Spark SQL and DataFrames - Spark 3.2.0 Documentation (apache.org)

    学习视频:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili

  • 相关阅读:
    Leetcode Unique Binary Search Trees
    Leetcode Decode Ways
    Leetcode Range Sum Query 2D
    Leetcode Range Sum Query
    Leetcode Swap Nodes in Pairs
    Leetcode Rotate Image
    Leetcode Game of Life
    Leetcode Set Matrix Zeroes
    Leetcode Linked List Cycle II
    CF1321A
  • 原文地址:https://www.cnblogs.com/somefuture/p/15636947.html
Copyright © 2011-2022 走看看