【抽取数据简单方式】spark实现hive中数据抽取到MySQL

目录

一、hdfs抽取到MySQL

二、hive的table表抽取到MySQL


抽取hive的数据到MySQL(将hive中的表导入到MySQL中)有两种方式:

  1. 直接从hdfs上抽取,因为hive的数据储存在hdfs上。
  2. 从hive的table表中直接抽取也可以!

一、hdfs抽取到MySQL

使用csv读数据hdfs的数据,jdbc取数据:

关键代码:

python 复制代码
# 获取sparkSession对象
    spark = SparkSession.builder.master("local[2]").appName("").config(
        "spark.sql.shuffle.partitions", 2).getOrCreate()

# 读取hive数据(本质是读取hdfs)
    df=spark.read.csv('hdfs://bigdata01:9820/user/hive/warehouse/yunhe01.db/t_user').toDF('id','name')
# 写入本地mysql中
df.write.format('jdbc') \
    .option("driver", "com.mysql.cj.jdbc.Driver") \
    .option("url", "jdbc:mysql://localhost:3306/zuoye") \
    .option("dbtable", "t_user") \
    .option("user", "root") \
    .option("password", "123456") \
    .save(mode='overwrite')

完整代码:

python 复制代码
import os

from pyspark.sql import SparkSession

"""
------------------------------------------
  Description : TODO:
  SourceFile : _14-hive读取到mysql
  Author  : song
  Date  : 2024/11/6
-------------------------------------------
"""
if __name__ == '__main__':
    # 配置环境
    os.environ['JAVA_HOME'] = 'C:/Program Files/Java/jdk1.8.0_201'
    # 配置Hadoop的路径,就是前面解压的那个路径
    os.environ['HADOOP_HOME'] = 'D:/B/05-Hadoop/hadoop-3.3.1/hadoop-3.3.1'
    # 配置base环境Python解析器的路径
    os.environ['PYSPARK_PYTHON'] = 'C:/ProgramData/Miniconda3/python.exe'  # 配置base环境Python解析器的路径
    os.environ['PYSPARK_DRIVER_PYTHON'] = 'C:/ProgramData/Miniconda3/python.exe'
    os.environ['HADOOP_USER_NAME'] = 'root'
    # 获取sparkSession对象
    spark = SparkSession.builder.master("local[2]").appName("").config(
        "spark.sql.shuffle.partitions", 2).getOrCreate()

    # 读取hive数据(本质是读取hdfs)
    df=spark.read.csv('hdfs://bigdata01:9820/user/hive/warehouse/yunhe01.db/t_user').toDF('id','name')
    # 写入本地mysql中
    df.write.format('jdbc') \
        .option("driver", "com.mysql.cj.jdbc.Driver") \
        .option("url", "jdbc:mysql://localhost:3306/zuoye") \
        .option("dbtable", "t_user") \
        .option("user", "root") \
        .option("password", "123456") \
        .save(mode='overwrite')
    
    spark.stop()

二、hive的table表抽取到MySQL

使用table(也就是hive数据库)读数据,jdbc取数据:

关键代码:

python 复制代码
# 获取sparkSession对象
    spark = SparkSession \
        .builder \
        .appName("Hive表导入到MySQL") \
        .master("local[2]") \
        .config("spark.sql.warehouse.dir", 'hdfs://bigdata01:9820/user/hive/warehouse') \
        .config('hive.metastore.uris', 'thrift://bigdata01:9083') \
        .config("spark.sql.shuffle.partitions", 2) \
        .enableHiveSupport() \
        .getOrCreate()
    # 读取hive表中数据
    df=spark.read.table("yunhe01.t_user")
    # 写入本地mysql中
    df.write.format('jdbc') \
        .option("driver", "com.mysql.cj.jdbc.Driver") \
        .option("url", "jdbc:mysql://localhost:3306/zuoye") \
        .option("dbtable", "t_user1") \
        .option("user", "root") \
        .option("password", "123456") \
        .save(mode='overwrite')

完整代码:

python 复制代码
import os

from pyspark.sql import SparkSession

"""
------------------------------------------
  Description : TODO:
  SourceFile : _14-hive读取到mysql
  Author  : song
  Date  : 2024/11/6
-------------------------------------------
"""
if __name__ == '__main__':
    # 配置环境
    os.environ['JAVA_HOME'] = 'C:/Program Files/Java/jdk1.8.0_201'
    # 配置Hadoop的路径,就是前面解压的那个路径
    os.environ['HADOOP_HOME'] = 'D:/B/05-Hadoop/hadoop-3.3.1/hadoop-3.3.1'
    # 配置base环境Python解析器的路径
    os.environ['PYSPARK_PYTHON'] = 'C:/ProgramData/Miniconda3/python.exe'  # 配置base环境Python解析器的路径
    os.environ['PYSPARK_DRIVER_PYTHON'] = 'C:/ProgramData/Miniconda3/python.exe'
    os.environ['HADOOP_USER_NAME'] = 'root'

    # 获取sparkSession对象
    spark = SparkSession \
        .builder \
        .appName("Hive表导入到MySQL") \
        .master("local[2]") \
        .config("spark.sql.warehouse.dir", 'hdfs://bigdata01:9820/user/hive/warehouse') \
        .config('hive.metastore.uris', 'thrift://bigdata01:9083') \
        .config("spark.sql.shuffle.partitions", 2) \
        .enableHiveSupport() \
        .getOrCreate()
    # 读取hive表中数据
    df=spark.read.table("yunhe01.t_user")
    # 写入本地mysql中
    df.write.format('jdbc') \
        .option("driver", "com.mysql.cj.jdbc.Driver") \
        .option("url", "jdbc:mysql://localhost:3306/zuoye") \
        .option("dbtable", "t_user1") \
        .option("user", "root") \
        .option("password", "123456") \
        .save(mode='overwrite')
    spark.stop()

总结:sqoop、datax、kettle都可以实现数据的导入导出,但发现使用spark是最简单的方式并且导入导出的速度也很快!

相关推荐
RisunJan5 分钟前
Linux命令-mysqldump(MySQL数据库中备份工具)
linux·数据库·mysql
Joy T6 分钟前
【大数据】离线数仓核心组件:Hive 架构解析与进阶操作指南
大数据·数据仓库·hive·hadoop·架构
FinTech老王12 分钟前
告别“sql_mode“噩梦:MySQL 8.0 vs 5.7兼容性全对比与升级避坑指南
android·sql·mysql
zs宝来了18 分钟前
MySQL MVCC 实现原理:Undo Log 与 Read View
mysql·mvcc·read view·并发控制·undo log
honortech23 分钟前
docker 配置 MySQL 主从数据库
数据库·mysql·docker
jasnet_u44 分钟前
在Hadoop3.3.6上搭建Hive3.1.2
hive·hadoop
HalvmånEver1 小时前
MySQL数据库基础入门总结(从0到1)
linux·数据库·mysql
zs宝来了1 小时前
InnoDB 锁机制:记录锁、间隙锁与临键锁
mysql·innodb·锁机制·记录锁·间隙锁
qq_283720051 小时前
MySQL 8.0.x Windows 保姆级安装教程(图文详解+踩坑全标记)
mysql·安装教程·保姆安装
jeCA EURG1 小时前
mysql用户名怎么看
数据库·mysql