您的位置:首页 > 运维架构

sqoop

2016-03-14 00:22 351 查看
SQOOP是用于对数据进行导入导出的。(在它的解压缩文件里面也有一个doc文件夹,里面也有官方文档,进入index.html)
(1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中
(2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中
安装SQOOP
export SQOOP_HOME=/usr/local/SQOOP
export ...$SQOOP_HOME/bin:.....
sqoop.env.sh  需要改一下 项目最后一个视频50分钟有说到
使用SQOOP
输入命令sqoop

注意:
要把数据从HDFS中导入到mysql中,就意味着需要连接mysql,并对其进行操作,所以必不可少的需要驱动,所以需要把mysql的驱动
放到...../sqoop/lib目录下。这一点和HIVE一样

1.把数据从mysql导入到hdfs(默认是/user/<username>)中                          表名
sqoop import --connect jdbc:mysql://hadoop0:3306/hive  --username root --password admin --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import
sqoop import --connect jdbc:mysql://hadoop0:3306/hive  --username root --password admin --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import  --check-column 'TBL_ID' --incremental append --last-value 6

--null-string '**' 表示,对于空的单元格用什么表示,这里是用**表示。  不能用--表示。会报错,因为--是特有字符
-m 1:表示启动几个map来执行,默认4个,这和最后产生几个文件也有关系,应该是启动一个map,产生一个文件。
--append 如果该命令重复执行,会报错==>说该文件已经在目录中存在了,但是加上--append之后,就可以重复执行了,并且每次执行会产生新的文件。
--hive-import:表示导入到hive中。
--check-column 'TBL_ID':表示增量导入的时候,需要验证的列,也就是说,当这一列有新增的时候,我们才导入。
--incremental append:表示,增量导入的时候,出现增量的时候这么处理, 这里的append表示出现增量,用增加的方式处理。
--last-value 6:表示上一次的最后一个值是到几。
导入的增量部分在一个新的文件中(不知道可不可以修改)。

2.把数据从hdfs导出到mysql中  (导出的时候,需要按照目录导出,不能按照文件导出 /dis代表的就是一个目录,不能写为/ids/id)
表名
sqoop export --connect jdbc:mysql://hadoop0:3306/hive  --username root --password admin --table ids --fields-terminated-by '\t' --export-dir '/ids'
--export-dir '/ids':表示要被导出的目录
3.设置为作业,运行作业(每次都输入这个命令太麻烦,所以把这个命令做成一个job,job --create myjob,其中myjob是名字,可以自己起)
sqoop job --create myjob -- import --connect jdbc:mysql://hadoop0:3306/hive  --username root --password admin --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import
sqoop job --list  查看都有哪些job
sqoop job --exec myjob 执行job

如何让job自动运行(就是想执行的时候不输密码。)
在配置文件目录下,有一个sqoop-site.xml 可以进行设置
需要把原来的脚本删掉才可以,否则不生效 sqoop job --delete myjob,然后再创建job

4. 导入导出的事务是以Mapper任务为单位。
如果我就想启动4个事务,这么保证我的事务呢,可以加个--staging-table,这个意思就是,我在导入的时候,4个事务都导入到一个临时表中,然后再把临时表导入到hdfs,
--clear-staging-table,表示导入完成之后清空那个临时表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: