sqoop使用文档_第1页
sqoop使用文档_第2页
sqoop使用文档_第3页
sqoop使用文档_第4页
sqoop使用文档_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、1 简介Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。Sqoop已在CDH集群中配置完成。集群中使用的是sqoop2.关于sqoop1和sqoop2的区别如下:1.1 Sqoop2和sqoop1的区别Sqoop1架构图:Sqoop2架构图:1.2 使用#指定列$ sqoop import -connect jdbc:mysql:/ -table EMPLOYEES -columns "empl

2、oyee_id,first_name,last_name,job_title"#使用8个线程$ sqoop import -connect jdbc:mysql:/ -table EMPLOYEES -m 8#快速模式$ sqoop import -connect jdbc:mysql:/ -table EMPLOYEES -direct#使用sequencefile作为存储方式$ sqoop import -connect jdbc:mysql:/ -table EMPLOYEES -class-name com.foocorp.Employee -as-sequencefile#

3、分隔符$ sqoop import -connect jdbc:mysql:/ -table EMPLOYEES -fields-terminated-by 't' -lines-terminated-by 'n' -optionally-enclosed-by '"'#导入到hive$ sqoop import -connect jdbc:mysql:/ -table EMPLOYEES -hive-import#条件过滤$ sqoop import -connect jdbc:mysql:/ -table EMPLOYEES -wh

4、ere "start_date > '2010-01-01'"#用dept_id作为分个字段$ sqoop import -connect jdbc:mysql:/ -table EMPLOYEES -split-by dept_id#追加导入$ sqoop import -connect jdbc:mysql:/ -table sometable -where "id > 100000" -target-dir /incremental_dataset append-华丽的分割线-将mysql中的数据导入hdfs文件系统中s

5、qoop import -connect jdbc:mysql:/:3306/mysql -username root -password root -table help_topic -fields-terminated-by 't' -m 2 -target-dir /user/mysql/topic2/$today -default-character-set=utf-8 将oracle中的数据导入hdfs文件系统中sqoop import -connect jdbc:oracle:thin:13:1521:orcl -user

6、name oracle -password oracle -table recmail -columns "nid,ssubject,srecusers,ssendusers,scc,scontent" -fields-terminated-by 't' -m 1 -target-dir /user/oracle/email/$today使用query关联查询sqoop import -connect jdbc:mysql:/:3306/test -username root -password root -query 'SEL

7、ECT u.id,,u.age,s.score FROM user u join score s on u.id=s.uid WHERE $CONDITIONS' -fields-terminated-by 't' -m 1 -target-dir /user/mysql/topic3/$today生成对应的表的java代码sqoop codegen -connect jdbc:mysql:/:3306/mysql -username root -password root -table help_topicsqoop mysql hi

8、ve(int 类型为null)sqoop import -connect jdbc:mysql:/:3306/test -username root -password root -table user -m 1 -hive-import -create-hive-table -hive-table user_mysql -target-dir /user/hive/warehouse/user -enclosed-by '"' -fields-terminated-by , -escaped-by sqoop oracle hivesqoop

9、import -connect jdbc:oracle:thin:13:1521:orcl -username oracle -password oracle -table RECMAIL -columns "NID,SSUBJECT,SRECUSERS,SSENDUSERS,SCC,SCONTENT" -m 1 -hive-import -create-hive-table -hive-table email_oracle2 -target-dir /user/hive/warehouse/email3 -enclosed-by '"

10、;' -fields-terminated-by , -escaped-by ps:oracle中的表明和字段名必须大写,否则会找不到。导入hive中不支持增量导入Sqoop mysql hbasesqoop import -connect jdbc:mysql:/:3306/test -username root -password root -table user -m 1 -hbase-create-table -hbase-table user -column-family userinfo -hbase-row-key id append 表示增量导入如

11、果hbase中已存在表和列族,则不需要使用-hbase-create-table命令sqoop import -connect jdbc:oracle:thin:13:1521:ORCL -username oracle -password oracle -table RECMAIL -columns "NID,SRECUSERS,SSENDUSERS,SCC,SBCC" -m 1 -hbase-table email -column-family users -hbase-row-key NID appendsqoop import -connect

12、 jdbc:oracle:thin:11:1521:ORCL -username oracle -password oracle -table RECMAIL -columns "NID,SSUBJECT,SCONTENT" -m 1 -hbase-table email -column-family message -hbase-row-key NID -append2 附录:Sqoop中文手册Sqoop在我们的实际工作中有一些应用,为了对Sqoop的使用有个更全面的了解,于是我花了一些时间将Sqoop的使用整理成了一份中文手册,我自认还是非常全面的

13、,覆盖到了Sqoop所有的方面。虽然对每一个用法,我都是尽可能地先经过测试然后再得出结论,但可能难免会有谬误,不过总的来说希望能对使用Sqoop的朋友有点帮助吧。概述本文档主要对SQOOP的使用进行了说明,参考内容主要来自于Cloudera SQOOP的官方文档。为了用中文更清楚明白地描述各参数的使用含义,本文档几乎所有参数使用说明都经过了我的实际验证而得到。2.1 codegen将关系数据库表映射为一个java文件、java class类、以及相关的jar包,作用主要是两方面:1、  将数据库表映射为一个Java文件,在该Java文件中对应有表的各个字段。2、  生成的J

14、ar和class文件在metastore功能使用时会用到。基础语句:sqoop codegen connect jdbc:mysql:/localhost:3306/hive username root password 123456 table TBLS2 参数说明bindir <dir>指定生成的java文件、编译成的class文件及将生成文件打包为JAR的JAR包文件输出路径class-name <name>设定生成的Java文件指定的名称outdir <dir>生成的java文件存放路径package-name<name>包名,

15、如nic,则会生成cn和cnnic两级目录,生成的文件(如java文件)就存放在cnnic目录里input-null-non-string<null-str>在生成的java文件中,可以将null字符串设为想要设定的值(比如空字符串)input-null-string<null-str>同上,设定时,最好与上面的属性一起设置,且设置同样的值(比如空字符串等等)。map-column-java<arg>数据库字段在生成的java文件中会映射为各种属性,且默认的数据类型与数据库类型保持对应,比如数据库中某字段的类型为bigint,则在Java文件中的数据类型为l

16、ong型,通过这个属性,可以改变数据库字段在java中映射的数据类型,格式如:map-column-java DB_ID=String,id=Integernull-non-string<null-str>在生成的java文件中,比如TBL_ID=null?”null”:”,通过这个属性设置可以将null字符串设置为其它值如ddd,TBL_ID=null?”ddd”:”null-string<null-str>同上,使用的时候最好和上面的属性一起用,且设置为相同的值table <table-name>对应关系数据库的表名,生成的java文件中的各属性与该表的

17、各字段一一对应。 2.2 create-hive-table生成与关系数据库表的表结构对应的HIVE表基础语句:sqoop create-hive-table connect jdbc:mysql:/localhost:3306/hive -username root -password 123456 table TBLS hive-table h_tbls2参数说明hive-home <dir>Hive的安装目录,可以通过该参数覆盖掉默认的hive目录hive-overwrite覆盖掉在hive表中已经存在的数据create-hive-table默认是false,如果目

18、标表已经存在了,那么创建任务会失败hive-table后面接要创建的hive表table指定关系数据库表名 2.3 eval可以快速地使用SQL语句对关系数据库进行操作,这可以使得在使用import这种工具进行数据导入的时候,可以预先了解相关的SQL语句是否正确,并能将结果显示在控制台。查询示例:sqoop eval connect jdbc:mysql:/localhost:3306/hive -username root -password 123456 -query “SELECT * FROM tbls LIMIT 10”数据插入示例:sqoop eval connect j

19、dbc:mysql:/localhost:3306/hive -username root -password 123456 -e “INSERT INTO TBLS2VALUES(100,1375170308,1,0,hadoop,0,1,guest,MANAGED_TABLE,abc,ddd)”-e、-query这两个参数经过测试,比如后面分别接查询和插入SQL语句,皆可运行无误,如上。5.     export从hdfs中导数据到关系数据库中sqoop export connect jdbc:mysql:/localhost:3306/hive u

20、sername root password123456  table TBLS2 export-dir sqoop/test参数说明direct快速模式,利用了数据库的导入工具,如mysql的mysqlimport,可以比jdbc连接的方式更为高效的将数据导入到关系数据库中。export-dir <dir>存放数据的HDFS的源目录-m,num-mappers <n>启动N个map来并行导入数据,默认是4个,最好不要将数字设置为高于集群的最大Map数table <table-name>要导入到的关系数据库表update-key <col-na

21、me>后面接条件列名,通过该参数,可以将关系数据库中已经存在的数据进行更新操作,类似于关系数据库中的update操作update-mode <mode>更新模式,有两个值updateonly和默认的allowinsert,该参数只能是在关系数据表里不存在要导入的记录时才能使用,比如要导入的hdfs中有一条id=1的记录,如果在表里已经有一条记录id=2,那么更新会失败。input-null-string <null-string>可选参数,如果没有指定,则字符串null将被使用input-null-non-string <null-string>可选参

22、数,如果没有指定,则字符串null将被使用staging-table <staging-table-name>该参数是用来保证在数据导入关系数据库表的过程中事务安全性的,因为在导入的过程中可能会有多个事务,那么一个事务失败会影响到其它事务,比如导入的数据会出现错误或出现重复的记录等等情况,那么通过该参数可以避免这种情况。创建一个与导入目标表同样的数据结构,保留该表为空在运行数据导入前,所有事务会将结果先存放在该表中,然后最后由该表通过一次事务将结果写入到目标表中。clear-staging-table如果该staging-table非空,则通过该参数可以在运行导入前清除stagin

23、g-table里的数据。batch该模式用于执行基本语句(暂时还不太清楚含义) 2.4 import将数据库表的数据导入到hive中,如果在hive中没有对应的表,则自动生成与数据库表名相同的表。sqoop import connect jdbc:mysql:/localhost:3306/hive username root password123456 table user split-by id hive-importsplit-by指定数据库表中的主键字段名,在这里为id。参数说明append将数据追加到hdfs中已经存在的dataset中。使用该参数,sqoop将把数据先导

24、入到一个临时目录中,然后重新给文件命名到一个正式的目录中,以避免和该目录中已存在的文件重名。as-avrodatafile将数据导入到一个Avro数据文件中as-sequencefile将数据导入到一个sequence文件中as-textfile将数据导入到一个普通文本文件中,生成该文本文件后,可以在hive中通过sql语句查询出结果。boundary-query <statement>边界查询,也就是在导入前先通过SQL查询得到一个结果集,然后导入的数据就是该结果集内的数据,格式如:boundary-query select id,creationdate from person

25、 where id = 3,表示导入的数据为id=3的记录,或者select min(<split-by>), max(<split-by>) from <table name>,注意查询的字段中不能有数据类型为字符串的字段,否则会报错:java.sql.SQLException: Invalid value forgetLong()目前问题原因还未知 columns<col,col,col>指定要导入的字段值,格式如:columns id,usernamedirect直接导入模式,使用的是关系数据库自带的导入导出工具。官网上是说这样导

26、入会更快direct-split-size在使用上面direct直接导入的基础上,对导入的流按字节数分块,特别是使用直连模式从PostgreSQL导入数据的时候,可以将一个到达设定大小的文件分为几个独立的文件。inline-lob-limit设定大对象数据类型的最大值-m,num-mappers启动N个map来并行导入数据,默认是4个,最好不要将数字设置为高于集群的节点数query,-e<statement>从查询结果中导入数据,该参数使用时必须指定target-dir、hive-table,在查询语句中一定要有where条件且在where条件中需要包含$CONDITIONS,示例

27、:query select * from person where $CONDITIONS target-dir/user/hive/warehouse/person hive-table personsplit-by<column-name>表的列名,用来切分工作单元,一般后面跟主键IDtable <table-name>关系数据库表名,数据从该表中获取target-dir <dir>指定hdfs路径warehouse-dir <dir>与target-dir不能同时使用,指定数据导入的存放目录,适用于hdfs导入,不适合导入hive目录whe

28、re从关系数据库导入数据时的查询条件,示例:where id = 2-z,compress压缩参数,默认情况下数据是没被压缩的,通过该参数可以使用gzip压缩算法对数据进行压缩,适用于SequenceFile, text文本文件, 和Avro文件compression-codecHadoop压缩编码,默认是gzipnull-string <null-string>可选参数,如果没有指定,则字符串null将被使用null-non-string<null-string>可选参数,如果没有指定,则字符串null将被使用增量导入参数说明check-column (col)用来作

29、为判断的列名,如idincremental (mode)append:追加,比如对大于last-value指定的值之后的记录进行追加导入。lastmodified:最后的修改时间,追加last-value指定的日期之后的记录last-value (value)指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值对incremental参数,如果是以日期作为追加导入的依据,则使用lastmodified,否则就使用append值。2.5 import-all-tables将数据库里的所有表导入到HDFS中,每个表在hdfs中都对应一个独立的目录。sqoop import-all-

30、tables connect jdbc:mysql:/localhost:3306/testsqoop import-all-tables connect jdbc:mysql:/localhost:3306/test hive-import 参数说明as-avrodatafile同import参数as-sequencefile同import参数as-textfile同import参数direct同import参数direct-split-size <n>同import参数inline-lob-limit <n>同import参数-m,num-mappers

31、<n>同import参数warehouse-dir <dir>同import参数-z,compress同import参数compression-codec同import参数 2.6 job用来生成一个sqoop的任务,生成后,该任务并不执行,除非使用命令执行该任务。sqoop job参数说明create <job-id>生成一个job,示例如:sqoop job create myjob  import connectjdbc:mysql:/localhost:3306/test tableperson delete <j

32、ob-id>删除一个jobsqoop job delete myjobexec <job-id>执行一个jobsqoop job exec myjobhelp显示帮助说明list显示所有的jobsqoop job listmeta-connect <jdbc-uri>用来连接metastore服务,示例如:meta-connect jdbc:hsqldb:hsql:/localhost:16000/sqoopshow <job-id>显示一个job的各种参数sqoop job show myjobverbose打印命令运行时的详细信息 2.7

33、 list-databases打印出关系数据库所有的数据库名sqoop list-databases connect jdbc:mysql:/localhost:3306/ -username root -password 1234562.8 list-tables打印出关系数据库某一数据库的所有表名sqoop list-tables connect jdbc:mysql:/localhost:3306/zihou -username root -password 1234562.9 merge将HDFS中不同目录下面的数据合在一起,并存放在指定的目录中,示例如:sqoop merge new

34、-data /test/p1/person onto /test/p2/person target-dir /test/merged jar-file /opt/data/sqoop/person/Person.jar class-name Person merge-key id其中,class-name所指定的class名是对应于Person.jar中的Person类,而Person.jar是通过Codegen生成的参数说明new-data <path>Hdfs中存放数据的一个目录,该目录中的数据是希望在合并后能优先保留的,原则上一般是存放越新数据的目录就对应这个参数。onto

35、<path>Hdfs中存放数据的一个目录,该目录中的数据是希望在合并后能被更新数据替换掉的,原则上一般是存放越旧数据的目录就对应这个参数。merge-key <col>合并键,一般是主键IDjar-file <file>合并时引入的jar包,该jar包是通过Codegen工具生成的jar包class-name <class>对应的表名或对象名,该class类是包含在jar包中的。target-dir <path>合并后的数据在HDFS里的存放目录 2.10 metastore记录sqoop job的元数据信息,如果不启动me

36、tastore实例,则默认的元数据存储目录为:/.sqoop,如果要更改存储目录,可以在配置文件sqoop-site.xml中进行更改。metastore实例启动:sqoop metastore 参数说明shutdown关闭一个运行的metastore实例2.11 version显示sqoop版本信息语句:sqoop version2.12 help打印sqoop帮助信息语句:sqoop help2.13 公共参数2.13.1 Hive参数参数说明hive-delims-replacement <arg>用自定义的字符串替换掉数据中的n, r, and 01等字符hive

37、-drop-import-delims在导入数据到hive中时,去掉数据中n,r和01这样的字符map-column-hive <arg>生成hive表时,可以更改生成字段的数据类型,格式如:map-column-hiveTBL_ID=String,LAST_ACCESS_TIME=stringhive-partition-key创建分区,后面直接跟分区名即可,创建完毕后,通过describe 表名可以看到分区名,默认为string型hive-partition-value<v>该值是在导入数据到hive中时,与hive-partition-key设定的key对应的va

38、lue值。hive-home <dir>Hive的安装目录,可以通过该参数覆盖掉默认的hive目录hive-import将数据从关系数据库中导入到hive表中hive-overwrite覆盖掉在hive表中已经存在的数据create-hive-table默认是false,如果目标表已经存在了,那么创建任务会失败hive-table后面接要创建的hive表table指定关系数据库表名2.13.2 数据库连接参数参数说明connect <jdbc-uri>Jdcb连接url,示例如:connect jdbc:mysql:/localhost:3306/hiveconnect

39、ion-manager <class-name>指定要使用的连接管理类driver <class-name>数据库驱动类hadoop-home <dir>Hadoop根目录help打印帮助信息-P从控制端读取密码password <password>Jdbc url中的数据库连接密码username <username>Jdbc url中的数据库连接用户名verbose在控制台打印出详细信息connection-param-file <filename>一个记录着数据库连接参数的文件2.13.3 文件输出参数用于impor

40、t场景。示例如:sqoop import connect jdbc:mysql:/localhost:3306/test username root P table person split-by id check-column id incremental append  last-value 1 enclosed-by ”escaped-by # fields-terminated-by . 参数说明enclosed-by <char>给字段值前后加上指定的字符,比如双引号,示例:enclosed-by ”,显示例子:”3,”jimsss”,”dd”escaped-by <char>给双引号作转义处理,如字段值为”测试”,经过escaped-by 处理后,在hdfs中的显示值为:”测试”,对单引号无效fields-terminated-

温馨提示

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

评论

0/150

提交评论