实践目标
实践步骤
一、安装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/

出现报错信息:普通用户不具有新建文件夹权限 
解决办法:
- 切换到超级用户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
输入以下内容:
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 查询数据
写在最后
|