问题导读:
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
|