sqoop安装及简单入门

Apache Sqoop

Sqoop 是 Hadoop 和关系数据库服务器之间传送数据的一种工具。它是用来从关系数据库如: MySQL, Oracle 到 Hadoop 的HDFS,并从 Hadoop 的文件系统导出数据到关系数据库。 由 Apache 软件基金会提供。

Sqoop: “SQL 到 Hadoop 和 Hadoop 到 SQL” 。
Sqoop 工作机制是将导入或导出命令翻译成 mapreduce 程序来实现。
在翻译出的 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。

sqoop 安装

安装环境:
CentOS6.7x64(默认已安好jdk, hadoop及mysql)
sqoop版本: 1.4.6
安装步骤:

  1. 上传解压重命名

  2. 修改conf里的文件

    cp sqoop-env-template.sh sqoop-env.sh
    vi sqoop-env.sh
    #添加如下配置:
    export HADOOP_COMMON_HOME=/export/server/hadoop-2.7.4
    export HADOOP_MAPRED_HOME=/export/server/hadoop-2.7.4
    export HIVE_HOME=/export/server/hive
    
  3. 加入 mysql 的 jdbc 驱动包
    将mysql-connector-java-5.1.28.jar拷贝到sqoop的lib目录下

  4. 验证启动
    在sqoop根目录下执行:

    bin/sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 1234
    

    执行此命令会列出所有 mysql 的数据库.

sqoop的简单使用

  1. 导入mysql表数据到hdfs
    在sqoop根路径下执行如下命令,将数据库userdb中的emp表导入到hdfs的/sqoopresult路径下

    bin/sqoop import \
    --connect jdbc:mysql://localhost:3306/userdb \
    --username root \
    --password 1234 \
    --target-dir /sqoopresult \
    --table emp --m 1
    

    执行完成后查看hdfs的/sqoopresult路径下的文件

    [root@node1 sqoop]# hdfs dfs -cat /sqoopresult/part-m-00000
    1201,gopal,manager,50000,TP
    1202,manisha,Proof reader,50000,TP
    1203,khalil,php dev,30000,AC
    1204,prasanth,php dev,30000,AC
    1205,kranthi,admin,20000,TP
    

    数据和emp表中相吻合

  2. 导入mysql表数据到hive

    执行如下命令,在hive中的test1库中创建emp_add_sp表,并复制mysql中的emp_add表结构(表数据不会导入)

    bin/sqoop create-hive-table \
    --connect jdbc:mysql://localhost:3306/userdb \
    --table emp_add \
    --username root \
    --password 1234 \
    --hive-table test1.emp_add_sp
    

    然后在执行如下命令,将表数据导入到hive中的表

    bin/sqoop import \
    --connect jdbc:mysql://localhost:3306/userdb \
    --username root \
    --password 1234 \
    --table emp_add \
    --hive-table test1.emp_add_sp \
    --hive-import \
    --m 1
    

    执行完成后连接hive进行查看

    0: jdbc:hive2://node1:10000> select * from emp_add_sp;
    +----------------+-----------------+--------------------+------------------+--+
    | emp_add_sp.id  | emp_add_sp.hno  | emp_add_sp.street  | emp_add_sp.city  |
    +----------------+-----------------+--------------------+------------------+--+
    | 1201           | 288A            | vgiri              | jublee           |
    | 1202           | 108I            | aoc                | sec-bad          |
    | 1203           | 144Z            | pgutta             | hyd              |
    | 1204           | 78B             | old city           | sec-bad          |
    | 1205           | 720X            | hitec              | sec-bad          |
    +----------------+-----------------+--------------------+------------------+--+
    

    数据与mysql表中一致

  3. 导入表数据子集
    还可以使用查询语句将查询出来的表数据进行导入操作
    例如: --where 可以指定从关系数据库导入数据时的查询条件,它执行在各自的数据库服务器相应的 SQL 查询,并将结果存储在 HDFS 的目标目录

    bin/sqoop import \
    --connect jdbc:mysql://localhost:3306/userdb \
    --username root \
    --password 1234 \
    --where "city ='sec-bad'" \
    --target-dir /wherequery \
    --table emp_add \
    --m 1
    

    使用–query执行查询语句,将结果进行hdfs导入; --split-by指定字段切割; --fields-terminated-by指定分割符

    bin/sqoop import \
    --connect jdbc:mysql://localhost:3306/userdb \
    --username root \
    --password 1234 \
    --target-dir /wherequery12 \
    --query 'select id,name,deg from emp WHERE  id>1203 and $CONDITIONS' \
    --split-by id \
    --fields-terminated-by '\t' \
    --m 1
    
  4. 增量导入
    增量导入示例:

    bin/sqoop import \
    --connect jdbc:mysql://localhost:3306/sqoopdb \
    --username root \
    --password 1234 \
    --table emp --m 1 \
    --incremental append \
    --check-column id \
    --last-value 1205
    

    其中–incremental append表示是增加模式, --check-column id表示使用id字段作为检查字段; --last-value 1205表示记录上次数据导入到id=1205处
    –check-column一般选择使用自增主键
    –last-value参数可以使用变量替代,以实现自动记录

  5. 导出数据至mysql

    首先需要手动创建mysql中的目标表:

    mysql> USE userdb;
    	CREATE TABLE employee ( 
       	id INT NOT NULL PRIMARY KEY, 
       	name VARCHAR(20), 
       	deg VARCHAR(20),
       	salary INT,
       	dept VARCHAR(10));
    

    然后执行导出命令, 将hdfs的/emp_data下的文件内容导出至employee表中

    bin/sqoop export \
    --connect jdbc:mysql://localhost:3306/userdb \
    --username root \
    --password 1234 \
    --table employee \
    --export-dir /emp_data
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值