当前位置: 首页 > news >正文

分享一个脚本,从mysql导出数据csv到hdfs临时目录

想从mysql导出一个表到csv文件,然后上传到hdfs,开始使用sqoop,结果各种问题频出:
https://blog.csdn.net/weixin_45357522/article/details/149498030
https://blog.csdn.net/weixin_45357522/article/details/149449413
特别是那个QueryResult的问题,基本没有完美解决方法,所以才有了本脚本完美替换sqoop方式。

本脚本从mysql导出一个表到csv文件,然后上传到hdfs。其中有些步骤要检测是否成功,命令后面加了checkRst,不成功就中断退出,否则dolphinscheduler会认为任务成功了,接着执行后续任务,误导管理员以为任务成功,有些是不用管是否成功的。本脚本用于dolphinscheduler中加载数据。

另外,要注意dolphinscheduler worker和数据库服务器之间,用户(hive)要设置好ssh免登录,用于下载数据文件到本地。数据库的数据导出目录也要给写权限,以免残留文件在服务器上。

#!/bin/bash
if [[ $# < 5 ]]
thenecho "usage: $0 mysqlConnect sql hdfsRoot srcSystem bizDate"echo "e.g.: $0 \"-h 10.6.2.9 -P 13306 -u root -ppasswd123\" \"SELECT id,is_set,zl_office_id FROM loan.project_info\" \"/dmp/biz\" \"yecai\" \"20250727\""exit 1
fi
checkRst(){if [[ $? != 0 ]]thenecho "--- check failed"exit 1elseecho "--- check success"fi
}
#解析参数
mysqlConnect=$1
sql=$2
dmpRoot=$3
srcSystem=$4
bizDate=$5
echo "===== got input params:"
echo "mysqlConnect: $mysqlConnect"
echo "sql: $sql"
echo "dmpRoot: $dmpRoot"
echo "srcSystem: $srcSystem"
echo "bizDate: $bizDate"
dbHost=$( echo $mysqlConnect | awk -F '-h ' '{print $2}'|awk -F ' ' '{print $1}')
echo "bizDate: $bizDate"
echo "===== parsed params:"
tableName=$(echo $sql | awk -F ' from ' '{print $2}' |awk -F ' ' '{print $1}')
if [ -z $tableName ]; thentableName=$(echo $sql | awk -F ' FROM ' '{print $2}' |awk -F ' ' '{print $1}')
fi
if [[ $tableName == *.* ]]
thentableName=$(echo $tableName | awk -F '.' '{print $2}')
fi
echo "tableName: $tableName"
echo "===== end of params"echo "1.尝试删除数据库服务器残留文件"
ssh hive@${dbHost} rm -f /tmp/${tableName}.csvecho "2.导出数据到数据库服务器csv文件"
mysql ${mysqlConnect} -e "$sql INTO OUTFILE '/tmp/$tableName.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"
checkRstecho "3.从数据库服务器下载文件到本地"
scp hive@${dbHost}:/tmp/${tableName}.csv ~/
checkRstecho "4.删除数据库服务器残留文件"
ssh hive@${dbHost} rm -f /tmp/${tableName}.csvecho "5.尝试清除hdfs旧文件"
hdfs dfs -rm -r ${dmpRoot}/tmp/${srcSystem}/${tableName}/${bizDate}echo "6.尝试创建hdfs文件目录"
hdfs dfs -mkdir -p ${dmpRoot}/tmp/${srcSystem}/${tableName}/${bizDate}echo "7.上传本地文件到hdfs"
hdfs dfs -put ~/${tableName}.csv ${dmpRoot}/tmp/${srcSystem}/${tableName}/${bizDate}
checkRstecho "8.清除本地临时文件"
rm -f ~/${tableName}.csv
http://www.xdnf.cn/news/1203391.html

相关文章:

  • CFIHL: 水培生菜的多种叶绿素 a 荧光瞬态图像数据集
  • 雷达系统设计学习:自制6GHz FMCW Radar
  • 深入解析 Spring 获取 XML 验证模式的过程
  • 可以组成网络的服务器 - 华为OD统一考试(JavaScript 题解)
  • 速度革命 Kingston FURY PCIe 5.0 NVMe装机体验
  • 第四章:分析 Redis 性能高原因和核心字符串类型命令
  • 15-C语言:第15天笔记
  • Nginx 四层(stream)反向代理 + DNS 负载均衡
  • Java面试深度剖析:从JVM到云原生的技术演进
  • JVM 内存共享区域详解
  • 解决cordova编译安卓提示Cloud not find XXXX.aar
  • windows内核研究(异常-CPU异常记录)
  • C++ 内存管理
  • 图像轮廓与凸包
  • 数据赋能(345)——数据整合——全面集成原则
  • 《 服务注册发现原理:从 Eureka 到 Nacos 的演进》
  • Vue、微信小程序、Uniapp 面试题整理最新整合版
  • 博士申请 | 荷兰阿姆斯特丹大学 招收计算机视觉(CV)方向 全奖博士生
  • JAVA后端开发——用 Spring Boot 实现定时任务
  • Spring与SpringBoot:从手动挡到自动挡的Java开发进化论
  • JAVA:Spring Boot 集成 Protobuf 的技术指南
  • Office-PowerPoint-MCP-Server – 基于MCP的开源PPT生成与编辑工具
  • 基于AFLFast的fuzz自动化漏洞挖掘(1)
  • 【Linux系统】Ext2文件系统 | 软硬链接
  • 6种将iPhone照片传输到Windows 10电脑的方法
  • 最小二乘法拟合椭圆
  • 《Linux服务与安全管理》| samba服务器配置匿名模式
  • 嵌入式基础知识复习(7.28)
  • 未授权访问
  • C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)