zoukankan      html  css  js  c++  java
  • 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任务为单位。

  • 相关阅读:
    textarea中的空格与换行
    js判断微信内置浏览器
    关于express4不再支持body-parser
    html5 geolocation API
    屏幕密度与分辨率
    nodebeginer
    手机浏览器下IScroll中click事件
    iphone手机上的click和touch
    AngularJS学习笔记一
    不用bootstrap实现居中适应
  • 原文地址:https://www.cnblogs.com/ahu-lichang/p/6685861.html
Copyright © 2011-2022 走看看