这是想要跑的代码,用sparkSql从MySQL中读取数据
这是错误,但是hadoop什么的我也配置了,以及pom对应的版本也对的
就是报错,找不到原因
import java.util.Properties
import org.apache.spark.sql.{DataFrame, SparkSession}
//todo:通过sparksql把结果数据写入到mysql表中
object hive2MySQL.data2MysqlJar{
def main(args: Array[String]): Unit = {
//1、创建SparkSession
val spark: SparkSession = SparkSession
.builder()
.appName("Data2Mysql")
.getOrCreate()
//2、读取mysql表中数据
//2.1 定义url连接
val url="jdbc:mysql://node03:3306/spark"
//2.2 定义表名
val table="sqlTest"
//2.3 定义属性
val properties=new Properties()
properties.setProperty("user","root")
properties.setProperty("password","111111")
val mysqlDF: DataFrame = spark.read.jdbc(url,table,properties)
//把dataFrame注册成一张表
mysqlDF.createTempView("sqlTest")
//通过sparkSession调用sql方法
//把年龄大于30的用户信息保存到mysql表中
val result: DataFrame = spark.sql("select * from user where age >14")
//保存结果数据到mysql表中
//mode:指定数据的插入模式
//overwrite: 表示覆盖,如果表不存在,事先帮我们创建
//append :表示追加, 如果表不存在,事先帮我们创建
//ignore :表示忽略,如果表事先存在,就不进行任何操作
//error :如果表事先存在就报错(默认选项)
result.write.mode(args(0)).jdbc(url,args(1),properties)
//关闭
spark.stop()
}
}
脚本提交
spark-submit \
--master spark://node01:7077 \
--class hive2MySQL.data2MysqlJar \
--executor-memory 1g \
--total-executor-cores 4 \
--driver-class-path /home/hadoop/jars/mysql-connector-java-5.1.38.jar \
--jars /home/hadoop/jars/mysql-connector-java-5.1.38.jar \
original-spark_class05-1.0-SNAPSHOT.jar \
append t_person
//original-spark_class05-1.0-SNAPSHOT.jar 自己的Jar包
//注意 关于MySQL驱动jar包以下两种方案二选一即可
//方案一1 给driver和executor分别指定jar包路径
--driver-class-path:指定一个Driver端所需要的额外jar 把当前jar包添加到当前程序jar包的class path中
--jars :指定executor端所需要的额外jar 把当前jar包下发到参与运算的ececutor端的进程中
//方案二
或者每台服务器都安装MySQL驱动Jar包 并启动