利用sqoop从数据源获取数据到hive的流程化

  在流程化中,我不太清楚其他朋友是怎么做的,这里参考我司的数据仓库的调度逻辑将sqoop脚本放到shell里执行,最终结果能基本解决后期日常维护、代码重用的需求;注意这里只讨论从数据源获取数据到hive而不包括在hive中对数据的处理脚本,但是是值得参考的

目标
 根据需要每天从业务库导入前一天的数据,在hive中生成一个日表,格式与数据源保持一致即可,比如今天2015年5月11日,那么我们将在凌晨从数据源中获取的2015年5月10日的数据;这里hive当做一个数据仓库来使用,先将数据原封不动的抽取过来,相当于三层结构中的ods层。

测试环境

    数据源:MS sqlserver 2012
    hadoop-2.5.0  hive-0.13  sqoop-1.4.5
    对应的数据库为fengmingdw

1、数据源的配置文件  

  关于配置文件的存在是为了将所用相关的属性整合到同一个文件,每一个需要对应属性的脚本,只要到里面去读就可以了;在设计过程中这里提供了两种方法,方法一可以参考一下,建议直接方法二

方法一,自定义配置文件

配置文件格式可以自选,包括诸如xml、ini等等,考虑到shell实现的困难,这里选取最简单的
形如xxx=aaaa ,这是linux中通用的配置文件方式
#文件命名为datawarehouse
    ip=192.168.73.12   #注意等号两边不要有空格
    username=testUser
    passwd=123456
    dbname=fdw
    connectURL="jdbc:sqlserver://`echo $ip`;DatabaseName=`echo $dbname`"

读取该文件的方法参考如下

function load_config()
{
filePath="/home/9003547/datasource.d/`echo $1`" #这是我存放的配置文件路径
echo $filePath
if [ -f "$filePath" ]; then
  . $filePath
fi
}
load_config datawarehouse  #传入配置文件名称
echo $ip                   #读取的参数
echo $connectURL

在对应的脚本中加入此代码就可以获取到ip、connectURL等配置在datawarehouse中的值

方法二,options-file参数

sqoop中提供了一个选项 --options-file,允许sqoop去读取一段文件内的脚本
这里提供一个文件,路径为 /home/9003547/sqooppath/fdw.txt,该文件内容如下
import 
--connect 
jdbc:sqlserver://192.168.73.12:1433;DatabaseName=fdw
--username 
testUser
--password 
123456

在sqoop中可以使用类似语句就可以重复引用文件fdw.txt中的信息

sqoop --options-file /home/9003547/sqooppath/fdw.txt \
--table myTestTable \
--xxxxxx #后面补充相应的参数

  这种情况,对于大量的数据来源库可能需要自己维护,十几二十可以用,但是更多的就可能有点乏力了,事实上不管有多少数据源都建议给予一个良好的命名规范,至少能要让使用者能够看命名就知道内容

shell中的sqoop与hive脚本

  在这里做简单的设置,包括传入一个日期参数作为表名、将hive中存在的表名给删除、sqoop抽取表数据

日期参数的设置

  因为是每天一个表存放数据,所以采取的方式是表名+日期,这里设置日期参数

#定义时间,允许传入一个时间,如果未传递则默认当前日期的前一天
if [ -z $1 ]
then
  d_date=`date +%Y%m%d --date="-1 day"`
else
  d_date=$1
fi
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值