传统方式安装sqoop很简单,直接到apache官网下载安装包,解压就可以使用,安装包可以到任意apache的镜像获取,比如国内这个北理工的镜像:http://mirror.bit.edu.cn/apache/

不过我们现在这个环境使用了较旧的hadoop 0.20.2版本,不能用传统方式安装,因为据说目前现行的sqoop均不支持hadoop 0.20.2官方版本,怎么办呢,要么就升级hadoop,要么就得想另外的方式喽。

升级hadoop的工作量还是比较大的,尤其这半年来进行各种配置,关联的组件众多,咱们不能为了sqoop就颠覆掉整个体系呀,还是得先想想别的办法。

通过tigerfish老师的课程得知,确实有其它方式来处理。采用cdh发行版就好了,下载地址:

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

    # tar xvfz hadoop-0.20.2-CDH3B4.tar.gz 

    # tar xvfz sqoop-1.2.0-CDH3B4.tar.gz -C /usr/local/

    sqoop-1.2.0-CDH3B4依赖于hadoop-core-0.20.2-CDH3B4.jar,复制文件到适当目录:

    # 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目录下。

    # 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用户:

    # chown grid:grid /usr/local/sqoop-1.2.0-CDH3B4 -R

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

    export SQOOP_HOME=/usr/local/sqoop-1.2.0-CDH3B4

    export PATH=${SQOOP_HOME}/bin:$PATH

以下操作均在grid用户下执行。

编辑配置文件:

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

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

    #if [ ! -d "${ZOOKEEPER_HOME}" ]; then

    #  echo "Error: $ZOOKEEPER_HOME does not exist!"

    #  echo ¨Please set $ZOOKEEPER_HOME to the root of your ZooKeeper installation.¨

    #  exit 1

    #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

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

    [grid@hdnode3 ~]$ hadoop dfs -cat /user/grid/ld_sql/part-m-00000

    1000002,胡十,上海,hushi@5ienet.com

    1000003,胡百,广州,hubai@5ienet.com

    1000004,胡千,深圳,huqian@5ienet.com

    1000055,胡万,杭州,huwan@5ienet.com

经过对比,文件与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获取帮助信息,了解相关参数及调用方式。