Sqoop 数据迁移工具

sqoop : SQL to hadOOP

两个功能:

1、 RDB 向HDFS导入

2、 HDFS向RDB导入

注:拷贝mysql-connector.jar 和 json.jar 到sqoop/lib目录下

HDFS导入使用

命令很长,一般写成shell脚本。(运行需要启动 HDFS 、Yarn[mapreduce作业必须]、SQL)

COLUMN 、WHERE限定

sqoop import \
#import指从sql导入到hdfs
--connect jdbc:mysql://localhost:3306/test \
# 可选 --driver com.mysql.jdbc.Driver
#test是目标数据库名
--table customers \
#目标表名
--columns "fname,lname" \
#可以使用columns指定字段
--where "order_date>'2019-1-1'" \
#可以使用where筛选原数据
--username root \
#数据库登陆用户名
--password rw \
#密码
--target-dir /sqoop/test_rdb/customers \
#hdfs 的目标路径,不指定的话会放在/user/【username】/【tbl_name】下
--delete-target-dir \
#覆盖到hdfs(即删除原目录),慎选
-m 3
#map工作者数目,决定最终文件数
#导入的结果是csv格式的文件
注意:斜杠符需要前空格

自由Query查询导入

sqoop import \
#import指从sql导入到hdfs
--connect jdbc:mysql://localhost:3306/test \
#test是目标数据库名
#自由查询不需要指定--table,会冲突
#目标表名
--query "select * from userinfos where host!='127.0.0.1' and \$CONDITIONS" \
# '\$CONDITIONS' 查询必须以该语句结尾
--split-by 'username' \ #指定按照那个字段分区(split到各个mapper)
--username root \
--password rw \
--target-dir /sqoop/test_rdb/customers \ #自由查询必须要指定,因为无法根据--table 自动生成目录名
-m 3

增量导入

--incremental append|lastmodified  #指定增量方式,append追加记录,lastmodified更新
--check-column fieldname \ #指定增量列,排序列
--last-value 'xxxx' \ #上一次导入时,check-column的最大值,从这个值开始升序导入

注:lastmodified 要求排序列必须是时间戳(int)或者日期格式(yyyy-MM-dd)

HDFS导入总结:

必要参数:
sqoop import \
--connect jdbc:mysql://ip:3306/dbname
--username name \
--password passwd \
--table tbl_name \
可选参数:
-m 3 #指定mapper工作者数量
-as-sequencefile|textfile|parquetfile|avrodatafile #存储类型
自由查询:
--query "select ... and \$CONDITIONS" \
--target-dir /path/ \ #必须
--split-by 'filedName' #可选
一般限定:
--columns "field1,field2" \ #可选
--where "field<=value" \ #可选
--target-dir /path/ \ #可选

HIVE导入使用

sqoop import \
--connect jdbc....
--table orders \ #也可以使用query
--username root \
--password rw \ --hive-import \
--create-hive-table \ #自动建表,表元数据同sql,名已存在会报错,一般不用。--hive-overwrite是自动覆盖旧表。
--hive-database dbname \ #目标hive数据库和表
--hive-table orders \ #也可以使用库名.表名的方式
-m 3

指定分区

--hive-partition-key "field_name" \
--hive-partition-value "value" \
#通过字段和值,指定要存储的分区。

可能的运行错误:

——————————————————————————————————

Q: ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.

A:往/etc/profile最后加入

export HADOOP_CLASSPATH=HADOOP_CLASSPATH:$HIVE_HOME/lib/*

export HIVE_CONF_DIR=/opt/hive/conf

A2:复制hive/lib目录下的hive-common*包到sqoop/lib目录下

——————————————————————————————————

Q:ERROR Could not register mbeans java.security.AccessControlException: access denied

("javax.management.MBeanTrustPermission" "register")

A:将hive-site.xml复制到${SQOOP_HOME}/conf下即可.

A2:添加以下代码到${JDK_HOME}/jre/lib/security/java.policy

grant {
  permission javax.management.MBeanTrustPermission "register";
};

——————————————————————————————————

Q:ERROR exec.DDLTask: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.readerFor(Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/ObjectReader;

A:jackson jar包版本冲突,将sqoop/lib下的jackson.jar备份(mv移动到另一个目录下), 然后将hive/lib包下的jackson.*拷贝到sqoop/lib下。

——————————————————————————————————

Q:IOException throw in HIVE

A:复制hive/lib/log4j-slf4j-impl* 包到sqoop/lib 目录下,或者export HADOOP_CLASSPATH=HADOOP_CLASSPATH:$HIVE_HOME/lib/*

HBase导入使用

sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password rw \
--table customers \
--columns "customer_id,custmoer_firstname,customer_lastname" \ --hbase-table customerinfo \
--column-family CustomerName \
--hbase-row-key customernum \
-m 1

HDFS导出到mysql

sqoop export \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password rw \
--table customers \ #这是目标sql库中的表,表必须已存在
--export-dir /data/sqoop/emp \ #源文件路径
-m 1
#其他的同导入,运行时反过来就可以了
#!/bin/bash
sqoop export \
--connect jdbc:mysql://localhost:3306/mytest \
--username root \
--password rw \
--table customers \ #这是目标sql库中的表,表必须已存在
--fields-terminated-by "\001" \ #默认字段分隔符是\001,如果DDL时指定了则使用指定的分隔符
--export-dir /user/hive/warehouse/customers \ #这是hive中表内容的存储目录,desc formatted tbl
-m 1

Sqoop 数据迁移工具的更多相关文章

  1. Sqoop数据迁移工具的使用

    文章作者:foochane  原文链接:https://foochane.cn/article/2019063001.html Sqoop数据迁移工具的使用 sqoop简单介绍 sqoop数据到HDF ...

  2. Sqoop数据迁移工具

    一.概述 sqoop 是 apache 旗下一款“ Hadoop 和关系数据库服务器之间传送数据”的工具. 导入数据: MySQL, Oracle 导入数据到 Hadoop 的 HDFS. HIVE. ...

  3. 数据迁移工具sqoop

    有问题........数据迁移工具sqoop sqoop安装 [root@sqoop data]# wget  wget http://apache.fayea.com/sqoop/1.4.6/sqo ...

  4. sqoop 数据迁移

    sqoop 数据迁移 1 概述 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具. 导入数据:MySQL,Oracle导入数据到Hadoop的HDFS.HIVE.H ...

  5. sqoop数据校验

    sqoop数据校验 # check data oracle_cnt=$(sqoop eval \ -Dmapred.job.queue.name=${queue} \ --connect ${conn ...

  6. 撸了个 django 数据迁移工具 django-supertube

    撸了个 django 数据迁移工具 django-supertube 支持字段映射和动态字段转化. 欢迎 star,issue https://github.com/FingerLiu/django- ...

  7. 【Hadoop离线基础总结】Sqoop数据迁移

    目录 Sqoop介绍 概述 版本 Sqoop安装及使用 Sqoop安装 Sqoop数据导入 导入关系表到Hive已有表中 导入关系表到Hive(自动创建Hive表) 将关系表子集导入到HDFS中 sq ...

  8. 数据迁移工具Sqoop和DataX功能比较

    本文转载自: http://www.cnblogs.com/panfeng412/archive/2013/04/29/data-migration-tool-sqoop-and-datax.html ...

  9. sqoop数据导出导入命令

    1. 将mysql中的数据导入到hive中 sqoop import --connect jdbc:mysql://localhost:3306/sqoop --direct --username r ...

随机推荐

  1. CS代理+proxychains+nmap进行内网扫描

    前提:拿下边界机之后,进入内网,想用nmap怎么办? CS可以开启代理,但是是socks4的代理,只能使用tcp协议,所以nmap使用的时候要使用-sT选择使用tcp_协议,要使用-Pn不使用ICMP ...

  2. python--可迭代对象、迭代器和生成器

    迭代器 1.什么是迭代器? 不依赖于索引的取值方式 迭代是一个重复的过程,即每一次重复为一次迭代,并且每次迭代的结果都是下一次迭代的初始值 示例: str1 = 'abcde' count = 0 w ...

  3. [SCOI2009] [BZOJ1026] windy数

    windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数?\(1 \le A \le ...

  4. AtCoder Beginner Contest 168

    比赛链接:https://atcoder.jp/contests/abc168/tasks A - ∴ (Therefore) 题意 给出一个由数字组成的字符串 $s$,要求如下: 如果 $s$ 以 ...

  5. P3399 丝绸之路(DP)

    题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚.西亚和欧洲,将那里的香 ...

  6. 牛客网多校第5场 I vcd 【树状数组+离散化处理】【非原创】

    题目:戳这里 学习博客:戳这里 作者:阿狸是狐狸啦 n个点,一个点集S是好的,当且仅当对于他的每个子集T,存在一个右边无限延长的矩形,使的这个矩形包含了T,但是和S-T没有交集. 求有多少个这种集合. ...

  7. python 表达式

    运算符 参考 https://www.runoob.com/python3/python3-basic-operators.html & https://www.runoob.com/pyth ...

  8. Netty(四)基于Netty 的简易版RPC

    3.1 RPC 概述 下面的这张图,大概很多小伙伴都见到过,这是 Dubbo 官网中的一张图描述了项目架构的演进过程 它描述了每一种架构需要的具体配置和组织形态.当网站流量很小时,只需一个应用,将所有 ...

  9. μC/OS-III---I笔记2---实钟节拍

    所谓时钟节拍,就是CPU以固定的频率产生中断,可以看做是系统的心跳.内核利用这个时钟节拍来管理各个任务的一些时间管理比如延时,定时,超时检测,时间轮片调度等.时钟节拍的频率一般10Hz--1000Hz ...

  10. 【rocketmq学习笔记】rocketmq入门学习

    基本介绍 rocketmq是阿里巴巴团队使用java语言开发的一款基于发布订阅模型的分布式消息队列中间件,是一款低延迟,高可用,拥有海量消息堆积能力和灵活拓展性的消息队列. 特点 可以实现集群无单点故 ...