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

news2024/12/25 13:34:30

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

目录


  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文件的切片依赖其索引文件,存放在指定的路径下

在这里插入图片描述




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字符串的意思是:有的表只需要在第一次导的时候导入,导入后基本不改变,所以以后就不用导入,所以分开了。

在这里插入图片描述

到Hive中查看表数据:
在这里插入图片描述


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/603098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二进制安装Kubernetes(K8s)集群(基于containerd)---从零安装教程(带证书)

一、实验环境 1、安装说明 selinux iptables off 官方网站:https://kubernetes.io/zh-cn/docs/home 主机名IP系统版本安装服务master0110.10.10.21rhel7.5nginx、etcd、api-server、scheduler、controller-manager、kubelet、proxymaster0210.10.10.22rhel7.5nginx、…

Ubuntu安装ssh并开启服务

Ubuntu开启SSH服务 1、更新源列表 $ sudo apt-get update 2、安装 说明:安装时需要提供互联网或者提前下载安装包 $ sudo apt-get install openssh-server 3、启动 $ sudo service ssh start 查询服务启动状态: $ sudo ps -e | grep ssh 或者 $ sudo service ssh status …

【C++】模板(1)

文章目录 前言一、泛型编程二、模板2.1 函数模板2.2 函数模板实例化:2. 3 函数模板的原理:2.4 模板参数的匹配原则 三、类模板 前言 C中的模板(template)是一种强大的语言特性,它可以让程序员编写可以适用于不同数据类型的通用代码。通过使用…

Js中的堆(heap)和栈(stack)内存

目录 1、堆和栈的概念2、数据类型3、腾讯面试题4、阿里面试题 1、堆和栈的概念 在JS钟变量都存放在内存中,而内存给变量开辟了两块区域,分别为栈区域和堆区域栈(stack):是栈内存的简称,栈是自动分配相对固定大小的内存空间&#…

长尾词挖掘,挖掘有效长尾关键词的3个方法

长尾关键词的特征是比较长,往往是2-3个词组成,甚至是短语,存在于内容页面,除了内容页的标题,还存在于内容中。 长尾关键词带来的客户,转化为网站产品客户的概率比目标关键词高很多,因此长尾…

Nginx服务

目录 一、Nginx概述 二、编译安装Nginx服务 1.安装Nginx服务 2. Nginx服务的基础命令 2.1开启nginx服务 2.2关闭nginx服务 2.3重载配置文件 2.4平滑升级 3.添加 Nginx 系统服务 3.1判断 Nginx 服务是否开启 3.2 方法一:将 nginx 服务添加到 chkconfig管…

《面试1v1》CMS垃圾回收期

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 《面试1v1》 连载中… 面试官: 小伙子,CMS 垃圾收集器跟我讲讲? 候选人: CMS全称Concurrent Mark Sweep,是一种并发标记清除算法。它并发执…

Unity3d 有关Invoke和 Coroutine 的执行条件的误解

文章目录 认识错误的点正解测试代码执行截图 认识错误的点 之前一直以为在父物体未激活的状态下, invoke 和 Coroutine 都不会执行。这里面有一点误区。 正解 Coroutine 在父物体未激活状态下,确实不会执行。并且如果在父物体(包括祖先节点…

新手小白运行Springboot+vue项目

有时候我们会经常复刻别人的项目代码,在第一次运行别人的代码都需要哪些步骤呢? 我在第一次运行的时候踩了很多坑,也看了很多博文,这篇文章将我认为帮助较大的内容进行了一个整合,希望可以为不了解前后端分离&#xff…

【踩坑日记】【YOLO5】YOLO5 训练模型的测试结果全部相反(标签混乱)原因

问题描述 使用 labelImg 为图片数据集打上标签后交给YOLO5训练,发现测试结果中识别结果全部相反,也就是出现了标签混乱的现象。本人使用猫狗图片各 150 张作为数据集进行模型训练,训练出来的模型将所有的猫识别成了狗,所有的狗识…

【数据库从0到1】-【入门基础篇】

【数据库从0到1】-【入门基础篇】 🔻一、数据库产生背景🔻二、数据库有关概述🔻三、数据库访问接口🔻四、数据库种类🔻五、数据库有关术语🔻六、常见DBMS排名🔻七、常见数据库介绍7.1 RDS(关系型…

DVWA——Brute Force

文章目录 Brute Force(暴力(破解))(1)Low等级(2)Medium等级(3)High等级(4)Impossible Brute Force(暴力(破解&…

基于SpringBoot的三层架构开发统一响应结果

说明:三层架构开发时目前开发的主流,我这里通过一个案例,来分析非三层架构开发的不利之处,以及三层架构开发的好处。 案例说明:打开员工信息页,页面要显示所有员工的信息;前端页面已提供&#…

cs109-energy+哈佛大学能源探索项目 Part-3(探索性分析)

博主前期相关的博客见下: cs109-energy哈佛大学能源探索项目 Part-1(项目背景) cs109-energy哈佛大学能源探索项目 Part-2.1(Data Wrangling) cs109-energy哈佛大学能源探索项目 Part-2.2(Data Wrangling&a…

Java设计模式(三)

系列文章目录 迪米特法则 合成复用原则 设计原则核心思想 文章目录 系列文章目录前言一、迪米特法则1.迪米特法则基本介绍2.迪米特法则注意事项和细节 二、合成复用原则1.合成复用原则基本介绍 三、设计原则核心思想总结 前言 大家好呀,欢迎来到柚子的博客~让我们…

强化学习笔记-08 Planning and Learning

前几篇我们介绍了一个重点概念model-base和model-free,其中model-base是建立在存在某个环境模型,从模型中可以获得状态、动作、奖励的转移信息,比如动态规划方法,当我们确定了状态动作的转换概率,此时我们可以通过递归…

寄存器某个位赋值、宏定义、头文件的条件编译及全局声明extern的使用

一、给寄存器的某个位进行赋值 C语言基础知识&#xff08;位操作&#xff09; 运算符含义运算符含义&按位与~按位取反|按位或<<左移^按位异或>>右移 我们定义一个32位的寄存器变量&#xff1a;unit32_t temp0; 从左到右依次是第1位&#xff0c;第2位......第…

网络层:地址解析协议ARP

网络层&#xff1a;地址解析协议ARP 笔记来源&#xff1a; 湖科大教书匠&#xff1a;ARP协议 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 B知道C的IP地址但如果不知道其对应的MAC地址&#xff0c;就无法将数据包发送给C&#xff0c;如何解决这个…

新款Model 3长什么样?特斯拉已经开始降价?

作者 | Amy 编辑 | 德新 马斯克时隔三年再次访华&#xff0c;期间会见了多部委领导及重量级人物&#xff0c;在北京和上海短暂停留了44小时后便离开了中国。 此前曾有多家媒体猜测马斯克可能会在中国发布/展示改款Model 3。但据彭博社报道&#xff0c;马斯克只是在上海工厂看了…

面向对象编程 实验三 sduwh 子窗口与控件的基本用法、资源的使用 参考实验报告2

源自网络收集&#xff0c;仅供参考 实验三收集到两份完整报告&#xff0c;这是其二&#xff0c;另一份见本专栏上一篇文章。 1 实验要求 整体目的&#xff1a;理解、窗口之间的消息传送、调用栈&#xff1b;掌握光标、图标、菜单的制作和使用方 式 &#xff1b; 掌 握 菜 单…