在大数据平台搭建完成之后,面对的第一个问题是怎么将DB数据库的业务数据加载到hdfs/hive/hbase进行处理。sqoop提供了这种功能。下面我们介绍一些sqoop
sqoop基本概念:
sqoop是实现hadoop平台和关系型数据库的数据转移的工具。
sqoop原理:
sqoop底层使用了MR模型。sqoop根据不同的split-by参数值切分数据,然后将切分后的region分配到不同的map中。
sqoop具体操作:
验证数据库连接:
Sqoop list-databases
-connect 'jdbc:sqlserver://10.70.78.57:1433;Database=MobilePlatformDB;username=mdmUser;password=zaq1xsw@'
验证sql查询
sqoop eval
--connect 'jdbc:sqlserver://10.70.78.57:1433;username=mdmUser;password=zaq1xsw@;database=MobilePlatformDB' --query 'select count(1) from tbUserDevice;'
导入数据到hdfs
sqoop import
--connect 'jdbc:sqlserver://10.70.78.57:1433;username=mdmUser;password=zaq1xsw@;database=MobilePlatformDB' --table tbUserDevice --ta--fields-terminated-by '\t'
导入到hive
sqoop import
--connect 'jdbc:sqlserver://10.70.78.57:1433;username=mdmUser;password=zaq1xsw@;database=MobilePlatformDB'
--table tbUserDevice
--hive-import
--hive-database yjdd
--create-hive-table
--hive-table tbUserDevice
增量导入到hive
sqoop支持两种增量导入到hive的模式,一种是 append,即通过指定一个递增的列,
比如:
--incremental append --check-column id --last-value 0
sqoop import
--connect 'jdbc:sqlserver://10.70.78.57:1433;username=mdmUser;password=zaq1xsw@;database=MobilePlatformDB'
--table tbUserDevice
--hive-import
–incremental append
--check-column id
–last-value 0
另种是可以根据时间戳,
比如:
--incremental lastmodified --check-column time --last-value '2013-01-01 11:0:00'
就是只导入time比'2013-01-01 11:0:00'更大的数据。
sqoop import
--connect 'jdbc:sqlserver://10.70.78.57:1433;username=mdmUser;password=zaq1xsw@;database=MobilePlatformDB'
--table tbUserDevice
--hive-import
–incremental lastmodified
--check-column updatetime
–last-value xx
Sqoop 实现job增量导入:
sqoop job
--create usersevice_JOB
-- import
--connect 'jdbc:sqlserver://10.70.78.57:1433;username=mdmUser;password=zaq1xsw@;database=MobilePlatformDB'
--table tbUserDevice
--hive-import
--hive-database yjdd
--incremental append
--check-column id --last-value 0
执行job
sqoop job --exec usersevice_JOB
定时任务实现
Crontab e
*/5 * * * * sqoop job --exec usersevice_JOB