Sqoop 1.99.3安装和使用

Sqoop

Sqoop是一个开源的数据传输工具,主要用于hadoop和关系型数据库之间进行数据传递。如MySQL ,Oracle ,Postgresql等.

安装

Sqoop分client和server,server安装在hadoop集群中的某个节点上,这个节点充当要连接sqoop的入口节点,,client端不需要安装hadoop.

server端

复制sqoop的安装包到某个节点,这个节点需要安装和配置hadoop,你不需要运行hadoop的有关服务,但是这个节点必须能够充当hadoop client..比如你必须可以访问dfs

hadoop fs -ls
安装依赖 installing Dependencies

sqoop依赖于hadoop的jar包和jdbc包
TODO:[明天补充],这个是修改server/conf/catalina.preperties中的一个变量....

启动
/bin/sqoop.sh server start
常用的sqoop命令
> * 列出mysql数据库中的所有数据库
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456 
> * 连接mysql并列出test数据库中的表
sqoop list-tables --connect jdbc:mysql://localhost:3306/test --username root --password 123456
> * 将关系型数据的表结构复制到hive中,只是复制表的结构,表中的内容没有复制过去。
sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table table_name --username root --password 123456 --hive-table table_name
> * 从关系数据库导入文件到hive中
sqoop import --connect jdbc:mysql://localhost:3306/zxtest --username root --password 123456 --table table_name --hive-import --hive-table table_name -m 1
> * 将hive中的表数据导入到mysql(要导入的mysql表必须提前建好)
sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password root --table table_name --export-dir /user/hive/warehouse/xxxxxx/pdate=2014-05-03
> * 从数据库导出表的数据到HDFS上文件
sqoop import --connect jdbc:mysql://localhost:3306/test--username root --password 123456 --table table_name -m 1

补充:上边是sqoop1.4,也就是只能匹配hadoop1.x版本。网上资料非常多,不多说。
下午在公司装了sqoop1.9,对应hadoop2.x..发现apache文档简陋,并且网上也很少说到sqoop1.9的版本情况,后续补上在安装和使用遇到的问题和心得。
贴出工作中整理的sqoop1.99.3文档

Sqoop1.99.3

Sqoop介绍

  Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递。
  Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。
  Sqoop现在分为两个版本,sqoop1和sqoop2,两个版本架构完全不同,完全不兼容,公司使用的hadoop版本为hadoop2.x,但是sqoop1不支持hadoop2.x并且sqoop1的资料比较多,这里不做介绍。文档主要针对sqoop2(sqoop.1.99.3)版本。

安装

A) 下载
  wget http://mirrors.cnnic.cn/apache/sqoop/1.99.3/sqoop-1.99.3-bin-hadoop200.tar.gz
B) 安装
  tar -xvzf sqoop-1.99.gz
C) 配置
  cd sqoop-1.99.3/server/conf
  修改sqoop.engine.direcotory
  Vi sqoop.properties 
  将#org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/etc/hadoop/conf/改为
  org.apache.sqoop.submission.engine.mapreduce.configuration.directory=自己的hadoop命令路径
  修改catalina.properties配置的配置项
  common.loader=xxx.jar,xxx.jar,增加hadoop的依赖jar
  这里要注意jar包依赖冲突,如果有冲突请检查tomcat依赖的lib下的jar 和hadoop依赖的jar

服务启动

  cd /home/q/sqoop-1.99.3/bin && sudo -u flightdev ./sqoop.sh server start

服务停止

  cd /home/q/sqoop-1.99.3/bin && sudo -u flightdev ./sqoop.sh server stop

Shell交互

客户端启动

  cd /home/q/sqoop-1.99.3/bin sudo -u flightdev ./sqoop.sh client

帮助

设置sqoop服务器

set server --host l-bidb1.f.cn6

查看connection


Id=2的链接可用,链接的mysql为:jdbc:mysql://ip:port/db

查看链接详细信息

Job操作

查看job


查看job详细: show job -all

创建Job

  create job --xid 2 --type import // --xid 2 表示为使用ID=2的connection,
  --type 表示类型,,import、export 【导入、导出】
Job详细内容设置可以参考一个已有的job,不过有的参数还不清楚什么意思

一个job需要配置的信息有
[敲入create job --xid 2 --type import 后进入创建job交互状态]:
  Name: cole.zhang
  Schema name: 
  Table name: Acquisition

  Table SQL statement:
  Table column names:
  Partition column name: user
  Nulls in partition column: 
  Boundary query: 
  Output configuration
  Storage type: 
   0 : HDFS
  Choose: 0
  Output format: 
   0 : TEXT_FILE
   1 : SEQUENCE_FILE
  Choose: 0
  Compression format: 
   0 : NONE
   1 : DEFAULT
   2 : DEFLATE
   3 : GZIP
   4 : BZIP2
   5 : LZO
   6 : LZ4
   7 : SNAPPY
  Choose: 1
  Output directory: cole.zhang/test

修改

  Update job --jid 2

启动job

  Start job --jid 2

运行状态

  Status job --jid 2

停止

  Stop job --jid 2
  

增量导出

  修改源码中 org.apache.sqoop.shell.utils.FormFiller中对Boundary query的size控制,默认大小为50
  * 初步调研数据库中的表要符合以下条件才能使用增量导出:
  表中有类型为Int或bigint的主键
  必须有日期字段
  2. 配置Job信息:
  Name: job的名字
  Schema name: 
  Table name:要全量导出一张表,请填写表名,table name 和 table sql statement不能同时配置
  Table SQL statement:如果填写格式必须为 select xxx from table_name where ${CONDITIONS}
  Table column names: 
  Partition column name: 使用哪个字段来填充过滤条件 userid
  Nulls in partition column:
  Boundary query: 这里要写一个查询语句,返回值需为整形,sqoop运行job时,会自动填充${CONDITIONS} 这个占位符 如:select 0,10 from table,那填充的sql为 
  Select xxx from table_name where userid>0 and userid<10
  Output configuration 输出配置
  Storage type: 类型
   0 : HDFS
  Choose: 0
  Output format: 文件格式
   0 : TEXT_FILE
   1 : SEQUENCE_FILE
  Compression format: 压缩格式
   0 : NONE
   1 : DEFAULT
   2 : DEFLATE
   3 : GZIP
   4 : BZIP2
   5 : LZO
   6 : LZ4
   7 : SNAPPY
  
  Output directory: 输出目录
  
  Throttling resources
  
  Extractors: 
  Loaders: 
  
  初步调研,sql可以做到符合要求的表按天增量导出,但是Output directory这个是固定的,所以当导出完成后,要立即进行入库操作,然后删除目录以备下次使用。
  
  自定义SQL:
  通过测试:以下sql都是可以的:
  1. select * from ucall_center where ${CONDITIONS} 
  2. select * from ucall_center where ${CONDITIONS} and (date like '%2014-05-09')
  3. 关联导出:select x.date from (select * from ucall_center where ${CONDITIONS} and (date like '%2014-05-09'))x join Data_Acquisition_TeamUser y limit 1;

性能测试
待测

TODO: 
1. 继续调研下sqoop2的功能
   2. 性能测试

你可能感兴趣的:(sqoop)