zoukankan      html  css  js  c++  java
  • Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递

     
    Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递。
    Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。
    Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

    1  导入导出数据库
       1)列出mysql数据库中的所有数据库命令
      #  sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
       
       2)连接mysql并列出数据库中的表命令
    # sqoop list-tables --connect jdbc:mysql://localhost:3306/test --username root --password 123456
       命令中的test为mysql数据库中的test数据库名称  username password分别为mysql数据库的用户密码
       
      3)将关系型数据的表结构复制到hive中
    sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table username --username root --password 123456 --hive-table test
    其中 --table username为mysql中的数据库test中的表   --hive-table test 为hive中新建的表名称
       
       4)从关系数据库导入文件到hive中
    sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password mysql-password --table t1 --hive-import

       5)将hive中的表数据导入到mysql中

    ./sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password admin --table uv_info --export-dir /user/hive/warehouse/uv/dt=2011-08-03

    6)上传数据到hadoop中

    sqoop import --connect jdbc:mysql://10.2.136.24:3306/test --username root  --table aa -m 1

    -----------------------------------------------------------

    运行环境  centos 5.6   hadoop  hive
    sqoop是让hadoop技术支持的clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具


    在使用过程中可能遇到的问题:

    • sqoop依赖zookeeper,所以必须配置ZOOKEEPER_HOME到环境变量中。
    • sqoop-1.2.0-CDH3B4依赖hadoop-core-0.20.2-CDH3B4.jar,所以你需要下载hadoop-0.20.2-CDH3B4.tar.gz,解压缩后将hadoop-0.20.2-CDH3B4/hadoop-core-0.20.2-CDH3B4.jar复制到sqoop-1.2.0-CDH3B4/lib中。

    1  首先安装sqoop,如果你使用的是clouder分发版的话就非常简单  
       # yum install sqoop
      如果用官方版本的话 
       # cd /etc/yum.repos.d
       # wget http://archive.cloudera.com/redhat/cdh/cloudera-cdh3.repo
       # yum -y install sqoop
       sqoop就会安装完成
    2  使用sqoop
       首先将mysql-connector-java-5.1.16-bin.jar文件复制到/usr/lib/sqoop/lib文件夹下
       
    3  导入导出数据库
       1)列出mysql数据库中的所有数据库命令
      #  sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
       
       2)连接mysql并列出数据库中的表命令
       # sqoop list-tables --connect jdbc:mysql://localhost:3306/test --username root --password 123456
       命令中的test为mysql数据库中的test数据库名称  username password分别为mysql数据库的用户密码
       
       3)将关系型数据的表结构复制到hive中
     sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table username --username root --password 123456 --hive-table test
    其中 --table username为mysql中的数据库test中的表   --hive-table test 为hive中新建的表名称
       
       4)从关系数据库导入文件到hive中
    sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password mysql-password --table t1 --hive-import

       5)将hive中的表数据导入到mysql中

    ./sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password admin --table uv_info --export-dir /user/hive/warehouse/uv/dt=2011-08-03

    如果报错
    11/08/05 10:51:22 INFO mapred.JobClient: Running job: job_201108051007_0010  
    11/08/05 10:51:23 INFO mapred.JobClient:  map 0% reduce 0%  
    11/08/05 10:51:36 INFO mapred.JobClient: Task Id : attempt_201108051007_0010_m_000000_0, Status : FAILED 
    java.util.NoSuchElementException  
            at java.util.AbstractList$Itr.next(AbstractList.java:350)  
            at uv_info.__loadFromFields(uv_info.java:194)  
            at uv_info.parse(uv_info.java:143)  
            at com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:79) 
            at com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:38) 
            at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)  
            at com.cloudera.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:187) 
            at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:647)  
            at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)  
            at org.apache.hadoop.mapred.Child$4.run(Child.java:270)  
            at java.security.AccessController.doPrivileged(Native Method)  
            at javax.security.auth.Subject.doAs(Subject.java:396)  
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127) 
            at org.apache.hadoop.mapred.Child.main(Child.java:264)  
    此错误的原因为sqoop解析文件的字段与MySql数据库的表的字段对应不上造成的。因此需要在执行的时候给sqoop增加参数,告诉sqoop文件的分隔符,使它能够正确的解析文件字段。

    hive默认的字段分隔符为'01'
    ./sqoop export --connect jdbc:mysql://localhost:3306/datacenter --username root --password admin --table uv_info --export-dir /user/hive/warehouse/uv/dt=2011-08-03 --input-fields-terminated-by ' '

  • 相关阅读:
    96. 不同的二叉搜索树
    95. 不同的二叉搜索树 II
    94. 二叉树的中序遍历
    93. 复原IP地址
    python-007(用户登录(三次机会重试))
    python-006求1-2+3-4+5.....99的所有数的和
    python006(求1-2+3-4+5.....99的所有数的和)
    python-005(1-100奇数和偶数)
    python-004(while循环)
    python-003(if...elif...else)
  • 原文地址:https://www.cnblogs.com/fx2008/p/3591119.html
Copyright © 2011-2022 走看看