sqoop安装文档

1.Sqoop介绍

概述

Hadoop的数据传输工具sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库、数据仓库、NoSql系统中传递数据。通过sqoop,我们可以方便的将数据从关系数据库导入到HDFS、Hbase、Hive,或者将数据从HDFS导出到关系数据库。

sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。Sqoop集成了工作流程协调的Apache Oozie,定义安排和自动导入/导出任务。

sqoop主要通过JDBC和关系数据库进行交互。理论上支持JDBC的database都可以使用sqoop和hdfs进行数据交互。

但是,只有一小部分经过sqoop官方测试,如下:

Databaseversion–direct supportconnect string
HSQLDB1.8.0+Nojdbc:hsqldb:*//
MySQL5.0+Yesjdbc:mysql://
Oracle10.2.0+Nojdbc:oracle:*//
PostgreSQL8.3+Yesjdbc:postgresql://

较老的版本有可能也被支持,但未经过测试。 出于性能考虑,sqoop提供不同于JDBC的快速存取数据的机制,可以通过–direct使用。

sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map任务来传输数据,map负责数据的加载、转换,存储到HDFS、Hbase或者Hive中。

sqoop02

Sqoop1架构

  • 数据大概流程
  • 1.读取要导入数据的表结构,生成运行类,默认是QueryResult,打成jar包,然后提交给Hadoop
  • 2.设置好job,主要也就是设置好sqoop的各个参数
  • 3.这里就由Hadoop来执行MapReduce来执行Import命令了,

    1)首先要对数据进行切分,也就是DataSplit

    DataDrivenDBInputFormat.getSplits(JobContext job)

2)切分好范围后,写入范围,以便读取

     DataDrivenDBInputFormat.write(DataOutput output) 这里是lowerBoundQuery and  upperBoundQuery

3)读取以上2)写入的范围

    DataDrivenDBInputFormat.readFields(DataInput input)

4)然后创建RecordReader从数据库中读取数据

DataDrivenDBInputFormat.createRecordReader(InputSplit split,TaskAttemptContext context)

5)创建Map

TextImportMapper.setup(Context context)

6)RecordReader一行一行从关系型数据库中读取数据,设置好Map的Key和Value,交给Map

DBRecordReader.nextKeyValue()

7)运行map

TextImportMapper.map(LongWritable key, SqoopRecord val, Context context)
最后生成的Key是行数据,由QueryResult生成,Value是NullWritable.get()

数据导入图例
sqoop03
数据导出图例
sqoop04

2.Sqoop安装


参考:
http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.5-cdh5.3.6/SqoopUserGuide.html
https://cwiki.apache.org/confluence/display/SQOOP/Home
  • Sqoop安装步骤

    1 下载

    2 解压

    3 copy mysql的驱动类到lib文件夹中

      cp ~/bigdater/hive-0.13.1-cdh5.3.6/lib/mysql-connector-java-5.1.31.jar ./lib/
    或者
    cp ~/bigdater/softs/mysql-connector-java-5.1.31.jar ./lib/
    

    4 copy hadoop的hadoop-common-2.5.0-cdh5.3.6.jar hadoop-hdfs-2.5.0-cdh5.3.6.jar hadoop-mapreduce-client-core-2.5.0-cdh5.3.6.jar三个jar到lib文件夹中。

      cp ~/bigdater/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/hadoop-common-2.5.0-cdh5.3.6.jar ./lib/
    cp ~/bigdater/hadoop-2.5.0-cdh5.3.6/share/hadoop/hdfs/hadoop-hdfs-2.5.0-cdh5.3.6.jar ./lib/
    cp ~/bigdater/hadoop-2.5.0-cdh5.3.6/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.5.0-cdh5.3.6.jar ./lib/
    

    5 配置sqoop-env.sh文件内容,

      vim conf/sqoop-env.sh
    内容如下:
    export HADOOP_COMMON_HOME=/home/hadoop/bigdater/hadoop-2.5.0-cdh5.3.6
    export HADOOP_MAPRED_HOME=/home/hadoop/bigdater/hadoop-2.5.0-cdh5.3.6
    export HBASE_HOME=/home/hadoop/bigdater/hbase-0.98.6-cdh5.3.6
    export HIVE_HOME=/home/hadoop/bigdater/hive-0.13.1-cdh5.3.6
    

    6 添加sqoop常量导用户环境变量中去

      vim ~/.bash_profile
    在最后添加内容(如下):
    \###### sqoop
    export SQOOP_HOME=/home/hadoop/bigdater/sqoop-1.4.5-cdh5.3.6
    export PATH=$PATH:$SQOOP_HOME/bin
    退出保存后执行命令source ~/.bash_profile
    

    7 测试是否安装成功

    sqoop version

3.Sqoop工具import和export使用详解

Sqoop可以在HDFS/Hive/Hbase和关系型数据库之间进行数据的导入导出,其中主要使用了import和export这两个工具。

这两个工具非常强大,提供了很多选项帮助我们完成数据的迁移和同步。比如,下面两个潜在的需求:业务数据存放在关系数据库中,数据量达到一定规模后需要对其进行分析或同统计,单纯使用关系数据库可能会成为瓶颈,这时可以将数据从业务数据库数据导入(import)到Hadoop平台进行离线分析。

对大规模的数据在Hadoop平台上进行分析以后,可能需要将结果同步到关系数据库中作为业务的辅助数据,这时候需要将Hadoop平台分析后的数据导出(export)到关系数据库。

这里,我们介绍Sqoop完成上述基本应用场景所使用的import和export工具,通过一些简单的例子来说明这两个工具是如何做到的

  • 1.工具通用选项
    import和export工具有些通用的选项,如下表所示:
    选项 含义说明
选项含义说明
–connect 指定JDBC连接字符串
–connection-manager 指定要使用的连接管理器类
–driver 指定要使用的JDBC驱动类
–hadoop-mapred-home 指定$HADOOP_MAPRED_HOME路径
–help 打印用法帮助信息
–password-file 设置用于存放认证的密码信息文件的路径
-P 从控制台读取输入的密码
–password 设置认证密码
–username 设置认证用户名
–verbose 打印详细的运行信息
–connection-param-file 可选,指定存储数据库连接参数的属性文件
  • 2.数据导入工具import

import工具,是将HDFS平台外部的结构化存储系统中的数据导入到Hadoop平台,便于后续分析。我们先看一下import工具的基本选项及其含义,如下表所示:

选项 含义说明

选项含义说明
–append将数据追加到HDFS上一个已存在的数据集上
–as-avrodatafile 将数据导入到Avro数据文件
–as-sequencefile 将数据导入到SequenceFile
–as-textfile 将数据导入到普通文本文件(默认)
–boundary-query 边界查询,用于创建分片(InputSplit)
–columns

4.Sqoop命令案例介绍

  • 1、import案列

案例1:将mysql表test中的数据导入hive的hivetest表,hive的hivetest表不存在。

sqoop import –connect jdbc:mysql://hh:3306/test –username hive –password hive –table test –hive-table hivetest –hive-import -m 1

案例2:在案例1的基础上,分别进行overwrite(覆盖)导入和into(直接加入)导入。

into: 命令同案例1

overwrite:
sqoop import –connect jdbc:mysql://hh:3306/test –username hive –password hive –table test –hive-table hivetest –hive-import -m 1 –hive-overwrite

案例3:在案例2的基础上,通过增加mysql的test表数据,增量导入到hive表中。

sqoop import –connect jdbc:mysql://hh:3306/test –username hive –password hive –table test –where “id>9” –hive-table hivetest –hive-import -m 1

或者

sqoop import –connect jdbc:mysql://hh:3306/test –username hive –password hive –table test –query “select id,name from test where id>9” –hive-table hivetest –hive-import -m 1

案例4:将test表中的数据导出到使用’,’分割字段的hive表(hivetest2)中。

创建表: create table hivetest2(id int,name string) row format delimited fields terminated by ‘,’;

sqoop:
sqoop import –connect jdbc:mysql://hh:3306/test –username hive –password hive –table test –hive-table hivetest2 –hive-import -m 1 –fields-terminated-by “,”

案例5:将test表的数据导入到hdfs中。

sqoop import –connect jdbc:mysql://hh:3306/test –username hive –password hive –table test –target-dir /test -m 1

案例6:在案例5的基础上,增量导入数据到hdfs中。

sqoop import –connect jdbc:mysql://hh:3306/test –username hive –password hive –table test –target-dir /test -m 1 –check-column id –incremental append –last-value 11

  • 2、export案列

案例1:将hdfs上的文件导出到关系型数据库test2表中。

sqoop export –connect jdbc:mysql://hh:3306/test –username hive –password hive –table test2 –export-dir /test

  • 案例2:将hive表(hivetest)数据导出到关系型数据库test2表中(使用insertOrUpdate方法导入)。

hivetest表只留id为1,2,3,4,5的数据,其他数据删除。

hivetest表分隔方式是’\u0001’,但是export命令默认使用’,’分隔数据

sqoop export –connect jdbc:mysql://hh:3306/test –username hive –password hive –table test2 –export-dir /hive/hivetest –input-fields-terminated-by “\01” –update-mode allowinsert –update-key id

  • 3、Phoenix导入案列

案列1:

目标将mysql中的TC_order表导入到Phoenix中
前提phoenix的phoenix表必须存在
命令sqoop import -D sqoop.hbase.insert.put.transformer.class= com.easypec.hbase.ToBytesPutTransformer -libjars /opt/shell_script/phoenix-core-4.6.0-HBase-1.0.jar, /opt/shell_script/sqoop-hbase-custom.jar –connect dbc:mysql://10.248.248.103:3306/tc?tinyInt1isBit=false –username tc_ro –password q1w2_e3r4 –table tc_order –num-mappers 15 –hbase-table TC.TC_ORDER –hbase-row-key orderId,purchaseCompanyId –column-family 0 –hbase-bulkload
说明 -D sqoop.hbase.insert.put.transformer.class 指定Hbase Put转换类. -libjars 添加Phoenix jar包, 以及自定义jar包. –hbase-bulkload 批量导入, 当数据量过大的时候, 建议使用该参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值