sqoop自定义日期采集数据脚本

#!/bin/bash
source /etc/profile
date1=$1
date2=$2

if [ ! -n "$1" ] ;then
    echo "请输入起始日期"
fi

if [ ! -n "$2" ] ;then
    echo "请输入结束日期"
fi

#hive配置
#账号名
account=root
#hive的数据库名
hive_database=trade_ods
#hive的表明
hive_table=trade
#昨天的日期,作为分区
yestday=`date -d'-1 day' +%Y-%m-%d`
#分区名
partition=dt
#sqoop抽取到hdfs上的路径
target_dir=/tmp/hive/$account/$hive_database/$hive_table
#mysql配置
ip=192.168.255.0
port=3306
user=root
password=123456
#mysql库名表名
database=trade
table=trade_origin
#代表时间的字段,update_time
date_field=update_time
#需要从mysql里抽取的字段,一般是全部字段
field=id,unit,code,update_time,create_time

#如果没表就建表,[!需要修改!]建表语句里面的字段名和数据类型
hive -e "
create table if not exists $hive_database.$hive_table (
id string,
unit string,
code int,
update_time timestamp,
create_time timestamp
) partitioned by ($parititon string)
ROW FORMAT DELIMITED fields terminated by ',';
"

#通过query将数据抽取到指定目录
output=$( \
sqoop import \
--connect jdbc:mysql://${ip}:${port}/${database}?useSSL=false \
--username ${user} \
--password ${password} \
--query "select ${field} from ${table} where \$CONDITIONS and (CAST($date_field as DATE)<'${date2}' and CAST($date_field as DATE)>='${date1}')" \
--delete-target-dir \
--target-dir  $target_dir \
--m 1 \
2>&1)

#加载数据覆盖到昨天的分区
hive -e "
load data inpath '$target_dir/part-m-00000' overwrite into table $hive_database.$hive_table parititon($parititon='$yestday');
"

调度的时候输入两个日期即可,一般是昨天和今天两个日期,也可以指定时间反胃,它会从mysql抽取两个日期内的数据到hdfs上,然后load到hive的分区中,
需要改的有上面的参数还有一个建表语句。

### Flume 和 Sqoop 的集成与比较 #### 一、Flume 和 Sqoop 功能对比 Flume 是一种高效可靠的服务,专门设计用于收集、聚合和移动大量日志数据。其架构灵活,支持多种源和目的地之间的数据流动[^2]。 Sqoop 则专注于在 Hadoop 生态系统与关系型数据库间实现高效的数据迁移操作。通过命令行接口提供了一套简便的方法来执行批量导入导出作业[^1]。 两者虽然都属于大数据领域内的工具集成员之一,但在具体应用场景上有所区别: - **适用范围不同** - Flume 更适合于处理非结构化的流式数据,比如 Web 日志文件等; - 而 Sqoop 主要针对的是结构化的关系型数据库表单记录。 - **工作模式差异** - 前者采用持续监听的方式捕获新产生的事件消息; - 后者的运作方式更接近一次性批处理任务的形式。 #### 二、Flume 数据采集Sqoop 集成方案 尽管二者功能侧重点各异,但在某些情况下确实存在联合部署的需求。例如,在监控网站流量变化趋势的过程中,先利用 Flume 实时获取访问请求详情并暂存至临时缓冲区;随后借助 Sqoop 将这些半成品资料定期同步给后台的关系型数据库作进一步加工分析。 以下是具体的实施步骤说明(注意这里不涉及实际编码细节): - 使用 Flume agent 来监视特定目录下的新增文件,并将它们转发到指定的目标位置(如 HDFS 或 Kafka),以便后续由其他组件接手处理。 - 当累积一定量级的历史档案后,则可以通过编写自定义脚本调用 `sqoop-import` 命令完成从外部 RDBMS 至 Hive 表格间的转换过程[^3]。 ```bash # 定义变量 RDBMS_URL="jdbc:mysql://localhost:3306/mydb" TABLE_NAME="mytable" USERNAME="root" PASSWORD="password" # 执行 Sqoop 导入指令 sqoop import \ --connect ${RDBMS_URL} \ --username ${USERNAME} \ --password ${PASSWORD} \ --table ${TABLE_NAME} ``` 此流程能够充分发挥各自优势的同时也弥补了单一技术手段难以覆盖全部需求的不足之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值