sqoop用于数据迁移

用法示例

查看hive库中所有的表

sqoop   list-tables  --username  hive   --password  'XX'     --connect     jdbc:mysql://XX:3306/hive?characterEncoding=UTF-8

基于mysql中已经存在的库表,在hive中进行创建

sqoop create-hive-table --connect jdbc:mysql://XX:3306/hive?characterEncoding=UTF-8--table  people  --username hive -password 'XXX' --hive-database  db_hive_edu

显示mysql中指定用户名下有哪些库表

sqoop list-databases --connect jdbc:mysql://XX:3306/--username XX --password XXX

显示指定库中有哪些表

sqoop list-tables --connect jdbc:mysql://XX:3306/firework --username xx --password XXX

在hive中创建与mysql中表结构一致的表

sqoop create-hive-table --connect jdbc:mysql://XX:3306/firework --username XX --password XX --table firework_apiinfometa --hive-table firework_apiinfometa_hive

数据导入:sqoop import

常用参数 

--connect jdbc 连接地址

--connection-manager 连接管理者

--driver 驱动类

--hadoop-mapred-home $HADOOP_MAPRED_HOME

--help help 信息

-P 从命令行输入密码

-m  指定maptask的个数,指定maptask的并行度

--target-dir  指定导出数据在hdfs上的存储目录

--fields-terminated-by  指定每条记录中字段之间的分隔符

--where 指定查询sql的where条件

--query  指定sql查询

--columns 指定查询的列  (不指定默认导出所有的列)

--password 密码

--username 账号

--verbose 打印流程信息

--connection-param-file 可选参数

mysql到hdfs

(1) 不指定分隔符和路径

sqoop import --connect jdbc:mysql://XX:3306/firework --username XX --password XXX --table firework_apiinfometa -m 1

如果没有指定文件的存储目录,那么默认的会保存在hdfs上的/user/用户/book 目录中,默认的字段的分隔符逗号

(2) 指定导入路径和分割符

sqoop import --connect jdbc:mysql://XX:3306/firework --username XX --password XXX --table firework_apiinfometa --target-dir /user/hive/warehouse/test.db/firework_apiinfometa_hive --fields-terminated-by '\t' -m 1

导入where的结果

sqoop import --connect jdbc:mysql://XX:3306/firework --username XX --password XXX --table firework_apiinfometa --where "url like '%test%'" --target-dir /user/hive/warehouse/test.db/firework_apiinfometa_hive_where -m 1

注意:where条件里面如果还需要带‘’ ,则需要使用双引号; 不能够给带‘’的串再添加转义字符

导入query的结果

双引号: sqoop import --connect jdbc:mysql://XX:3306/firework --username XX --password XXX --target-dir /user/hive/warehouse/test.db/firework_apiinfometa_hdfs_query --query "select * from firework_apiinfometa where url like '%test%' and $CONDITIONS" --split-by url --fields-terminated-by '\t' -m 1

单引号-where条件不带引号:qoop import --connect jdbc:mysql://XX:3306/firework--username XX --password XXX --target-dir /user/hive/warehouse/test.db/firework_apiinfometa_hdfs_query_append --query 'select * from  firework_apiinfometa where $CONDITIONS' --split-by url --fields-terminated-by '\t' -m 1

单引号-where条件带引号: sqoop import --connect jdbc:mysql://XX:3306/firework--username XX --password XXX --target-dir /user/hive/warehouse/test.db/firework_apiinfometa_hdfs_query_append1 --query 'select * from  firework_apiinfometa where url like "%test%" and $CONDITIONS' --split-by url --fields-terminated-by '\t' -m 1

备注:--table  与 --query 不能同时出现; --query 中必须包含and $CONDITIONS; 如果 query 后使用的是双引号,则$CONDITIONS 前必须加转移符(即and \$CONDITIONS;),防止 shell 识别为自己的变量 ; 如果query是单引号的查询sql,则无需加,如果携带了where条件需要带引号,则where条件带双引号,$CONDITIONS前无需加转义

mysql到hive

普通导入

sqoop import --connect jdbc:mysql://XX:3306/firework --username XX --password XXX --table firework_apiinfometa --hive-import -m 1

导入数据到hive表中时,默认在default库下,表名和MySQL导入的表名一样,默认采用'\u0001'分隔。

全量导入

sqoop import --connect jdbc:mysql://XX:3306/firework --username XX --password XX --table firework_apiinfometa --fields-terminated-by '\t' --lines-terminated-by '\n' --hive-import --hive-overwrite --create-hive-table --hive-table test.firework_apiinfometa_hive --delete-target-dir

表会自动创建,但是库不会,所以在执行语句前,一定要保证hive的数据库存在,否则会把报错

增量导入

sqoop import --connect jdbc:mysql://XX:3306/firework  --username XX --password XXX --table firework_apiinfometa --target-dir /user/hive/warehouse/test.db/firework_apiinfometa_hive --incremental append --check-column url -m1

 ERROR tool.ImportTool: Import failed: Character column (url) can not be used to determine which rows to incrementally import.

mysql到hbase

sqoop import --connect jdbc:mysql://XX:3306/firework--username XX --password XXX --table firework_apiinfometa --hbase-create-table --hbase-table firework_apiinfometa_hbase --column-family apiinfometa --hbase-row-key url -m 1

最开始出现很多少jar的情况,一个个copy就好了

数据导出:sqoop export

常见参数

--direct 快速导入

--export-dir HDFS 导出数据的目录

-m,--num-mappers 都少个 map 线程

--table 导出哪个表

--call 存储过程

--update-key 通过哪个字段来判断更新

--update-mode 插入模式,默认是只更新,可以设置为 allowinsert.

--input-null-string 字符类型 null 处理

--input-null-non-string 非字符类型 null 处理

--staging-table 临时表

--clear-staging-table 清空临时表

--batch 批量模式

hdfs到mysql

前置:先创建表,如果表结构不对,部分字段的值会丢失;

sqoop export --connect jdbc:mysql://XX:3306/mocksky--username XX --password XXX --table user_mall --export-dir /tmp/user_mall.txt --fields-terminated-by ' '

hive到mysql

与hdfs的不同在:--export-dir /user/hive/warehouse/uv/dt=2011-08-03 \ --input-fileds-terminated-by '\t'

hbase到mysql

通过先将hbase中数据写hdfs,然后再导入


问题1:Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf

通过将jar进行拷贝得以解决: cp -f $HIVE_HOME/lib/hive-common-2.3.3.jar $SQOOP_HOME/lib

Caused by: Generating splits for a textual index column allowed only in case of "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" property passed as a parameter

解决: 因为指定了-m XX,也就是XX个map处理,-m > 1 必须有主键。因为这个表没有主键,所以需要需要设置-m 1

问题2:Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil

解决:cp -f $HIVE_HOME/lib/hbase-server-1.1.1.jar  $SQOOP_HOME/lib

问题3:Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$BlockingInterface

解决:cp -f$HIVE_HOME/lib/hbase-protocol-1.1.1.jar$SQOOP_HOME/lib

问题4:Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hbase.client.HBaseAdmin.<init>(Lorg/apache/hadoop/conf/Configuration;)V

解决:cp -f$HIVE_HOME/lib/hbase-client-1.1.1.jar $SQOOP_HOME/lib

问题5:Caused by: java.lang.ClassNotFoundException: com.yammer.metrics.core.MetricsRegistry

解决:cp -f$HIVE_HOME/lib/metrics-core-2.2.0.jar $SQOOP_HOME/lib

问题6:Error: org.apache.hadoop.hbase.client.HTable.<init>(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/String;)V

解决:cp -f$HADOOP_HOME/share/hadoop/common/hadoop-common-2.7.6.jar $SQOOP_HOME/lib $SQOOP_HOME/lib

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容