目录
- 实践目标
- 实践步骤
- 一、安装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
(需要压缩包欢迎留言)
2. 新建spark专用文件夹
ls #查看~路径下文件信息
cd /usr #切换路径
sudo mkdir /usr/spark/ #当前路径下新建文件夹spark
出现报错信息:普通用户不具有新建文件夹权限
解决办法:
- 切换到超级用户root
- 添加sudo文件的写权限
- 编辑sudoers文件
具体编辑信息更改如下:
3.解压spark包到指定路径/usr/spark下
切换路径到压缩包所在位置 输入ls指令确保能找到相应spark压缩包
sudo tar -zxf spark-3.0.1-bin-hadoop3.2.tgz -C /usr/spark/
嘱咐几句:极有可能博文中的文件路径与实践中操作的路径会出现不一致,
所以要知其所以然,学会自己排查错误。以下是几点排错体会:
- 命令行Tab键能实现自动扩充(输入的前几个字符在当前路径下唯一)
快捷键能很好地降低长文件名手动输入的错误 - 例如切换路径进入spark目录 只需要输入cd sp 然后Tab键能实现自动扩充
- 掌握cd逐层排查某个文件的路径
4. 移动spark-3.0.1-bin-hadoop3.2下所有文件
执行红色部分命令行即可,其他部分很好地解释了整个移动过程中相应文件夹内容的变化。
5. 修改文件权限
注意:命令行中第一个 spark 为用户名 ,建议查阅chown指令的基本参数。
6. 验证是否安装成功
到此为止,已经安装好local模式的spark,通过运行spark自带示例验证spark是否安装成功。
注:如果想要spark在真正的分布式环境运行,还需要安装jdk和Hadoop
7. 测试spark shell交互式命令界面
8. 查看spark集群
通过/usr/spark/sbin下的start-all.sh启动spark,
通过http://localhost:8080看到spark集群信息。
Centos没有默认浏览器,需要自行下载firefox或Google等浏览器
三、Spark独立应用程序编程
1. 安装sbt
- 创建文件夹sbt
- 下载sbt:访问“http://www.scala-sbt.org”下载安装文件sbt-1.3.8.tgz
- 3. 解压文件
- 修改sbt文件权限
- bin目录下的sbt-launch.jar复制到sbt安装目录
创建脚本文件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 "$@"
6. 修改脚本执行权限
7. 查看sbt版本(初次安装会消耗5-10分钟):
2. 编写应用程序
- home目录创建一个sparkapp作为应用程序根目录
- ./sparkapp/src/main/scala 下建立一个名为SimpleApp.scala 的文件:
- 输入以下内容(最好掌握文件的大致编程逻辑):
/* 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打包程序
- ./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过程中显示的内容。
2. 将整个应用程序打包成 JAR(首次运行需要下载依赖包,下载时间比较长)
首次运行效果截图:
非首次运行效果截图:
3. 查看生成的jar包位置(具体指令cd切换路径)
生成的 jar 包的位置为 ~/sparkapp/target/scala-2.12/simple-project_2.12-1.0.jar
4.通过spark-submit提交并运行程序
借鉴一下其他指令(scala-2.11得按照实际的版本 别盲目照搬):
运行结果放大图:
四、Java独立程序
1. 安装maven
- maven官网下载maven包:https://maven.apache.org/download.cgi#Files
- maven包解压到/usr/目录
sudo tar -zxvf apeche-maven-3.8.4-bin.tar.gz -C /usr/
ls指令查看解压前后变化 增加maven文件
- 更改文件名
- 更改权限
2. 编写java程序
- 创建一个文件夹sparkapp2作为应用程序根目录
- 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);
}
}
- ./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程序
- 首次运行mvn package命令时,系统会自动从网络下载相关的依赖包
/usr/maven/bin/mvn package
错误信息:
解决方法:
当编译通过后,会弹出“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
成功截图:
4. 通过spark-submit 运行程序
五、连接MySQL数据库
1. 下载mysql yum repo配置文件
2. 安装repo相应版本
3. 验证是否安装成功
4.配置mysql版本
执行vim指令编辑repo文件:
sudo vim /etc/yum.repos.d/mysql-community.repo
enabled 为1表示启用,将要安装的版本的enabled改为1后保存
这里修改的是第一个mysql55
5. 安装mysql
sudo yum install mysql-community-server.x86_64
6. 启动mysql
- 启动mysql:注意是mysqld,不是mysql
- 2.查看mysql状态
7. 管理用户并操作数据库
- mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认的原始密码。为了避免后面忘记或者换成自己熟悉的密码,可以通过下面的方式找到root默认密码,然后登录mysql进行修改:
2. 登录账号
3. 修改用户密码(注意:最新版本mysql会进行密码强度校验:密码设置时必须包含大小写字母、特殊符号、数字,并且长度大于8位)
4. 查看数据库
5. 开启数据库远程控制(MySQL默认是没有开启远程控制的,必须添加远程访问的用户,即默认是只能自己访问,不允许其他主机访问)
6.为了避免中文出现乱码,还要对数据库的字符集进行设置
查看数据库字符集:
编辑配置文件:
再次进入数据库:mysql -u root -p
六、Spark SQL 读写数据库
1. 创建数据库及数据表
2.下载JDBC驱动包:
https://dev.mysql.com/downloads/ connector/j
(1)选择第五个
(2)选择第二个进行下载(重点说明:此时官网最新版本的MySQL是8.0版本、JDBC最新版本也是8.X版本。所以,此时不用担心JDBC中jar包与MySQL的冲突。)
3. 解压:
4. 移动jar包:
5. 启动spark-shell:
5.6 连接数据库:
5.7 查询数据
写在最后