赞
踩
Sqoop本质上是一块使用MR程序进行数据迁移的工具;
公司使用的是1.4.6;
hcatalog是hive对外的一个统一存储格式的接口,使用hcatalog对接到hive的数据不需要担心数据在hive中的存储格式和存储位置,注意版本为1.4.6(sqoop在1.4.4之后的版本集成了Hcatalog);
sqoop import #1、指定关系数据库的jdbc --connect jdbc:mysql://127.0.0.1:3306/test #指定mysql数据库test --username you_user_name --passwarod 123456 #2、指定mysql表 --table table_name --driver com.mysql.jdbc.Driver --query “select a” #3、创建hive表,如果表已存在,必须去掉 --create-hcatalog-table --hcatalog-storage-stanza 'stored as orc tbproperties("orc.compress"="gzip")' #4、指定导入数据的hive表 --hcatalog-database test --hcatalog-table table_name #5、指定导入数据的hive表分区 - key和value必须同时存在,相当于静态分区 --hcatalog-partition-keys year,month,day --hcatalog-partition-values 2021,12,9 #6、以自增长键作增量导入 --incremental append --check-column order_id --last-values 0 #6、以时间戳抽增量导入 --increatmental lastmodified --check-column time --last-value "2014-11-09 21:00:00" #7、指定mysql数据为空值时用什么符号存储 --null-string '\\N' --null-not-string '\\N' #8、设置无视字符串中的分隔符 --hive-drop-import-delims #9、并行导入需要指定分片字段,尽量指定int型 --split-by key -m 3
步骤:
①将RDBMS中的数据增量导入到HDFS上的临时目录下;
②将HDFS上临时目录下的文件剪切到Hive表相应的分区目录下;
注意点:
导入时,若不使用临时目录,直接导入到相应的HIVE分区目录下,是不可以的,分区目录下的值不会自动装载到表中(注意:可以直接导入到hive非分区目录下,可以感知到,是可以成功);
(1)将mysql数据通过sqoop导入到HDFS中
sqoop job --create bap_us_order --import\ #1、指定mysql连接 --connect jdbc:mysql://master:3306/....\ #2、指定mysql的jdbc --driver com.mysql.jdbc.Driver \ --username root \ #指定密码文件 --passward-file hdfs:///password.file \ --table uesr_order \ #3、指定导入的临时目录 --target-dir /mtbap/ods_tmp_ods_user_order/ \ #4、指定字段之间的分隔符 --fields-terminated-by '\001' \ #5、指定增量导入方式 --check-columnn order_id \ --increamental append \ --last-value 0 \ #上述语句是创建了一个增量导入的job,带到运行时,只需要执行job即可; sqoop job --exec bap_us_order
(2)load data statments,将临时目录下的数据into到特定分区表对应的目录下
args=$1
dt=
if[${#args} == 0]
then
dt=`data-d "1days ago" "+%Y%m%d"1`
else
dt=$1
fi
echo "run hive load data"
hive --database databse_name -e "load data inpath '/mtbap/ods_tmp_ods_user_order/' into table ods_tmp_ods_user_order partition(dt=$(dt))"
echo "run hive load data end"
介绍(前提:要从hive表中将数据导出到rdbms中);
①待导出的源是hive表所对应的hdfs上特定的目录,该目录下存储有hive表最终保存的数据;
②可以实现的条件:上述hive表对应的hdfs上的目录下的文件格式是textfile(普通的文本文件)
真实生产环境下此情形比较少,一般都是压缩后的数据,为了节省hdfs的空间
③不能实现的场合:上述hive表对应的hdfs上的目录下的文件格式不是textfile,是压缩之后的文件,如:orcFile,或者是sequenceFile,直接导出会报错;
此种情形下,只能选用hive hcatalog导出方式实现;
(1)hive hcatalog导出方式,hive表存储格式不是textfile格式
sqoop export \ #1、指定hive表中数据 --hcatalog-database temp \ --hcatalog-table js_pianyuan_orc \ --hcatalog-partition-keys curdate \ #2、指定JDBC连接及mysql导出表 --connect jdbc:mysql://ip:3306/test \ --username username \ --password passwd \ --table js_pianyuan #3、maptask的并行度 --m 10 \ #4、设置空值转义,否则会报错 --input-null-string '\\N' --input-null-non-string '\\N' #5、设置更新的方式导出数据(key不存在时允许新增) --update-key id --update-mode allowinsert #导出时默认使用4个maptask任务
sqoop import \
--connect \
--username \
--passward \
--target-dir \
--delete-target-dir \ #可选,删除目录
--num-mappers \ #指定并行度
--filds-terminated-by \ #指定分隔符
--query "$2" and $CONDITIONS;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。