MySQL中的业务数据该如何正确导入到Hive中 - Sqoop

这篇具有很好参考价值的文章主要介绍了MySQL中的业务数据该如何正确导入到Hive中 - Sqoop。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

水善利万物而不争,处众人之所恶,故几于道💦

目录


  1. 使用Sqoop脚本将MySQL中的数据迁移到HDFS

  2. 在Hive中建立与之对应的表

  3. 将HDFS中的数据load到 Hive 数仓的ODS层的表中


1 . 使用Sqoop 将 MySQL中的数据导入到HDFS上

#! /bin/bash

sqoop=/opt/module/sqoop/bin/sqoop
#do_date默认为前一天的时间
do_date=`date -d '-1 day' +%F`
#如果第二个参数没有指定导入哪天的数据,默认为前一天的数据
if [[ -n "$2" ]]; then
	do_date=$2
fi

import_data(){
$sqoop import \
--connect jdbc:mysql://hadoop101:3306/gmall \
--username root \ 
--password 000000 \
#指定导出数据的目录路径
--target-dir /origin_data/gmall/db/$1/$do_date \
#如果该目录已经存在,则删除该目录。设定此参数可以保证每次导入数据不会覆盖之前的数据。
--delete-target-dir \
#使用 SQL 查询语句导入数据,有的sql会加一个where 1=1是为了满足语法
--query "$2 and  \$CONDITIONS" \
#Sqoop 并行的任务数,默认值为 4。因为它底层运行的实际上是MR中的Map,没有Reduce,默认是4个MapTask。数据导入时,建议并行度设为1
--num-mappers 1 \
--fields-terminated-by '\t' \
#启用压缩
--compress \
#设置压缩算法-lzop压缩
--compression-codec lzop \
#Hive中的Null在底层是以\N来存储的,而MySQL中的NULL就是NULL,为了导入数据的一致性
--null-string '\\N' \
--null-non-string '\\N'
#导入后立即建立lzo索引
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /origin_data/gmall/db/$1/$do_date
}

import_activity_order(){
  import_data activity_order "select
								id,
								activity_id,
								order_id,
								create_time
							  from activity_order
							  where date_format(create_time,'%Y-%m-%d')='$do_date'"
}
import_base_region(){
  import_data base_region "select
							  id,
							  region_name
							from base_region
							where 1=1"
}
case $1 in
  "order_info")
     import_order_info
;;
  "base_category1")
     import_base_category1
;;
# 导入指定的表,省略了,所有的表都应该列出来
"first")
   import_base_category1
   import_base_category2
   import_base_category3
   import_order_info
   #......
   #所有的表,因为第一次导入为全量导入
;;
"all")
   import_comment_info
   import_coupon_use
   #以后每次是增量导入,有些表就不用导入了
;;
esac
  • 使用示例:mysql_to_hdfs.sh all 2021-02-01
  • 导出的数据用lzo压缩,并且在导出每一张表后,都立即生成lzo索引文件,因为lzo文件的切片依赖其索引文件,存放在指定的路径下

将mysql数据导入hive,大数据,hive,mysql,sqoop,数据迁移



2. 在Hive中建立与之对应的表

常用的数据类型有下面这几个:

 string - - - 字符型
 bigint - - - 数值类型
 decimal(10,2) - - - 商品的金额
 decimal(16,2) - - - 支付、退款金额

  数仓中一般创建的都是外部表,防止数据被误删(因为这个表的数据实际上是存储在HDFS上,并不属于Hive的数据集,所以当我们删除这个外部表的时候,只会删除它在Hive元数据中的记录,而不会删除HDFS上的数据文件,因此比较安全)

drop table if exists You_HiveTable_Name;
CREATE EXTERNAL TABLE You_HiveTable_Name (
`field_name1` string,
`field_name2` bigint,
`field_name3` decimal(10,2)
)
PARTITIONED BY (`dt` string) --分区字段
row format delimited fields terminated by '\t' --指定列分割符
STORED AS
  INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/warehouse/gmall/ods/ods_start_log';  --外部表的存储路径,一建表这个路径就会被创建

  以上SQL是创建一个外部表,支持lzo压缩,也就是声明这个表要读取的是lzo文件,比如我进行一个查询,(如果是MapReduce)实际上底层是通过MR去读数据,然后将结果输出,MR读数据会用到FileInputFormat,那么用LzoTextInputFormat就可以读到数据了。
  Hive - Lzo压缩的详细介绍及配置 - Hive官网



3. 将HDFS中的数据 load 到 Hive 数仓的ODS层的表中

#!/bin/bash

APP=gmall
hive=/opt/module/hive/bin/hive

# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
if [ -n "$2" ] ;then
    do_date=$2
else 
    do_date=`date -d "-1 day" +%F`
fi

sql1="
load data inpath '/origin_data/$APP/db/order_info/$do_date' OVERWRITE into table ${APP}.ods_order_info partition(dt='$do_date');

load data inpath '/origin_data/$APP/db/order_detail/$do_date' OVERWRITE into table ${APP}.ods_order_detail partition(dt='$do_date');
"
#每张表都要load,这里省略了

sql2=" 
load data inpath '/origin_data/$APP/db/base_province/$do_date' OVERWRITE into table ${APP}.ods_base_province;

load data inpath '/origin_data/$APP/db/base_region/$do_date' OVERWRITE into table ${APP}.ods_base_region;
"
case $1 in
"first"){
    $hive -e "$sql1$sql2"
};;
"all"){
    $hive -e "$sql1"
};;
esac

  这里的两个sql字符串的意思是:有的表只需要在第一次导的时候导入,导入后基本不改变,所以以后就不用导入,所以分开了。

将mysql数据导入hive,大数据,hive,mysql,sqoop,数据迁移

到Hive中查看表数据:
将mysql数据导入hive,大数据,hive,mysql,sqoop,数据迁移文章来源地址https://www.toymoban.com/news/detail-677577.html


至此,业务数据库中的数据已经从MySQL导入到了Hive中

到了这里,关于MySQL中的业务数据该如何正确导入到Hive中 - Sqoop的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Sqoop】MySQL表导入Hive

    用 Sqoop 将 MySQL 指定数据库指定的表导入Hive 的指定数据库

    2024年02月03日
    浏览(31)
  • 基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)

    Hive介绍: Hive是建立在Hadoop之上的数据仓库基础架构,它提供了类似于SQL的语言(HQL),可以对大规模数据集进行查询和分析。通过Hive,我们可以在分布式存储系统中进行复杂的数据处理和分析。 Sqoop简介: Sqoop是一个用于在Apache Hadoop和关系型数据库之间传输数据的工具。

    2024年04月13日
    浏览(31)
  • sqoop(DataX)-MySQL导入HIVE时间格问题

    用公司的大数据平台(DataX)导数,已经开发上线一个多月的一批报表,突然有同事说有个报表数据不准。出在时间字段上。 分析: 1、先看了原数据MySQL字段类型为datetime,目标字段为timestamp类型; 2、经发现所有时间的差距都是8小时,怀疑是因为时区转换的原因; 3、对比其他

    2024年02月02日
    浏览(36)
  • Sqoop数据导入到Hive表的最佳实践

    将数据从关系型数据库导入到Hive表是大数据领域中的常见任务之一,Sqoop是一个强大的工具,可以帮助实现这一目标。本文将提供Sqoop数据导入到Hive表的最佳实践,包括详细的步骤、示例代码和最佳建议,以确保数据导入过程的高效性和可维护性。 Sqoop是一个开源工具,用于

    2024年01月23日
    浏览(32)
  • Sqoop【实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)

    1️⃣ 查看所有命令【 sqoop help 】 2️⃣ 查看某条命令的具体使用方法【 sqoop help COMMAND 】 查询MySQL所有数据库,通常用于 Sqoop 与 MySQL 连通测试: 【具体参数可以使用 sqoop help list-databases 查看】实例: 结果: 【2个】WARN处理: 查询指定数据库中所有数据表,这里要注意一下

    2024年03月18日
    浏览(41)
  • 使用sqoop从Hive导出数据到MySQL

    1、启动hadoop:start-all.sh。 2、启动mysql:support-files/mysql.server start。 3、启动hive:hive。 4、在hive中创建表。 (学生信息:学号xh,姓名xm)xsxx: create table bigdata03.xsxx ( xh String, xm String ) row format delimited fields terminated by \\\',\\\'stored as textfile; (课程信息:课程号kch,学号xh,课程名称

    2024年02月11日
    浏览(41)
  • 大数据bug-sqoop(二:sqoop同步mysql数据到hive进行字段限制。)

    新增加三个参数 –query “${sql}” 这个参数添加对应表的sql语句。注意结尾必须添加 $CONDITIONS ,必须添加where 条件,如果没有where条件,写成where 1=1。案例如下: \\\"select id,key_id,key_type,\\\'\\\' as encryption_cert_chain,device_type,account_id_hash,user_identifier,user_id,request_id,device_id,vehicle_id,vehicl

    2024年02月12日
    浏览(32)
  • Sqoop将hive处理的数据导出到MySQL

    目录 部署前提 一、创建数据上传到hive中 创建学生表数据:vim stu.txt 创建课程表数据:vim course.txt 在hive中创建学生表和课程表: 上传数据到hdfs上的hive中: 二、处理hive中的数据 查询学生姓名和课程信息,创建结果表stu_result: 插入数据: 三、在mysql中创建结果表 四、将hive中处

    2024年02月03日
    浏览(30)
  • Sqoop导出hive/hdfs数据到mysql中---大数据之Apache Sqoop工作笔记006

    然后我们看看数据利用sqoop,从hdfs hbase中导出到mysql中去   看看命令可以看到上面这个   这里上面还是mysql的部分,然后看看 下面--num-mappers 这个是指定mapper数 然后下面这个export-dir这里是,指定hdfs中导出数据的目录 比如这里指定的是hive的一个表/user/hive/warehouse/sttaff_hive 然后下

    2024年02月03日
    浏览(27)
  • 大数据 | (五)通过Sqoop实现从MySQL导入数据到HDFS

    各位CSDN的朋友们大家好!这篇文章是在困扰了我三天(甚至更久),经过不断尝试与踩坑总结出来的通过 Sqoop 从Mysql数据库导入数据到 Hadoop hdfs 的详细笔记与感想,希望能帮助到大家!本篇文章收录于 初心 的 大数据 专栏。 🏠 个人主页:初心%个人主页 🧑 个人简介:大家

    2024年02月04日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包