mysql to hdfs_Spark Mysql to hdfs

import org.apache.hadoop.fs.Path

import org.apache.spark.sql.SQLContext

import org.apache.spark.{SparkConf, SparkContext}

object MysqlToHdfs {

def main(args: Array[String]) {

val conf = new SparkConf().setMaster("spark://ip:7077").setAppName("test")

val sc = new SparkContext(conf)

val sqlContext = new SQLContext(sc)

val df1 = sqlContext.read.format("jdbc").options(Map("url" ->"jdbc:mysql://192.0.0.1:3306/db1","driver"->"com.mysql.jdbc.Driver","dbtable"->"(select field1  from table1) as t1","user"->"xxx","password"->"xxx")).load()

val df2 = sqlContext.read.format("jdbc").options(Map("url" ->"jdbc:mysql://192.0.0.1:3306/db2","driver"->"com.mysql.jdbc.Driver","dbtable"->"(select b from t2 ) as t2","user"->"xxx","password"->"xxx")).load()

df1.registerTempTable("aa")

df2.registerTempTable("bb")

val resDF = sqlContext.sql("SELECT \n t1 join t2 ")

val hadoopConf = sc.hadoopConfiguration

val hdfs = org.apache.hadoop.fs.FileSystem.get(hadoopConf)

val path = new Path(args(0))

if(hdfs.exists(path)){

hdfs.delete(path,true)

}

resDF.rdd.map(r =>{

r.get(0)+"\001"+r.get(1)+"\001"+r.get(2)+"\001"+r.get(3)+"\001"+r.get(4)+"\001"+r.get(5)+"\001"+r.get(6)+"\001"+r.get(7)+"\001"+r.get(8)+"\001"+r.get(9)+"\001"+r.get(10)

}).repartition(3).saveAsTextFile(args(0))

//resDF.rdd.repartition(3).saveAsTextFile(args(0))

}

val jdbc = "url";

classOf[com.mysql.jdbc.Driver]

val conn = DriverManager.getConnection(jdbc)

//conn.prepareStatement("delete from t1").execute()

conn.prepareStatement("sql").execute()

val prep = conn.prepareStatement("INSERT INTO t1 " +

"VALUES (?,?,?,?,?,?,?,?,?,?,?)"

)

val arr = targetDataResult.map(row=>{

var r1 = row(0)

val line = r1+"\001"+r2+"\001"+r3+"\001"+r4+"\001"+r5+"\001"+r6+"\001"+r7+"\001"+r8+"\001"+r9+"\001"+r10+"\001"+r11

line

}).collect()

for( i

val arr1 =i.split("\001")

prep.setString(1, arr1(0))

prep.executeUpdate

}

}

HDFS(Hadoop分布式文件系统)导入数据到MySQL的heat_map表通常涉及两个步骤:首先,你需要使用Hadoop MapReduce或Spark等工具读取HDFS上的数据,然后使用Sqoop或其他SQL工具将数据加载到MySQL中。这里是一个基本的流程: 1. 使用Hadoop/Spark读取HDFS数据: - 使用Hadoop的`hadoop fs -get`命令将HDFS中的文件下载到本地文件系统,如果数据是以文本文件(如CSV或JSON)形式存储,可以直接处理。 - 或者,如果你的数据适合MapReduce或Spark处理,你可以编写一个Mapper或Spark DataFrame作业来解析和预处理HDFS中的数据。 2. 使用Sqoop将数据导入MySQL: - 首先,确保你安装了Sqoop,并且已经配置了它与MySQL的连接。 - 创建一个Sqoop命令,类似于: ``` sqoop import \ --connect "jdbc:mysql://localhost:3306/taxi?useSSL=false" \ // MySQL连接信息 --username root \ --password 123456 \ --table heat_map \ // 你要插入的表 --target-dir /path/to/local/file/ // HDFS文件的本地路径 --as-avro-datafile // 如果数据格式是Avro,需要此选项 --incremental append // 如果你想增量导入,使用append模式 ``` - 确保目标表(heat_map)存在并且结构匹配输入的数据,如果有不一致,可能需要修改导入脚本或在MySQL中创建相应的表结构。 3. 执行导入: - 运行上述Sqoop命令,如果一切配置正确,数据就会被导入到MySQL的heat_map表中。 注意:在这个过程中,可能需要考虑数据格式转换、清洗、权限设置以及性能优化等问题。如果遇到问题,比如大小写敏感性、字段映射等,需要调整Sqoop的参数或编写自定义的Mapper/Loader。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值