0425-如何清理Sqoop脚本产生的临时编译目录

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢

1.文档编写目的


在使用Sqoop命令进行数据抽取时,执行的抽数脚本会在/tmp/sqoop-${user}/compile目录下产生临时的编译文件,脚本执行成功后这些生成的临时文件并不会自动的清除。该问题是官网已知的一个JIRA,具体可信息如下链接:

https://issues.apache.org/jira/browse/SQOOP-3042

本篇文章Fayson主要介绍通过脚本的方式,在用户执行Sqoop命令时自动的清理产生的临时编译目录。

  • 内容概述

1.环境准备

2.Sqoop配置清理脚本及验证

3.总结

  • 测试环境

1.RedHat7.3

2.CM和CDH版本为5.15

2.环境准备


1.在集群所有节点安装tmpwatch,命令如下:

[root@cdh03 ~]# yum -y install tmpwatch

(可左右滑动)

2.通过CM安装“Sqoop 1 Client1”服务

选择Gateway节点

部署客户端配置

Sqoop 1 Client服务安装成功

3.Sqoop配置清理脚本


1.进入“Sqoop 1 Client”服务的配置界面

2.在搜索栏,搜索“sqoop-env.sh”,在配置项中增加如下脚本

#清除一天前当前用户临时编译目录
expires=1d
echo
echo SQOOP COMPILE DIR DIRECTORY COUNT
  ls -ltd /tmp/sqoop-"$USER"/compile/* | wc
echo SQOOP COMPILE DIR FILES COUNT
  ls -ltR /tmp/sqoop-"$USER"/compile/* | wc
echo SQOOP COMPILE DIR OLDEST DIRECTORY
  ls -ltd /tmp/sqoop-"$USER"/compile/* | tail -1
echo SQOOP COMPILE DIR TMPWATCH $expires DELETE TEST
  tmpwatch --test $expires /tmp/sqoop*/compile/ | wc
echo SQOOP COMPILE DIR TMPWATCH $expires DELETE
  tmpwatch $expires /tmp/sqoop-"$USER"/compile/ | wc
echo SQOOP COMPILE DIR DIRECTORY COUNT
  ls -ltd /tmp/sqoop-"$USER"/compile/* | wc
echo SQOOP COMPILE DIR FILES COUNT
  ls -ltR /tmp/sqoop-"$USER"/compile/* | wc
echo SQOOP COMPILE DIR OLDEST DIRECTORY
  ls -ltd /tmp/sqoop-"$USER"/compile/* | tail -1
echo

(可左右滑动)

3.保存配置并重新部署客户端配置

4.验证脚本


这里Fayson将清理脚本设置为1h即清理1小时前生成的编译文件及目录。

1.查看root用户的/tmp/sqoop-root/compile目录下的编译目录

compile目录下有两个编译目录,885f8开头目录的创建时间在1个小时前。

2.使用sqoop命令进行数据抽取

sqoop import \
--connect "jdbc:mysql://cdh02.fayson.com:3306/metastore" \
--username root \
--password 123456 \
--query 'select c.NAME,c.DB_LOCATION_URI,a.TBL_NAME,a.OWNER,a.TBL_TYPE,b.LOCATION from TBLS a,SDS b,DBS c where a.SD_ID=b.SD_ID and a.DB_ID=c.DB_ID and $CONDITIONS' \
--fields-terminated-by ',' \
--delete-target-dir \
--hive-database default \
--target-dir /tmp/hive_tables \
--create-hive-table \
--hive-import \
--hive-overwrite \
--hive-table hive_tables \
--m 1

(可左右滑动)

可以看到在执行sqoop命令时,会输出上图标注部分的日志信息,即为Fayson配置清理脚本输出的日志。

3.查看/tmp/sqoop-root/compile目录的编译目录

可以看到compile目录下,“885f8”开头在一个小时前的日志目录已被清理。

5.总结


1.Sqoop没有自动清除/tmp/sqoop-${user}/compile下的编译目录,在3.0.0版本才被修改,在CDH中的Sqoop也并未修复该问题。

2.本文Fayson通过在Sqoop的运行环境中添加清理脚本,来实现编译目录的清理。

3.默认情况是不需要安装“Sqoop 1 Client”服务的,因为需要借助于CM统一的在Sqoop的运行环境中添加脚本。

提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Sqoop是一个用于在Hadoop和关系型数据库之间进行数据传输的工具。它可以将数据从关系型数据库(如MySQL)导入到Hadoop生态系统中的HDFS(Hadoop分布式文件系统)或Hive中,也可以将数据从HDFS或Hive导出到关系型数据库。 要使用Sqoop将数据从MySQL导入到MySQL,你可以编写一个Sqoop脚本,其中包含Sqoop命令和相关参数。以下是一个示例脚本: ``` sqoop import \ --connect jdbc:mysql://source_mysql_host:port/source_database \ --username source_username \ --password source_password \ --table source_table \ --target-dir /path/to/hdfs/directory \ --fields-terminated-by ',' sqoop export \ --connect jdbc:mysql://target_mysql_host:port/target_database \ --username target_username \ --password target_password \ --table target_table \ --export-dir /path/to/hdfs/directory \ --input-fields-terminated-by ',' ``` 上述脚本中的`source_mysql_host`、`port`、`source_database`、`source_username`、`source_password`、`source_table`分别表示源MySQL数据库的主机名、端口、数据库名、用户名、密码和表名。同样,`target_mysql_host`、`port`、`target_database`、`target_username`、`target_password`、`target_table`表示目标MySQL数据库的相关信息。 在脚本中,首先使用`sqoop import`命令将数据从源MySQL数据库导入到HDFS中的指定目录。然后,使用`sqoop export`命令将数据从HDFS导出到目标MySQL数据库的指定表中。 请注意,你需要根据实际情况修改脚本中的参数和路径。另外,确保在运行Sqoop脚本之前,已经在Hadoop集群上安装和配置了Sqoop

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值