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,表示导入完成之后清空那个临时表。

 

posted on 2016-03-14 00:22  Mr.He多多指教  阅读(473)  评论(0编辑  收藏  举报