@羲凡——只为了更好的活着
Spark将DataFrame数据sftp到指定机器(scala)
将处理完的数据sftp到指定的机器上,供下一个服务调用。博主使用spark2.3.2和hadoop2.7.3。直接先上代码
package aarontest
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
object SparkSftpDemo {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName("CapCollisionQuerier")
.master("local[*]")// 将此行注释掉,打jar包,放在linux上即可执行
.enableHiveSupport()
.getOrCreate()
val host=args(0) //远程机器的ip
val username=args(1) //登录远程机器的用户名
val password=args(2) //登录远程机器的密码
val outputFile =args(3) //远程机器存放文件的路径
val df: DataFrame = spark.sql("select * from aarontest.t1 limit 10")
df.write
.format("com.springml.spark.sftp") //一定要加
.option("host",host)
.option("username",username)
.option("password",password)
.option("header",true) //如果将df列名一同写出到文件中,此项设置为true
.option("fileType", "csv") //如果将df列名一同写出到文件中,此项设置为csv,不能为txt
.mode(SaveMode.Overwrite)
.save(outputFile)
spark.stop()
}
}
pom.xml文件中要添加
<dependency>
<groupId>com.springml</groupId>
<artifactId>spark-sftp_2.11</artifactId>
<version>1.1.3</version>
</dependency>
在用 spark-submit提交的时候一定要加载三个jar包 spark-sftp_2.11-1.1.3.jar 和 sftp.client-1.0.3.jar 以及 jsch-0.1.53.jar。加载jar包的方式很多,只要在spark任务运行时能读取到这三个jar包即可。下面使用 –jars 的方式演示
#!/bin/sh
/usr/local/package/spark-2.3.2-bin-hadoop2.7/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--class aarontest.SparkSftpDemo \
--jars hdfs://ns/lib/spark-sftp_2.11-1.1.3.jar,hdfs://ns/lib/sftp.client-1.0.3.jar,hdfs://ns/lib/jsch-0.1.53.jar \
hdfs://ns/jars/SparkSftpDemo.jar $1 $2 $3 $4
====================================================================
@羲凡——只为了更好的活着
若对博客中有任何问题,欢迎留言交流