您的足迹:首页 > Sqoop >sqoop、sqoop2介绍及如何使用

sqoop、sqoop2介绍及如何使用

1.sqoop是什么

让hadoop技术支持的clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具


2.sqoop特点

Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS。

sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。

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

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

Database            version             --direct support              connect string matches 

HSQLDB              1.8.0+              No                                     jdbc:hsqldb:*// 

MySQL                 5.0+                Yes                                    jdbc:mysql:// 

Oracle                 10.2.0+             No                                    jdbc:oracle:*// 

PostgreSQL          8.3+                Yes                              (import only) jdbc:postgresql:// 

较老的版本有可能也被支持,但未经过测试。 

出于性能考虑,sqoop提供不同于JDBC的快速存取数据的机制,可以通过--direct使用。

3.sqoop常用命令

Common arguments,      通用参数,主要是针对关系型数据库链接的一些参数

Incremental import arguments,

Output line formatting arguments,

Input parsing arguments,Hive arguments,

HBase arguments,

Generic Hadoop command-line arguments,

4.sqoop大概流程

1.读取要导入数据的表结构,生成运行类,默认是QueryResult,打成jar包,然后提交给Hadoop

2.设置好job,主要也就是设置好的各个参数

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()

5.sqoop安装部署我使用的是在线安装  闲话少说;上代码上图  更明白

    1 下载包

wget http://mirrors.ustc.edu.cn/apache/sqoop/1.4.4/sqoop-1.4.4.bin__hadoop-1.0.0.tar.gz

mv sqoop-1.4.4.bin__hadoop-1.0.0 sqoop-1.4.4

cd sqoop-1.4.4  格式列表如下图

   2 配置环境变量

export HADOOP_COMMON_HOME=/home/szy/hadoop-1.2.1

export HADOOP_MAPRED_HOME=/home/szy/hadoop-1.2.1

export PATH=$PATH:/home/szy/sqoop-1.4.4/bin

export HBASE_HOME=/home/szy/hbase-0.94.12

source /etc/profile

root@host001:/home/szy/sqoop-1.4.4/bin# sqoop help

将JDBC驱动mysql-connector-java-5.1.18.jar拷贝到/home/szy/sqoop-1.4.4/lib

这样基本就算成功了 下面你可以执行一下命令 测试一下就好

sqoop list-databases --connect jdbc:mysql://host001 --username root --password szy

sqoop list-tables --connect jdbc:mysql://host001/mysql --username root --password szy

sqoop import --connect jdbc:mysql://host001/test --username root --password szy --table person

sqoop import --connect jdbc:mysql://host001/test --username root --password szy --table person -m 1

sqoop import --connect jdbc:mysql://host001/test --username root --password szy --table person --direct -m 1

sqoop import-all-tables --connect jdbc:mysql://host001/test --username root --password szy  --direct -m 1

sqoop export --connect jdbc:mysql://host001/test --username root --password szy --table person --export-dir person

sqoop export --connect jdbc:mysql://host001/test --username root --password szy --table animal --export-dir animal

Sqoop2:

wget http://mirror.bit.edu.cn/apache/sqoop/1.99.3/sqoop-1.99.3-bin-hadoop100.tar.gz

tar -xzvf sqoop-1.99.3-bin-hadoop100.tar.gz

mv sqoop-1.99.3-bin-hadoop100 sqoop-1.99.3

cd sqoop-1.99.3

sudo apt-get install zip

bin/addtowar.sh -hadoop-version 1.2.1 -hadoop-path /home/szy/hadoop-1.2.1

bin/addtowar.sh -jars /home/szy/mysql-connector-java-5.1.18.jar

vi server/conf/sqoop.properties

修改org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/etc/hadoop/conf/为

org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/home/szy/hadoop-1.2.1/conf/

启动Sqoop 2 server:

bin/sqoop.sh server start

http://host001:12000/sqoop/

停止Sqoop 2 server:

bin/sqoop.sh server stop

客户端连接Sqoop 2 server:

客户端直接解压即可运行

MySQL准备数据库和表:

create database test;
create table history (userId int, command varchar(20));
insert into history values(1, 'ls');insert into history values(1, 'dir');
insert into history values(2, 'cat');insert into history values(5, 'vi');

交互模式:

bin/sqoop.sh client

sqoop:000> set server --host host001 --port 12000 --webapp sqoop

sqoop:000> show version --all

sqoop:000> show connector --all

sqoop:000>create connection --cid 1

Name: mysql

JDBC Driver Class: com.mysql.jdbc.Driver

JDBC Connection String:

jdbc:mysql://host001:3306/test?useUnicode=true&characterEncoding=UTF-8&createDatabaseIfNotExist=true&autoReconnect=true

Username: root

Password: ***

entry#回车

Max connections:100

sqoop:000>create job --xid 1 --type import

Name:ImportHistory

Schema name:

Table name: history

Table SQL statement:

Table column names:

Partition column name:userId

Boundary query:

Choose:0

Choose: 0

Output directory: output-sqoop2-history

Extractors:

Loaders:

sqoop:000> submission start --jid 1

sqoop:000> submission status --jid 1

sqoop:000> submission stop --jid 1

批处理模式:

sqoop.sh client /home/szy/script.sqoop

vi /home/ysc/script.sqoop

输入:

     #指定服务器信息

     set server --host host001 --port 12000 --webapp sqoop

     #执行JOB

     submission start --jid 1

本博客所有文章如无特别注明均为原创。作者:数据为王复制或转载请以超链接形式注明转自 数据为王
原文地址《sqoop、sqoop2介绍及如何使用

相关推荐


  • blogger

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)