目录

  • 实践目标
  • 实践步骤
  • 一、安装CentOS
  • 二、安装Spark
  • 1.下载spark压缩包
  • 2. 新建spark专用文件夹
  • 3.解压spark包到指定路径/usr/spark下
  • 4. 移动spark-3.0.1-bin-hadoop3.2下所有文件
  • 5. 修改文件权限
  • 6. 验证是否安装成功
  • 7. 测试spark shell交互式命令界面
  • 8. 查看spark集群
  • 三、Spark独立应用程序编程
  • 1. 安装sbt
  • 2. 编写应用程序
  • 3. sbt打包程序
  • 4.通过spark-submit提交并运行程序
  • 四、Java独立程序
  • 1. 安装maven
  • 2. 编写java程序
  • 3. maven打包java程序
  • 4. 通过spark-submit 运行程序
  • 五、连接MySQL数据库
  • 1. 下载mysql yum repo配置文件
  • 2. 安装repo相应版本
  • 3. 验证是否安装成功
  • 4.配置mysql版本
  • 5. 安装mysql
  • 6. 启动mysql
  • 7. 管理用户并操作数据库
  • 六、Spark SQL 读写数据库
  • 1. 创建数据库及数据表
  • 2.下载JDBC驱动包:
  • 3. 解压:
  • 4. 移动jar包:
  • 5. 启动spark-shell:
  • 写在最后


实践目标

实践步骤

一、安装CentOS

本次实践采用虚拟机的方式安装CentOS,需要提前准备虚拟机运行软件VMWare,以及CentOS操作系统镜像。(需要压缩包欢迎留言)

安装好后设置两个账户,root、spark,用户名和密码如下 (可自行设定):
root:123
spark:123

二、安装Spark

1.下载spark压缩包

网址:http://spark.apache.org/downloads.html

(需要压缩包欢迎留言)

Java用sparkSQL实例 java调用spark程序_java


Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_02

2. 新建spark专用文件夹
ls 						#查看~路径下文件信息 
cd /usr 				#切换路径
sudo mkdir /usr/spark/	#当前路径下新建文件夹spark

Java用sparkSQL实例 java调用spark程序_spark_03

出现报错信息:普通用户不具有新建文件夹权限

Java用sparkSQL实例 java调用spark程序_java_04

解决办法:

  1. 切换到超级用户root
  2. 添加sudo文件的写权限
  3. 编辑sudoers文件

    具体编辑信息更改如下:
3.解压spark包到指定路径/usr/spark下

切换路径到压缩包所在位置 输入ls指令确保能找到相应spark压缩包

sudo tar -zxf spark-3.0.1-bin-hadoop3.2.tgz -C /usr/spark/

嘱咐几句:极有可能博文中的文件路径与实践中操作的路径会出现不一致,
所以要知其所以然,学会自己排查错误。以下是几点排错体会:

  1. 命令行Tab键能实现自动扩充(输入的前几个字符在当前路径下唯一)
    快捷键能很好地降低长文件名手动输入的错误
  2. Java用sparkSQL实例 java调用spark程序_mysql_05

  3. 例如切换路径进入spark目录 只需要输入cd sp 然后Tab键能实现自动扩充
  4. 掌握cd逐层排查某个文件的路径

4. 移动spark-3.0.1-bin-hadoop3.2下所有文件

执行红色部分命令行即可,其他部分很好地解释了整个移动过程中相应文件夹内容的变化。

Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_06

5. 修改文件权限

注意:命令行中第一个 spark 为用户名 ,建议查阅chown指令的基本参数。

Java用sparkSQL实例 java调用spark程序_java_07

6. 验证是否安装成功

到此为止,已经安装好local模式的spark,通过运行spark自带示例验证spark是否安装成功。

注:如果想要spark在真正的分布式环境运行,还需要安装jdk和Hadoop

Java用sparkSQL实例 java调用spark程序_spark_08

7. 测试spark shell交互式命令界面

Java用sparkSQL实例 java调用spark程序_数据库_09

8. 查看spark集群

通过/usr/spark/sbin下的start-all.sh启动spark,

通过http://localhost:8080看到spark集群信息。

Centos没有默认浏览器,需要自行下载firefox或Google等浏览器

Java用sparkSQL实例 java调用spark程序_数据库_10


Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_11

三、Spark独立应用程序编程

1. 安装sbt

  1. 创建文件夹sbt
  2. Java用sparkSQL实例 java调用spark程序_spark_12

  3. 下载sbt:访问“http://www.scala-sbt.org”下载安装文件sbt-1.3.8.tgz
  4. Java用sparkSQL实例 java调用spark程序_数据库_13

  5. 3. 解压文件
  6. Java用sparkSQL实例 java调用spark程序_mysql_14

  7. 修改sbt文件权限
  8. Java用sparkSQL实例 java调用spark程序_java_15

  9. bin目录下的sbt-launch.jar复制到sbt安装目录
  10. Java用sparkSQL实例 java调用spark程序_java_16

  11. 创建脚本文件sbt

vim /usr/sbt//sbt  #//注意双斜杠

输入以下内容:

#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

Java用sparkSQL实例 java调用spark程序_java_17


6. 修改脚本执行权限

Java用sparkSQL实例 java调用spark程序_java_18


7. 查看sbt版本(初次安装会消耗5-10分钟):

Java用sparkSQL实例 java调用spark程序_spark_19

2. 编写应用程序

  1. home目录创建一个sparkapp作为应用程序根目录
  2. Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_20


  3. ./sparkapp/src/main/scala 下建立一个名为SimpleApp.scala 的文件:
  4. Java用sparkSQL实例 java调用spark程序_数据库_21

  5. 输入以下内容(最好掌握文件的大致编程逻辑):
/* SimpleApp.scala */
    import org.apache.spark.SparkContext
    import org.apache.spark.SparkContext._
    import org.apache.spark.SparkConf
 
    object SimpleApp {
        def main(args: Array[String]) {
            val logFile = "file:///usr/spark/README.md" // Should be some file on your system
            val conf = new SparkConf().setAppName("Simple Application")
            val sc = new SparkContext(conf)
            val logData = sc.textFile(logFile, 2).cache()
            val numAs = logData.filter(line => line.contains("a")).count()
            val numBs = logData.filter(line => line.contains("b")).count()
            println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
        }
    }

3. sbt打包程序

  1. ./sparkapp 中新建文件 simple.sbt(vim ./sparkapp/simple.sbt),添加内容如下,声明该独立应用程序的信息以及与 Spark 的依赖关系
name := "Simple Project"
version := "1.0"
scalaVersion := "2.12.10"
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.0.1"

此处scalaVersion和 spark-core为前面启动spark shell过程中显示的内容。

Java用sparkSQL实例 java调用spark程序_数据库_22


2. 将整个应用程序打包成 JAR(首次运行需要下载依赖包,下载时间比较长)

首次运行效果截图:

Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_23


非首次运行效果截图:

Java用sparkSQL实例 java调用spark程序_spark_24


3. 查看生成的jar包位置(具体指令cd切换路径)

生成的 jar 包的位置为 ~/sparkapp/target/scala-2.12/simple-project_2.12-1.0.jar

4.通过spark-submit提交并运行程序

Java用sparkSQL实例 java调用spark程序_java_25


借鉴一下其他指令(scala-2.11得按照实际的版本 别盲目照搬):

Java用sparkSQL实例 java调用spark程序_数据库_26

运行结果放大图:

Java用sparkSQL实例 java调用spark程序_数据库_27

四、Java独立程序

1. 安装maven

  1. maven官网下载maven包:https://maven.apache.org/download.cgi#Files
  2. maven包解压到/usr/目录
sudo tar -zxvf apeche-maven-3.8.4-bin.tar.gz -C /usr/

ls指令查看解压前后变化 增加maven文件

Java用sparkSQL实例 java调用spark程序_java_28

  1. 更改文件名
  2. Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_29


  3. 更改权限
  4. Java用sparkSQL实例 java调用spark程序_spark_30


2. 编写java程序

  1. 创建一个文件夹sparkapp2作为应用程序根目录
  2. Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_31

  3. 2…/sparkapp2/src/main/java下建立一个名为SimpleApp.java 的文件
/*** SimpleApp.java ***/
    import org.apache.spark.api.java.*;
    import org.apache.spark.api.java.function.Function; 
    public class SimpleApp {
        public static void main(String[] args) {
            String logFile = "file:///usr/spark/README.md"; // Should be some file on your system
            JavaSparkContext sc = new JavaSparkContext("local", "Simple App",
                "file:///usr/spark/", new String[]{"target/simple-project-1.0.jar"});
            JavaRDD<String> logData = sc.textFile(logFile).cache();
 
            long numAs = logData.filter(new Function<String, Boolean>() {
                public Boolean call(String s) { return s.contains("a"); }
            }).count();
 
            long numBs = logData.filter(new Function<String, Boolean>() {
                public Boolean call(String s) { return s.contains("b"); }
            }).count();
 
            System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
        }
    }
  1. ./sparkapp2中新建文件pom.xml
    添加以下内容:
<project>
        <groupId>edu.berkeley</groupId>
        <artifactId>simple-project</artifactId>
        <modelVersion>4.0.0</modelVersion>
        <name>Simple Project</name>
        <packaging>jar</packaging>
        <version>1.0</version>
        <repositories>
            <repository>
                <id>Akka repository</id>
                <url>http://repo.akka.io/releases</url>
            </repository>
        </repositories>
        <dependencies>
            <dependency> <!-- Spark dependency -->
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-core_2.11</artifactId>
                <version>2.1.0</version>
            </dependency>
        </dependencies>
    </project>

3. maven打包java程序

  1. 首次运行mvn package命令时,系统会自动从网络下载相关的依赖包
/usr/maven/bin/mvn package

错误信息:

Java用sparkSQL实例 java调用spark程序_数据库_32


解决方法:

当编译通过后,会弹出“No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?”的错误,主要原因是maven需要在jdk基础上运行,而之前所装为非原生jdk,需要用yum来安装。

yum install java-devel

成功截图:

Java用sparkSQL实例 java调用spark程序_spark_33

4. 通过spark-submit 运行程序

Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_34

五、连接MySQL数据库

1. 下载mysql yum repo配置文件

Java用sparkSQL实例 java调用spark程序_数据库_35

2. 安装repo相应版本

Java用sparkSQL实例 java调用spark程序_java_36

3. 验证是否安装成功

Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_37

4.配置mysql版本

执行vim指令编辑repo文件:

sudo vim /etc/yum.repos.d/mysql-community.repo

enabled 为1表示启用,将要安装的版本的enabled改为1后保存

这里修改的是第一个mysql55

Java用sparkSQL实例 java调用spark程序_spark_38

5. 安装mysql

sudo yum install mysql-community-server.x86_64

Java用sparkSQL实例 java调用spark程序_spark_39

6. 启动mysql

  1. 启动mysql:注意是mysqld,不是mysql
  2. Java用sparkSQL实例 java调用spark程序_mysql_40

  3. 2.查看mysql状态
  4. Java用sparkSQL实例 java调用spark程序_spark_41


7. 管理用户并操作数据库

  1. mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认的原始密码。为了避免后面忘记或者换成自己熟悉的密码,可以通过下面的方式找到root默认密码,然后登录mysql进行修改:

Java用sparkSQL实例 java调用spark程序_数据库_42


2. 登录账号

Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_43


3. 修改用户密码(注意:最新版本mysql会进行密码强度校验:密码设置时必须包含大小写字母、特殊符号、数字,并且长度大于8位)

Java用sparkSQL实例 java调用spark程序_spark_44


4. 查看数据库

Java用sparkSQL实例 java调用spark程序_spark_45


5. 开启数据库远程控制(MySQL默认是没有开启远程控制的,必须添加远程访问的用户,即默认是只能自己访问,不允许其他主机访问)

Java用sparkSQL实例 java调用spark程序_java_46


6.为了避免中文出现乱码,还要对数据库的字符集进行设置

查看数据库字符集:

Java用sparkSQL实例 java调用spark程序_mysql_47


编辑配置文件:

Java用sparkSQL实例 java调用spark程序_spark_48


Java用sparkSQL实例 java调用spark程序_数据库_49


Java用sparkSQL实例 java调用spark程序_mysql_50


再次进入数据库:mysql -u root -p

六、Spark SQL 读写数据库

1. 创建数据库及数据表

Java用sparkSQL实例 java调用spark程序_spark_51

2.下载JDBC驱动包:

https://dev.mysql.com/downloads/ connector/j

(1)选择第五个

Java用sparkSQL实例 java调用spark程序_spark_52

(2)选择第二个进行下载(重点说明:此时官网最新版本的MySQL是8.0版本、JDBC最新版本也是8.X版本。所以,此时不用担心JDBC中jar包与MySQL的冲突。)

Java用sparkSQL实例 java调用spark程序_mysql_53

3. 解压:

Java用sparkSQL实例 java调用spark程序_Java用sparkSQL实例_54

4. 移动jar包:

5. 启动spark-shell:

5.6 连接数据库:

5.7 查询数据

写在最后