Sqoop的安装及简单使用

SQOOP是用于对数据进行导入导出的。

    (1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中
     (2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中


SQOOP的安装(在hadoop0上)
  解压缩
    tar -zxvf sqoop....
  重命名
    mv sqoop... sqoop
  设置环境变量
    vi /etc/profile
      export SQOOP_HOME=/usr/local/sqoop
      export PATH=.:$SQOOP_HOME/bin.....
  环境变量设置好了以后,执行source /etc/profile

将MySQL驱动复制到/usr/local/sqoop/lib/目录下:
    cp /usr/local/hive/lib/mysql-connector-java-5.1.10.jar /usr/local/sqoop/lib/


1.把数据从mysql导入到hdfs(默认是/user/<username>)中

sqoop                      ##sqoop命令

  import                     ##表示导入

    --connect jdbc:mysql://ip:3306/sqoop  ##告诉jdbc,连接mysql的url

    --username root                                  ##连接mysql的用户名

    --password admin                                ##连接mysql的密码

    --table mysql1                                     ##从mysql导出的表名称

    --fields-terminated-by ' '                    ##指定输出文件中的行的字段分隔符

    -m 1                                                    ##复制过程使用1个map作业

    --hive-import                                       ##把mysql表数据复制到hive空间中。如果不使用该选项,意味着复制到hdfs中

sqoop import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by ' ' -m 1 --append --hive-import


sqoop import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by ' ' --null-string '**' -m 1 --append --hive-import

--null-string '**' 表示对于null值,使用**代替。默认显示null。
--fields-terminated-by ' ' 指定输出的列分隔符
--lines-terminated-by ' ' 指定输出的行分隔符
--append 追加数据到HDFS源文件中。
-m 表示启动的Mapper任务数量。默认是4个。


sqoop import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by ' ' --null-string '**' -m 1 --append --hive-import --check-column 'TBL_ID' --incremental append --last-value 6

增量导入模式:
--check-column ‘列名’ 检查哪些列作为增加导入的依据
--incremental (append或lastmodified)其中,append是根据是否追加了指定行来判断的,lastmodified是根据值是否改变来判断的
--last-value 上次的值是多少

在表中增加一个‘TBL_ID’ 7,然后在导入,就会发现有数据在导入。


2.把数据从hdfs导出到mysql中(同一个导出操作可重复执行,会导出很多一样的数据)

sqoop

  export                          ##表示数据从hive复制到mysql中

    --connect jdbc:mysql://ip:3306/sqoop

    --username root

    --password admin

    --table mysql2                                                         ##mysql中的表,即将被导入的表名称

    --export-dir '/user/root/warehouse/mysql1'             ##hive中被导出的文件目录

    --fields-terminated-by ' '                                        ##hive中被导出的文件字段的分隔符

注意:mysql2必须存在


先在hive下创建一个空表ids(id int)---直接在GUI工具里创建即可,创建一个/ids/id(必须创建一个目录,然后将ids中的数据上传到id中,因为导出只能按照目录导出),上传到HDFS中。将HDFS中的ids到处到mysql中

hadoop fs -put /root/id /ids/id

sqoop export --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table ids --fields-terminated-by ' ' --export-dir '/ids'


3.设置为作业,运行作业
sqoop job --create myjob -- import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by ' ' --null-string '**' -m 1 --append --hive-import

查看创建的job:
sqoop job --list
执行job:(要输入密码admin,可以在sqoop-site.xml中打开保存密码的部分,就可以不用输入密码了)

sqoop job --exec myjob
删除job:
sqoop job --delete myjob

4. 导入导出的事务是以Mapper任务为单位。

原文地址:https://www.cnblogs.com/ahu-lichang/p/6685861.html