sqoop详细例子-按天定时把postgresql数据库中的数据导出到hdfs

环境信息:

sqoop 1.4.6

使用需求:

每天凌晨00:30按天把postgresql数据库中的数据导出到hdfs,并按年月日分级分目录存储

详细描述:

首先先写好sqoop脚本,在配置定时任务

sqoop脚本:

#!/bin/bash
source /etc/profile
today=$(date +%Y-%m-%d\ 00:00:00)
preday=$(date -d yesterday +%Y-%m-%d\ 00:00:00)
year=$(date -d yesterday +%Y)
month=$(date -d yesterday +%m)
day=$(date -d yesterday +%d)
filename1="/marinetraffic/voyage/$year/$month/$day"
filename2="/marinetraffic/position/$year/$month/$day"
echo "start-sqoop-voyage"
sqoop import --connect jdbc:mysql://192.168.10.43/haixinyuan --username root --password root --table vessel_voyage_history --compress --compression-codec gzip --where "send_time < '$today' and send_time >= '$preday'" --fields-terminated-by '\t' --target-dir $filename1 -m 1 &&
echo "done $preday"-"$today" &&
echo "start-sqoop-position" &&
sqoop import --connect jdbc:mysql://192.168.10.43/haixinyuan --username root --password root --table vessel_position --compress --compression-codec gzip --where "send_time < '$today' and send_time >= '$preday'" --fields-terminated-by '\t' --target-dir $filename2 -m 1 &&
echo "done $preday"-"$today"

解释:

第1行是刷新环境变量,使得在脚本中可以直接使用sqoop命令

第2,3行是获取当天零点和前一天零点的时间,用来在sqoop命令中拼接where条件获取指定数据

第4,5,6行是获取年月日信息用以拼接hdfs存储路径

第7,8行是拼接hdfs的存储路径

第10,13行是针对两个不同的表生成两个sqoop任务,参数配置请参照官网相关信息

配置完成后保存成sqoop.sh,赋给755权限

定时任务:

通过linux自带的crontab来设置

执行crontab -e进行配置

30 00 * * * /root/sqoop.sh > /root/sqoop.txt

该配置的意思是每天00:30分执行sqoop.sh脚本,并将执行结果追加到sqoop.txt上,其中sqoop.sh以及sqoop.txt相关的路径根据实际情况进行配置即可

保存后即可以定时执行

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web应用程序通常需要处理大量的数据,而Hadoop是一种用于存储和处理大数据的分布式系统。因此,将Web应用程序数据导出到Hadoop进行处理是一个非常常见的需求。在这种情况下,我们可以使用Sqoop和Flume来实现数据导出Sqoop是一个用于在Hadoop和关系数据库之间进行数据传输的工具。通过Sqoop,我们可以将关系数据库数据导出到Hadoop,或者将Hadoop数据导入到关系数据库Sqoop支持多种关系数据库,如MySQL、Oracle、PostgreSQL等。 Flume是一个用于在不同的数据源之间移动数据的分布式系统。通过Flume,我们可以将Web应用程序产生的数据实时地导出到Hadoop进行处理。Flume支持多种数据源,如日志文件、网络流、Twitter数据流等。 下面是一个通过Sqoop和Flume将Web应用程序数据导出到Hadoop的项目介绍: 1. 数据库数据导出到Hadoop 首先,我们需要使用Sqoop将关系数据库数据导出到Hadoop。假设我们要将MySQL数据库数据导出HDFS,我们可以使用以下命令: ``` sqoop import \ --connect jdbc:mysql://localhost/test \ --username root \ --password root \ --table mytable \ --target-dir /user/hadoop/mydata ``` 该命令会将MySQL数据库的mytable表数据导出HDFS的/user/hadoop/mydata目录。 2. Web应用程序数据实时导出到Hadoop 接下来,我们需要使用Flume将Web应用程序产生的数据实时地导出到Hadoop。假设我们要将Tomcat服务器的日志文件导出HDFS,我们可以使用以下命令: ``` flume-ng agent -n agent -c conf -f /path/to/flume.conf ``` 其,flume.conf是Flume的配置文件,我们需要在其指定数据源和目的地。例如,以下是一个简单的flume.conf文件: ``` agent.sources = web agent.sinks = hdfs agent.channels = mem agent.sources.web.type = exec agent.sources.web.command = tail -F /path/to/tomcat/logs/*.log agent.sinks.hdfs.type = hdfs agent.sinks.hdfs.hdfs.path = /user/hadoop/mydata agent.sinks.hdfs.hdfs.fileType = DataStream agent.channels.mem.type = memory agent.channels.mem.capacity = 1000 agent.channels.mem.transactionCapacity = 100 ``` 该配置文件,我们将Tomcat服务器的日志文件作为数据源,使用tail命令实时读取最新的日志数据。然后,我们将数据导出HDFS,使用的是hdfs类型的sink。最后,我们使用memory类型的channel将数据缓存起来,以便在数据传输过程进行流量控制。 通过上述配置,我们可以实现将Web应用程序产生的数据实时地导出到Hadoop进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值