分享

sqoop、sqoop2介绍及如何使用

admin 2014-5-3 12:56:40 发表于 介绍解说 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 27 174125
问题导读:

1.sqoop经过哪些关系数据库经官方测试?
2.sqoop常用命令有哪些?
3.sqoop导数据包含哪些流程?
4.mysql-connector-java-5.1.18.jar包的作用是什么?






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 下载包

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:
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
停止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



已有(28)人评论

跳转到指定楼层
hahaxixi 发表于 2014-9-12 16:26:38
回复

使用道具 举报

haha_hyq 发表于 2014-9-25 11:39:52
请问:sqoop-1.99.3-bin-hadoop200能将hdfs数据导出到MySQL吗?

点评

只要能配置成功,sqoop是具有这个功能的  发表于 2015-5-15 12:01
回复

使用道具 举报

wubaozhou 发表于 2015-1-1 19:05:15
回复

使用道具 举报

pioneer 发表于 2015-4-15 20:01:19

问楼主一个问题,我的sqoop2服务端与客户端启动成功,但是sqoop指令不起作用:sqoop command not found,知道如何解决吗?
回复

使用道具 举报

admin 发表于 2015-4-15 21:05:08
pioneer 发表于 2015-4-15 20:01
问楼主一个问题,我的sqoop2服务端与客户端启动成功,但是sqoop指令不起作用:sqoop command not found,知道 ...

没有配置环境变量
回复

使用道具 举报

pioneer 发表于 2015-4-15 21:12:02
admin 发表于 2015-4-15 21:05
没有配置环境变量

这个环境变量已经设置过了,而且服务器以及客户端都是在环境变量设置好的情况下配置的:
hadoop@master:~$ echo $PATH
/usr/jdk1.8.0_25/bin:/usr/jdk1.8.0_25/jre/bin:/usr/apache-ant-1.9.4/bin:/usr/hbase/bin:/usr/apache-maven-3.2.5/bin:/usr/hive-0.14.0/bin:/usr/hadoop/bin:/usr/hadoop/sbin:/usr/zookeeper/bin:/usr/apache-maven/bin:/usr/flume/bin:/usr/pig/bin:/usr/groovy/bin:/usr/mahout-distribution-0.9/bin:/usr/sqoop-1.99.4-bin-hadoop200/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
hadoop@master:~$

我觉得环境变量没问题的.
sqoop:000> show version --all
client version:
  Sqoop 1.99.4 source revision 2475a76ef70a0660f381c75c3d47d0d24f00b57f
  Compiled by gshapira on Sun Nov 16 02:50:00 PST 2014
server version:
  Sqoop 1.99.4 source revision 2475a76ef70a0660f381c75c3d47d0d24f00b57f
  Compiled by gshapira on Sun Nov 16 02:50:00 PST 2014
API versions:
  [v1]
sqoop:000> ...
hadoop@master:~$ sqoop
sqoop: command not found

回复

使用道具 举报

hahaha9 发表于 2015-5-14 21:46:04
pioneer 发表于 2015-4-15 21:12
这个环境变量已经设置过了,而且服务器以及客户端都是在环境变量设置好的情况下配置的:
hadoop@master:~$ ...

兄弟, 那个sqoop 命令是sqoop1用的,现在是sqoop2,那个命令不用了

回复

使用道具 举报

凌飞羽 发表于 2015-5-15 07:37:47
正用到,收藏学习,谢谢
回复

使用道具 举报

ht_zhangxd 发表于 2015-5-27 09:28:09
请问一下sqoop2怎么使用sql语句去过滤数据再导入到hdfs
回复

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条