分享

HDFS和RDBMS交互专用工具sqoop

howtodown 2013-11-27 11:05:22 发表于 实操演练 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 13189
传统方式安装sqoop很简单,直接到apache官网下载安装包,解压就可以使用,安装包可以到任意apache的镜像获取,比如国内这个北理工的镜像:http://mirror.bit.edu.cn/apache/
不过我们现在这个环境使用了较旧的hadoop 0.20.2版本,不能用传统方式安装,因为据说目前现行的sqoop均不支持hadoop 0.20.2官方版本,怎么办呢,要么就升级hadoop,要么就得想另外的方式喽。
升级hadoop的工作量还是比较大的,尤其这半年来进行各种配置,关联的组件众多,咱们不能为了sqoop就颠覆掉整个体系呀,还是得先想想别的办法。
通过tigerfish老师的课程得知,确实有其它方式来处理。采用cdh发行版就好了,下载地址:


    1. # wget http://archive.cloudera.com/cdh/3/hadoop-0.20.2-CDH3B4.tar.gz
    2. # wget http://archive.cloudera.com/cdh/3/sqoop-1.2.0-CDH3B4.tar.gz
    复制代码



下载完成后,两个文件分别解压缩:


    1. # tar xvfz hadoop-0.20.2-CDH3B4.tar.gz  
    2. # tar xvfz sqoop-1.2.0-CDH3B4.tar.gz -C /usr/local/
    3. sqoop-1.2.0-CDH3B4依赖于hadoop-core-0.20.2-CDH3B4.jar,复制文件到适当目录:
    4.   # cp /data/software/hadoop-0.20.2-CDH3B4/hadoop-core-0.20.2-CDH3B4.jar /usr/local/sqoop-1.2.0-CDH3B4/lib/
    复制代码



要使用sqoop导入mysql数据库,那么就需要依赖mysql-connector-java的jar包(可以到mysql的官网下载:http://dev.mysql.com/downloads/connector/j/),也需要下载并将该文件也复制到lib目录下。


    1. # cp /data/software/mysql-connector-java-5.1.25/mysql-connector-java-5.1.25-bin.jar /usr/local/sqoop-1.2.0-CDH3B4/lib/
    复制代码

修改sqoop文件夹的属主为grid用户:


    1. # chown grid:grid /usr/local/sqoop-1.2.0-CDH3B4 -R
    复制代码



增加环境到grid用户,以方便我们后面的调用:

    1. export SQOOP_HOME=/usr/local/sqoop-1.2.0-CDH3B4
    2.   export PATH=${SQOOP_HOME}/bin:$PATH
    复制代码



以下操作均在grid用户下执行。
编辑配置文件:





    $ vi /usr/local/sqoop-1.2.0-CDH3B4/bin/configure-sqoop  

我们这里并没有配置zookeeper,因此将相关检查注释掉:

    1. #if [ ! -d "${ZOOKEEPER_HOME}" ]; then
    2. #  echo "Error: $ZOOKEEPER_HOME does not exist!"
    3. #  echo ¨Please set $ZOOKEEPER_HOME to the root of your ZooKeeper installation.¨
    4. #  exit 1
    5.   #fi
    复制代码

这样sqoop命令就步入可用阶段了,来看看它都能做什么吧,查看帮助:



    [grid@hdnode3 ~]$ sqoop help  
    usage: sqoop COMMAND [ARGS]

    Available commands:
    codegen            Generate code to interact with database records
    create-hive-table  Import a table definition into Hive
    eval               Evaluate a SQL statement and display the results
    export             Export an HDFS directory to a database table
    help               List available commands
    import             Import a table from a database to HDFS
    import-all-tables  Import tables from a database to HDFS
    job                Work with saved jobs
    list-databases     List available databases on a server
    list-tables        List available tables in a database
    merge              Merge results of incremental imports
    metastore          Run a standalone Sqoop metastore
    version            Display version information

      See ¨sqoop help COMMAND¨ for information on a specific command.

连接mysql导入数据的例子,将jssdb.ld_sql表对象中的数据导入到HDFS中保存:


    [grid@hdnode3 ~]$ sqoop import --connect jdbc:mysql://192.168.30.246/jssdb?user=jss_db --table ld_sql -m 1
    13/05/15 11:55:20 INFO tool.CodeGenTool: Beginning code generation
    13/05/15 11:55:21 INFO manager.MySQLManager: Executing SQL statement: SELECT t.* FROM `ld_sql` AS t LIMIT 1
    13/05/15 11:55:21 INFO manager.MySQLManager: Executing SQL statement: SELECT t.* FROM `ld_sql` AS t LIMIT 1
    13/05/15 11:55:21 INFO orm.CompilationManager: HADOOP_HOME is /usr/local/hadoop-0.20.2/bin/..
    13/05/15 11:55:21 INFO orm.CompilationManager: Found hadoop core jar at: /usr/local/hadoop-0.20.2/bin/../hadoop-0.20.2-core.jar
    13/05/15 11:55:22 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-grid/compile/172496b4e4ce5b452d6127e97f2c00e6/ld_sql.jar
    13/05/15 11:55:22 WARN manager.MySQLManager: It looks like you are importing from mysql.
    13/05/15 11:55:22 WARN manager.MySQLManager: This transfer can be faster! Use the --direct
    13/05/15 11:55:22 WARN manager.MySQLManager: option to exercise a MySQL-specific fast path.
    13/05/15 11:55:22 INFO manager.MySQLManager: Setting zero DATETIME behavior. to convertToNull (mysql)
    13/05/15 11:55:22 INFO mapreduce.ImportJobBase: Beginning import of ld_sql
    13/05/15 11:55:48 INFO manager.MySQLManager: Executing SQL statement: SELECT t.* FROM `ld_sql` AS t LIMIT 1
    13/05/15 11:55:51 INFO mapred.JobClient: Running job: job_201305151155_0001
    13/05/15 11:55:52 INFO mapred.JobClient:  map 0% reduce 0%
    13/05/15 11:56:05 INFO mapred.JobClient:  map 100% reduce 0%
    13/05/15 11:56:07 INFO mapred.JobClient: Job complete: job_201305151155_0001
    13/05/15 11:56:07 INFO mapred.JobClient: Counters: 5
    13/05/15 11:56:07 INFO mapred.JobClient:   Job Counters  
    13/05/15 11:56:07 INFO mapred.JobClient:     Launched map tasks=1
    13/05/15 11:56:07 INFO mapred.JobClient:   FileSystemCounters
    13/05/15 11:56:07 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=157
    13/05/15 11:56:07 INFO mapred.JobClient:   Map-Reduce Framework
    13/05/15 11:56:07 INFO mapred.JobClient:     Map input records=4
    13/05/15 11:56:07 INFO mapred.JobClient:     Spilled Records=0
    13/05/15 11:56:07 INFO mapred.JobClient:     Map output records=4
    13/05/15 11:56:07 INFO mapreduce.ImportJobBase: Transferred 157 bytes in 18.9029 seconds (8.3056 bytes/sec)
      13/05/15 11:56:07 INFO mapreduce.ImportJobBase: Retrieved 4 records.

查看文件是否成功被创建到HDFS中:





    [grid@hdnode3 ~]$ hadoop dfs -ls ld_sql
    Found 2 items
    drwxrwxrwx   - grid supergroup          0 2013-05-15 11:55 /user/grid/ld_sql/_logs
      -rw-r--r--   3 grid supergroup        157 2013-05-15 11:55 /user/grid/ld_sql/part-m-00000

再看看文件中的内容有没有缺失:

经过对比,文件与mysql数据库中表对象数据一致,导入成功。

若要从oracle数据库导入数据,需要将ojdbc6.jar(该文件可以在$ORACLE_HOME/jdbc/lib目录中获取,或者直接到网上下载)放到$SQOOP_HOME/lib目录下。

    # cp ojdbc6.jar /usr/local/sqoop-1.2.0-CDH3B4/lib/

使用sqoop import除了能够导入到HDFS,还可以导入到Hive或HBase,具体语法可以执行sqoop help import获取帮助信息,了解相关参数及调用方式。

已有(4)人评论

跳转到指定楼层
allenswf 发表于 2015-3-24 06:22:27
谢谢楼主 点赞点赞
回复

使用道具 举报

ainubis 发表于 2015-3-29 04:39:53
O(∩_∩)O谢谢~\(≧▽≦)/~啦啦啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条