Sqoop 数据迁移工具

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

原文地址:https://www.cnblogs.com/whoyoung/p/11424477.html

时间: 2024-10-09 06:17:36

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

Sqoop数据迁移工具的使用

文章作者:foochane? 原文链接:https://foochane.cn/article/2019063001.html Sqoop数据迁移工具的使用 sqoop简单介绍 sqoop数据到HDFS/HIVE sqoop数据到MySQL 1 sqoop简单介绍 sqoop是apache旗下一款"Hadoop和关系数据库服务器之间传送数据"的工具.用于数据的导入和导出. 导入数据:MySQL,Oracle导入数据到Hadoop的HDFS.HIVE.HBASE等数据存储系统: 导出数据

Sqoop数据迁移工具

一.概述 sqoop 是 apache 旗下一款" Hadoop 和关系数据库服务器之间传送数据"的工具. 导入数据: MySQL, Oracle 导入数据到 Hadoop 的 HDFS. HIVE. HBASE 等数据存储系统:    导出数据:从 Hadoop 的文件系统中导出数据到关系数据库 mysql 等    Sqoop 的本质还是一个命令行工具,和 HDFS, Hive 相比,并没有什么高深的理论. 二.工作机制 将导入或导出命令翻译成 mapreduce 程序来实现   

在Hadoop集群上安装Sqoop数据迁移工具

集群如下: HostName          IP                    Soft                                Processh1                    192.168.1.31    Hadoop,Hbase                          NameNode(Active),DFSZKFailoverController,HMaster(Active)h2                    192.168

『数据库』随手写了一个 跨数据库 数据迁移工具

随手写了一个 跨数据库 的 数据迁移工具:>目前支持 SQLServer,MySql,SQLite: >迁移工具 可以自动建表,且 保留 主键,自增列: >迁移工具 基于 Laura.Source  ORM框架 开发: >迁移工具 支持 崩溃恢复(重启迁移工具,将会继续 未完成的 数据迁移): >每张表一个事务(即使  表中有 >100W 的数据,也是一个事务完成): >迁移后 的 自增列 和 原数据库 保持一致: 只是展示一下,直接上图片: 操作工具: 迁移工具

数据迁移工具使用说明

1.解决什么问题? a, 我们在做ERP升级的时候,很多老的个性化的字段或者表都要迁移到新的库上面去, 步骤一般是用datacompare 比较(由于ERP库比较大,不一定能加载,还需要一堆的设置). 生成的字段也不会插入到data_dict,def_table,def_table表中,也不会生成描述.有些人可能还不会用这个工具 直接人工.这样消耗时间做一些重复性工作,浪费精力. 本工具支持全部自动化生成,并且支持有些不需要同步的字段,可以自动去掉 2.怎么用? 2.1 打开 进入个人小站,打开

达梦数据迁移工具的使用

作为国产数据库,达梦是比较典型的一种,开发工作中会用到其他数据库表迁移到达梦数据库的问题,在此记录一下迁移方法也为他人提供方便. 该工具仅用于其他数据库表及文本文件迁移达梦,或达梦数据库表迁移到其他数据库. 工具: 1)达梦数据迁移工具及达梦数据库用户名.密码等信息 2)其他数据库用户名.密码等信息及待迁移的表: 例  : oracle数据库表example_1 第一步:打开DM数据迁移工具(一般安装达梦数据库时该工具会被一起安装)在迁移管理框中 右键-新建工程(输入工程名称). 迁移-右键新建

sqoop 数据迁移

sqoop 数据迁移 1 概述 sqoop是apache旗下一款"Hadoop和关系数据库服务器之间传送数据"的工具. 导入数据:MySQL,Oracle导入数据到Hadoop的HDFS.HIVE.HBASE等数据存储系统. 导出数据:从Hadoop的文件系统中导出数据到关系数据库. 2 工作机制 将导入或导出命令翻译成mapreduce程序来实现. 在翻译出的mapreduce中主要是对inputformat和outputformat进行定制. 3 sqoop 安装 安装sqoop的

数据迁移工具Sqoop简介

Sqoop是什么?        sqoop是一个用来将hadoop和rdbms(mysql.oracle.postgres)的数据进行相互迁移的工具:他可以将rdbms的数据导入到hadoop的hdfs中,也可以将hdfs的数据导出到rdbms中.Sqoop原理?        Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从rdbms中导入数据到hdfs/把数据从hdfs中导出到rdbms中.sqoop架构非常简单,其整合了Hive.Hbase和Oozie,    通

sqoop数据导出导入命令

1. 将mysql中的数据导入到hive中 sqoop import --connect jdbc:mysql://localhost:3306/sqoop --direct --username root --password 123456 --table tb1 --hive-table tb1 --hive-import -m 1 其中--table tb1是mysql sqoop数据库中的一张表,--hive-table tb1是导入到hive中该表的名字,不需要事先建表. 2. 将hi