Sqooop- 使用Sqoop进行数据的导入导出

Posted RZ_Lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sqooop- 使用Sqoop进行数据的导入导出相关的知识,希望对你有一定的参考价值。

Sqoop是Apache旗下的一个开源框架,专门用来做数据的导入和导出。

官网:https://sqoop.apache.org/

Sqoop的安装非常简单,只需要把下载下来的tar包解压设置两个环境变量就可以了

1.安装部署

  下载版本:sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

  官网:http://mirror.bit.edu.cn/apache/sqoop/1.4.6/

1.1把tar包解压到/usr/sqoop 

tar -xvzf   sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz  /usr/    //解压到指定路径

mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz     sqoop      //重命名,可选可不选

1.2设置环境变量

  把Sqoop添加到PATH文件, vim /etc/profile ,设置

export SQOOP_HOME=/usr/sqoop
export PATH=$PATH:$SQOOP_HOME/bin

 

source /etc/profile

  因为Sqoop需要用到hadoop下面的jar包进行操作,所以需要设置HADOOP_COMMON_HOME 来指明hadoop安装在那个目录下。

[root@srv01 ~]# export HADOOP_COMMON_HOME=/usr/hadoop    //指明hadoop安装路径
[root@srv01 ~]# export HADOOP_MAPRED_HOME=/usr/hadoop  //因为hadoop最终把它的作业转换成mapreduce进行提交执行,实际上和hadoop home目录相同

  也可以用另一种方式,配置sqoop/conf目录下的sqoop-env.sh

vim   sqoop-env.sh

 把jdbc驱动包放到sqoop的lib目录下,如果里面有就不需要加(里面有个mysql驱动包)。

1.3验证安装完成

输入  sqoop help  ,如下面所示,表示安装正常,另,没有设置PATH变量的需要到sqoop/bin执行  ./sqoop help 

[root@srv01 ~]# sqoop help
Warning: /usr/sqoop/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /usr/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
17/08/12 03:49:43 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
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
  import-mainframe   Import datasets from a mainframe server 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.

 

2.使用Sqoop进行数据迁移

下面通过6个例子展示使用Sqoop进行数据迁移

2.1使用Sqoop导入MySQL数据到HDFS

[root@srv01 ~]# sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root --table user --columns \'uid,uname\' -m 1 -target-dir \'/sqoop/user\'; //-m 指定map进程数,-target-dir指定存放目录

2.2使用Sqoop导入MySQL数据到Hive中

[root@srv01 ~]# sqoop import --hive-import --connect jdbc:mysql://localhost:3306/test --username root --password root --table user --columns \'uid,uname\' -m 1 

2.3使用Sqoop导入MySQL数据到Hive中,并且指定表名

[root@srv01 ~]# sqoop import --hive-import --connect jdbc:mysql://localhost:3306/test --username root --password root --table user --columns \'uid,uname\' -m 1 --hive-table user1;    //如果hive中没有这张表,则创建这张表保存对应数据

2.4使用Sqoop导入MySQL数据到Hive中,并使用where条件

[root@srv01 ~]# sqoop import --hive-import --connect jdbc:mysql://localhost:3306/test --username root --password root --table user --columns \'uid,uname\' -m 1 --hive-table user2 where uid=10;

2.5使用Sqoop导入MySQL数据到Hive中,并使用查询语句

[root@srv01 ~]# sqoop import --hive-import --connect jdbc:mysql://localhost:3306/test --username root --password root -m 1 --hive-table user6 --query \'select * from user where uid<10 and $conditions\' --target-dir /sqoop/user5;
//
and $conditions 必须加在查询语句中,不加报错

2.6使用Sqoop将Hive中的数据导出到MySQL中

[root@srv01 ~]# sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root -m 1 --table user5 --export-dir /sqoop/user5  //两张表的列的个数和类型必须相同

 

 

 使用Sqoop测试与数据库的联通性

sqoop list-databases  --connect jdbc:mysql://localhost:3308/ --username guesttest --password guesttest

 

 注意:在使用sqoop的时候用jdbc连接数据库的时候尽量不要使用localhost或127.0.0.1,应该用主机的IP,为什么呢?因为在使用sqoop底层是会调用mapreduce去做数据的迁移,采用localhost时,resourcemanager把task分到每个worker的时候,他们的jdbc也是连接localhost或127.0.0.1,是无法与远程的数据通信的,这时候跑mapreduce就会报错。

以上是关于Sqooop- 使用Sqoop进行数据的导入导出的主要内容,如果未能解决你的问题,请参考以下文章

sqoop工具介绍(hdfs与关系型数据库进行数据导入导出)

Sqoop_具体总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入导出

sqoop安装及使用

Sqoop基础

Sqoop -- 用于Hadoop与关系数据库间数据导入导出工作的工具

利用sqoop完成数据导入导出