sqoop使用手册_第1页
sqoop使用手册_第2页
sqoop使用手册_第3页
sqoop使用手册_第4页
sqoop使用手册_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Author :路帅1. Sqoop介绍概述Hadoop的数据传输工具sqoop是Apache顶级项目,主要用来在Hadoop和关系数据库、数据仓库、NoSql系统中传递数据。通过sqoop,我们可以方便的将数据从关系数据库导入到HDFS、Hbase、Hive,或者将数据从HDFS导出到关系数据库。sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。Sqoop集成了工作流程协调的Apache Oozie,定义安排和自动导入/导出任务。 。sqoop主要通过JDBC和关系数据库进行交互。理论上支持JDBC的databa

2、se都可以使用sqoop和hdfs进行数据交互。但是,只有一小部分经过sqoop官方测试,如下:Databaseversion-direct supportconnect stringHSQLDB1.8.0+Nojdbc:hsqldb:*/MySQL5.0+Yesjdbc:mysql:/Oracle10.2.0+Nojdbc:oracle:*/PostgreSQL8.3+Yesjdbc:postgresql:/较老的版本有可能也被支持,但未经过测试。出于性能考虑,sqoop提供不同于JDBC的快速存取数据的机制,可以通过-direct使用。版本介绍2012年3月,sqoop从Apache的孵化

3、器中毕业。成为Apache的Top-Level Project。下图提供了sqoop从诞生到目前的简要概述:Sqoop的版本到目前为止,主要分为sqoop1 和sqoop2 , sqoop1.4.4之前的所有版本称为sqoop1,之后的版本 sqoop1.991,sqoop1.99.2,sqoop1.99.3 称为sqoop2。目前 sqoop1 的稳定版本是sqoop1.4.4,sqoop2 的最新版本是sqoop 1.99.3。Sqoop1和sqoop2的区别1.3.1. 工作模式sqoop1 基于客户端模式,用户使用客户端模式,需要在客户端节点安装sqoop和连接器/驱动器sqoop2

4、基于服务的模式,是sqoop1的下一代版本,服务模式主要分为 sqoop2 server 和 client,用户使用服务的模式,需要在sqoop2 server安装连接器/驱动器,所有配置信息都在sqoop2 server进行配置。1.3.2. MR角度透视其区别sqoop 只提交一个map作业,数据的传输和转换都由Mappers来完成。sqoop2 提交一个MapReduce作业,Mappers负责从数据源传输(transporting)数据,Reducers负责根据指定的源来转换(transforming)数据。1.3.3. 从安全的角度另外一个重要的区别是sqoop2从安全的角度进行设计

5、,管理员来配置数据的源和目标,然而,操作者直接使用已经建好的链接,不需要了解该链接的具体细节信息,按需获取即可。1.3.4. 其他方面Web UI:sqoop 只提供了CLI方式,sqoop2同时也支持Web UI的方式。Sqoop Server以REST服务方式提供CLI和 Web UI另外,Sqoop2 REST 服务接口能更容易的集成其他框架进来,比如Oozie,用来定义Sqoop2工作流。注意点:sqoop 是Hue(HUE-1214)的模块,不是ASF的部分。1.3.5. 功能差异:Moving from Sqoop 1 to Sqoop 2: Sqoop 2 is ess

6、entially the future of the Apache Sqoop project. However, since Sqoop 2 currently lacks some of the features of Sqoop 1, Cloudera recommends you use Sqoop 2 only if it contains all the features required for your use case, otherwise, continue to use Sqoop 1.FeatureSqoop 1Sqoop 2Connectors for all maj

7、or RDBMSSupported.Not supported.Workaround: Use the generic JDBC Connector which has been tested on the following databases: Microsoft SQL Server, PostgreSQL, MySQL and Oracle.This connector should work on any other JDBC compliant database. However, performance might not be comparable to that of spe

8、cialized connectors in Sqoop.Kerberos Security IntegrationSupported.Not supported.Encryption of Stored PasswordsNot supported. No workaround.Supported using Derby's on-disk encryption.Disclaimer: Although expected to work in the current version of Sqoop 2, this configuration has not be

9、en verified.Data transfer from RDBMS to Hive or HBaseSupported.Not supported.Workaround: Follow this two-step approach.1. Import data from RDBMS into HDFS2. Load data into Hive or HBase manually using appropriate tools and commands such as the LOAD DATA statement in HiveData transfer

10、from Hive or HBase to RDBMSNot supported.Workaround: Follow this two-step approach.1. Extract data from Hive or HBase into HDFS (either as a text or Avro file)2. Use Sqoop to export output of previous step to RDBMSNot supported.Follow the same workaround as for Sqoop 1.Sqoop1Sqoop1架构sqoop架构非常简单

11、,其整合了Hive、Hbase和Oozie,通过map任务来传输数据,map负责数据的加载、转换,存储到HDFS、Hbase或者Hive中。数据大概流程1.读取要导入数据的表结构,生成运行类,默认是QueryResult,打成jar包,然后提交给Hadoop2.设置好job,主要也就是设置好sqoop的各个参数3.这里就由Hadoop来执行MapReduce来执行Import命令了,      1)首先要对数据进行切分,也就是DataSplit          DataDrivenDBInputFormat.ge

12、tSplits(JobContext job)      2)切分好范围后,写入范围,以便读取       DataDrivenDBInputFormat.write(DataOutput output) 这里是lowerBoundQuery and  upperBoundQuery       3)读取以上2)写入的范围          DataDrivenDBInputFormat.readFields(Dat

13、aInput input)4)然后创建RecordReader从数据库中读取数据DataDrivenDBInputFormat.createRecordReader(InputSplit split,TaskAttemptContext context)5)创建MapTextImportMapper.setup(Context context)6)RecordReader一行一行从关系型数据库中读取数据,设置好Map的Key和Value,交给MapDBRecordReader.nextKeyValue()7)运行mapTextImportMapper.map(LongWritable key,

14、 SqoopRecord val, Context context)最后生成的Key是行数据,由QueryResult生成,Value是NullWritable.get()数据导入图例数据导出图例Sqoop面临的挑战:1. Sqoop已经在企业得到采用,同时暴露出了一些问题,易用性不好、扩展性差、安全问题等2. 隐秘的上下文命令行参数容易导致错误出现3. 由于数据传输和序列化格式的紧耦合,连接器只能支持特定的数据格式(例如,direct模式下mysql连接器不支持序列化文件)4. 公开共享的验证凭证导致安全问题5. 需要root权限实现本地的配置和安装,不易管理6. 调式map任务只能通过开启

15、verbose标志7. 连接器被强制使用jdbc模式,需要使用jdbc的链接信息等以上这些挑战,促使sqoop2的出现,sqoop2在设计之初把这些问题进行了考虑,sqoop2的出现将能够解决这些问题。Sqoop2Sqoop2是一个基于服务器的工具,旨在迁移Hadoop和关系数据库之间的数据。Sqoop 2 安装包:安装sqoop2软件包括三种形式的选择:1. Tarball (.tgz) that contains both the Sqoop 2 server and the client.2. Separate RPM packages for Sqoop 2 server (sqoop

16、2-server) and client (sqoop2-client)3. Separate Debian packages for Sqoop 2 server (sqoop2-server) and client (sqoop2-client)Sqoop2将继续支持命令行的交互方式,然而增加了基于Web的UI的实现简单易容的用户界面操作。使用这种界面接口,用户可以通过简单的UI设置进行导入、导出,避免了繁琐的冗余选项。各种连接器被添加到应用程序的某个地方,这样用户就不用负责在自己的安全沙箱中安装和配置连接器了。这些连接器的公开操作由sqoop框架负责以界面形式展示给用户。用户使用界面执行

17、命令。这种模式,确保了平台的安全性,并限制终端用户的操作。Sqoop2架构1. 易用性Sqoop需要在客户端进行安装和配置,Sqoop2的安装和配置只在服务器端。这就意味着,连接器会在一个地方进行配置,并由管理员角色进行管理,操作员的角色进行运行。同样,jdbc驱动程序和数据库的链接信息将由服务器进行管理。Sqoop提供基于Web的服务:前端的命令行接口、浏览器和后端的元数据存储库。此外Hive和HBase也在服务器端进行集成。Oozie将会使用REST API管理Sqoop任务。这样,Sqoop和Oozie进行了解耦,假如你安装了新的驱动程序,并不需要再安装Oozie。2. 扩展性Sqoop

18、2的连接器不在限于JDBC模式,但可以定义自己的词汇。例如,Couchebase不在需要指定表明。公用的模块将被抽像出连接器,将他们只负责数据的传输。reduce阶段只需是实现公用模块即可。Sqoop 2基于Web的用户界面交互将引导用户进行导入/导出设置,消除了冗余易出错的步骤。3. 安全Currently, Sqoop operates as the user that runs the 'sqoop' command. The security principal used by a Sqoop job is determined by what credentials

19、the users have when they launch Sqoop. Going forward, Sqoop 2 will operate as a server based application with support for securing access to external systems via role-based access to Connection objects. For additional security, Sqoop 2 will no longer allow code generation, require direct access to H

20、ive and HBase, nor open up access to all clients to execute jobs.Sqoop 2 will introduce Connections as First-Class Objects. Connections, which will encompass credentials, will be created once and then used many times for various import/export jobs. Connections will be created by the Admin and used b

21、y the Operator, thus preventing credential abuse by the end user. Furthermore, Connections can be restricted based on operation (import/export). By limiting the total number of physical Connections open at one time and with an option to disable Connections, resources can be managed.4. 总结As detailed

22、in this presentation, Sqoop 2 will enable users to use Sqoop effectively with a minimal understanding of its details by having a web-application run Sqoop, which allows Sqoop to be installed once and used from anywhere. In addition, having a REST API for operation and management will help Sqoop inte

23、grate better with external systems such as Oozie. Also, introducing a reduce phase allows connectors to be focused only on connectivity and ensures that Sqoop functionality is uniformly available for all connectors. This facilitates ease of development of connectors.Sqoop和Flume的区别Sqoop: Sqoop是一个批量数据

24、传输工具,它允许从结构化数据存储,比如关系数据库,数据仓库和NoSQL系统的数据方便导入/导出。使用Sqoop,你可以提供从外部系统到HDFS,以及导入到Hive和HBase中。同样,Sqoop集成了工作流程协调的Apache Oozie,定义安排和自动导入/导出任务。 Fulume:Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力2. Sqoop安装1.2.Sqoop1安装wget tar -xzvf sqoop-1.4.4.bin_hadoop-1.0.0.

25、tar.gzmv sqoop-1.4.4.bin_hadoop-1.0.0 sqoop-1.4.4cd sqoop-1.4.4sudo vi /etc/profile增加:export HADOOP_COMMON_HOME=/home/ysc/hadoop-1.2.1export HADOOP_MAPRED_HOME=/home/ysc/hadoop-1.2.1export PATH=$PATH:/home/ysc/sqoop-1.4.4/binexport HBASE_HOME=/home/ysc/hbase-0.94.12source /etc/profilesqoop help将JDBC

26、驱动mysql-connector-java-5.1.18.jar拷贝到/home/ysc/sqoop-1.4.4/libsqoop list-databases -connect jdbc:mysql:/host001 -username root -password yscsqoop list-tables -connect jdbc:mysql:/host001/mysql -username root -password yscsqoop import -connect jdbc:mysql:/host001/test -username root -password ysc -tab

27、le personsqoop import -connect jdbc:mysql:/host001/test -username root -password ysc -table person -m 1sqoop import -connect jdbc:mysql:/host001/test -username root -password ysc -table person -direct -m 1sqoop import-all-tables -connect jdbc:mysql:/host001/test -username root -password ysc  -d

28、irect -m 1sqoop export -connect jdbc:mysql:/host001/test -username root -password ysc -table person -export-dir personsqoop export -connect jdbc:mysql:/host001/test -username root -password ysc -table animal -export-dir animalSqoop2 安装wget tar -xzvf sqoop-1.99.2-bin-hadoop100.tar.gzmv sqoop-1.99.2-b

29、in-hadoop100 sqoop-1.99.2cd sqoop-1.99.2sudo apt-get install zipbin/addtowar.sh -hadoop-version 1.2.1 -hadoop-path /home/ysc/hadoop-1.2.1bin/addtowar.sh -jars /home/ysc/mysql-connector-java-5.1.18.jarvi server/conf/perties修改org.apache.sqoop.submission.engine.mapreduce.configuration.director

30、y=/etc/hadoop/conf/为org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/home/ysc/hadoop-1.2.1/conf/启动Sqoop 2 server:bin/sqoop.sh server starthttp:/host001:12000/sqoop/停止Sqoop 2 server:bin/sqoop.sh server stop 客户端连接Sqoop 2 server:客户端直接解压即可运行MySQL准备数据库和表:create database test;create t

31、able 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 clientsqoop:000> set server -host host001 -port 12000 -

32、webapp sqoopsqoop:000> show version -allsqoop:000> show connector -allsqoop:000>create connection -cid 1Name: mysqlJDBC Driver Class: com.mysql.jdbc.DriverJDBC Connection String: jdbc:mysql:/host001:3306/test?useUnicode=true&characterEncoding=UTF-8&createDatabaseIfNotExist=true&

33、autoReconnect=trueUsername: rootPassword: *entry#回车Max connections:100sqoop:000>create job -xid 1 -type importName:ImportHistorySchema name:Table name: historyTable SQL statement:Table column names:Partition column name:userIdBoundary query:Choose:0Choose: 0Output directory: output-sqoop2-history

34、Extractors:Loaders:sqoop:000> submission start -jid 1sqoop:000> submission status -jid 1sqoop:000> submission stop -jid 1批处理模式:sqoop.sh client /home/ysc/script.sqoopvi /home/ysc/script.sqoop输入:     #指定服务器信息     set server -host host001 -port 12000 -we

35、bapp sqoop     #执行JOB     submission start -jid 13. Sqoop工具import和export使用详解Sqoop可以在HDFS/Hive/Hbase和关系型数据库之间进行数据的导入导出,其中主要使用了import和export这两个工具。这两个工具非常强大,提供了很多选项帮助我们完成数据的迁移和同步。比如,下面两个潜在的需求:业务数据存放在关系数据库中,1. 如果数据量达到一定规模后需要对其进行分析或同统计,单纯使用关系数据库可能会成为瓶颈,这时可以将数据从业务数据

36、库数据导入(import)到Hadoop平台进行离线分析。2. 对大规模的数据在Hadoop平台上进行分析以后,可能需要将结果同步到关系数据库中作为业务的辅助数据,这时候需要将Hadoop平台分析后的数据导出(export)到关系数据库。这里,我们介绍Sqoop完成上述基本应用场景所使用的import和export工具,通过一些简单的例子来说明这两个工具是如何做到的1. 工具通用选项import和export工具有些通用的选项,如下表所示:选项含义说明-connect <jdbc-uri>指定JDBC连接字符串-connection-manager <class-name&g

37、t;指定要使用的连接管理器类-driver <class-name>指定要使用的JDBC驱动类-hadoop-mapred-home <dir>指定$HADOOP_MAPRED_HOME路径-help打印用法帮助信息-password-file设置用于存放认证的密码信息文件的路径-P从控制台读取输入的密码-password <password>设置认证密码-username <username>设置认证用户名-verbose打印详细的运行信息-connection-param-file <filename>可选,指定存储数据库连接参数

38、的属性文件2. 数据导入工具importimport工具,是将HDFS平台外部的结构化存储系统中的数据导入到Hadoop平台,便于后续分析。我们先看一下import工具的基本选项及其含义,如下表所示:选项含义说明-append将数据追加到HDFS上一个已存在的数据集上-as-avrodatafile将数据导入到Avro数据文件-as-sequencefile将数据导入到SequenceFile-as-textfile将数据导入到普通文本文件(默认)-boundary-query <statement>边界查询,用于创建分片(InputSplit)-columns <col,c

39、ol,col>从表中导出指定的一组列的数据-delete-target-dir如果指定目录存在,则先删除掉-direct使用直接导入模式(优化导入速度)-direct-split-size <n>分割输入stream的字节大小(在直接导入模式下)-fetch-size <n>从数据库中批量读取记录数-inline-lob-limit <n>设置内联的LOB对象的大小-m,-num-mappers <n>使用n个map任务并行导入数据-e,-query <statement>导入的查询语句-split-by <column-

40、name>指定按照哪个列去分割数据-table <table-name>导入的源表表名-target-dir <dir>导入HDFS的目标路径-warehouse-dir <dir>HDFS存放表的根路径-where <where clause>指定导出时所使用的查询条件-z,-compress启用压缩-compression-codec <c>指定Hadoop的codec方式(默认gzip)-null-string <null-string>如果指定列为字符串类型,使用指定字符串替换值为null的该类列的值-nul

41、l-non-string <null-string>如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值Hive参数选项含义说明-hive-home <dir>Override $HIVE_HOME-hive-import插入数据到hive当中,使用hive的默认分隔符-hive-overwrite覆盖hive表中的数据-create-hive-table建表,如果表已经存在,该操作会报错-hive-table <table-name>设置到hive当中的表名-hive-drop-import-delims导入到hive时删除 n,

42、 r, and 01 -hive-delims-replacement导入到hive时用自定义的字符替换掉n, r, and 01-hive-partition-keyhive分区的key-hive-partition-value <v> hive分区的值-map-column-hive <map> 类型匹配,sql类型对应到hive类型HBase参数选项含义说明-column-family <family>把内容导入到hbase当中,默认是用主键作为split列-hbase-create-table创建Hbase表-hbase

43、-row-key <col>指定字段作为row key ,如果输入表包含复合主键,用逗号分隔-hbase-table <table-name>指定hbase表3. 数据导出工具exportexport工具,是将HDFS平台的数据,导出到外部的结构化存储系统中,可能会为一些应用系统提供数据支持。我们看一下export工具的基本选项及其含义,如下表所示:选项含义说明-validate <class-name>启用数据副本验证功能,仅支持单表拷贝,可以指定验证使用的实现类-validation-threshold <class-name>指定验证门限所

44、使用的类-direct使用直接导出模式(优化速度)-export-dir <dir>导出过程中HDFS源路径-m,-num-mappers <n>使用n个map任务并行导出-table <table-name>导出的目的表名称-call <stored-proc-name>导出数据调用的指定存储过程名-update-key <col-name>更新参考的列名称,多个列名使用逗号分隔-update-mode <mode>指定更新策略,包括:updateonly(默认)、allowinsert-input-null-strin

45、g <null-string>使用指定字符串,替换字符串类型值为null的列-input-null-non-string <null-string>使用指定字符串,替换非字符串类型值为null的列-staging-table <staging-table-name>在数据导出到数据库之前,数据临时存放的表名称-clear-staging-table清除工作区中临时存放的数据-batch使用批量模式导出4. Sqoop JobHBase参数选项含义说明-create <job-id>定义sqoop job-delete <job-id>

46、删除sqoop job-exec <job-id>执行sqoop job-show <job-id>查看sqoop job状态-list查看所有sqoop job5. Hive增量导入sqoop支持两种增量导入到hive的模式, 一种是 append,即通过指定一个递增的列,比如:-incremental append  -check-column num_iid -last-value 0 另种是可以根据时间戳,比如:-incremental lastmodified -check-column created -last-value '2012-02-01 11:0:00' 就是只

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论