sqoop 数据迁移

sqoop 数据迁移

1 概述

  sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。

  导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统。

  导出数据:从Hadoop的文件系统中导出数据到关系数据库。

2 工作机制

  将导入或导出命令翻译成mapreduce程序来实现。

  在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。

3 sqoop 安装

  安装sqoop的前提是已经具备java和hadoop的环境。

  3.1 下载并解压

     http://ftp.wayne.edu/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

  3.2 修改配置文件 

$ cd $SQOOP_HOME/conf

$ mv sqoop-env-template.sh sqoop-env.sh

打开sqoop-env.sh并编辑下面几行:

export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.1/

export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.1/

export HIVE_HOME=/home/hadoop/apps/hive-1.2.1

  3.3 加入mysql的jdbc驱动   

cp  ~/app/hive/lib/mysql-connector-java-5.1.28.jar   $SQOOP_HOME/lib/

  3.4 启动验证

$ cd $SQOOP_HOME/bin
$ sqoop-version

  输出:

  15/12/17 14:52:32 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6

  Sqoop 1.4.6 git commit id 5b34accaca7de251fc91161733f906af2eddbe83

  Compiled by abe on Fri Aug 1 11:19:26 PDT 2015

  到这里,整个Sqoop安装工作完成

4 数据导入

  4.1 下面的命令用于从MySQL数据库服务器中的emp表导入HDFS

$bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test \
--username root --password root --table emp --m 1

  4.2 导入数据到HIVE

bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --hive-import --m 1

  4.3 导入到HDFS指定目录

--target-dir <new or exist directory in HDFS>

  下面的命令是用来导入emp_add表数据到‘/queryresult‘目录。

bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test \
--username root --password root --target-dir /queryresult --table emp --m 1

  4.4 导入表数据子集

  我们可以导入表的使用Sqoop导入工具,"where"子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

  where子句的语法如下。 

--where <condition>

  下面的命令用来导入emp_add表数据的子集。子集查询检索员工ID和地址,居住城市为:Secunderabad 

bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test \
--username root --password root --where "city =‘sec-bad‘" --target-dir /wherequery --table emp_add --m 1

  4.5 增量导入

  增量导入是仅导入新添加的表中的行的技术。它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入。下面的语法用于Sqoop导入命令增量选项。  

--incremental <mode>
--check-column <column name>
--last value <last check column value>

  假设新添加的数据转换成emp表如下

  1206, satish p, grp des, 20000, GR

  下面的命令用于在EMP表执行增量导入

bin/sqoop import --connect jdbc:mysql://hdp-node-01:3306/test \
--username root --password root --table emp --m 1 --incremental append --check-column id --last-value 1205

5 数据导出

  将数据从HDFS导出到RDBMS数据库。

  导出前,目标表必须存在于目标数据库中。

  默认操作是从将文件中的数据使用INSERT语句插入到表中。

  更新模式下,是生成UPDATE语句更新表数据。

  语法: 

$ sqoop export (generic-args) (export-args) 

  5.1 将hdfs数据导出到mysql

    1)首先在mysql中创建目标表  

 CREATE TABLE employee (
   id INT NOT NULL PRIMARY KEY,
   name VARCHAR(20),
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));

    2)执行导出命令 

bin/sqoop export --connect jdbc:mysql://hdp-node-01:3306/test \
--username root --password root --table employee --export-dir /user/hadoop/emp/

6 sqoop 作业

  6.1创建作业

    在这里,我们创建一个名为myjob,这可以从RDBMS表的数据导入到HDFS作业。  

bin/sqoop job --create myimportjob -- import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --m 1

    该命令创建了一个从db库的employee表导入到HDFS文件的作业。

  6.2 验证作业(--list) 

$ sqoop job --list

  它显示了保存作业列表。

  Available jobs:

 myjob

  ‘--show’ 参数用于检查或验证特定的工作,及其详细信息  

$ sqoop job --show myjob

  6.3 执行作业

  ‘--exec’ 选项用于执行保存的作业。下面的命令用于执行保存的作业称为myjob。 

$ sqoop job --exec myjob
时间: 2024-10-11 05:40:13

sqoop 数据迁移的相关文章

sqoop数据迁移

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

sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)

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

【源】从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上

阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇,我们介绍了Hive的表操作做了简单的描述和实践.在实际使用中,可能会存在数据的导入导出,虽然可以使用sqoop等工具进行关系型数据导入导出操作,但有的时候只需要很简便的方式进行导入导出即可   下面我们开始

“数据迁移”考虑

1.hortonwork 和 cloudera 比较 除了功能,还需要对维护性能进行比较 2.环境部署需要细化 部署哪些组件 部署哪些webservice服务 各节点之间如何规划 内存磁盘资源如何分配 是否开启组件高可用 若开启组件高可用,是否考虑部署2套zookeeper 离线集群与在线集群如何互通 3.大数据组件中存储列表应该列出 列出存储的表 给出各表的数据逻辑,即从和数据源来,可如何使用 是否需要考虑历史数据,是否考虑使用拉链表 4.数据迁移方案需要优化 迁移时是否需要停服务  (NO)

数据迁移心得

  前几天出差,去客户现场帮忙迁移数据,经过几天的奋战,终于将迁移数据自动化起来,并且可以日跑批操作,这里小编就跟大家分享下,这其中踩过的坑(也可能是实战经验不丰富导致).  首先,荣小编我抱怨一下,不是自己熟悉的开发环境真的有些难过,给一台电脑,咱不说没有IDE,就连java都没有安装,连接数据库的工具也没有,唯一值得庆幸的是有xshell,但是完全不符合个人快捷键的喜好,没办法,想要开发高效,自己动手配置吧.单单是配置这些开发环境就整整牺牲了小编一上午的时间,还好后期开发有明显的提速.中午吃

大数据--sqoop数据导入导出

1.在MySQL中创建表student 2.在MySQL中创建表student4 3.在hive中创建表student3 ------------------------------------------------------------------------------ hive (default)> create table student3(id int,name string,sex string) > row format delimited fields terminated

Code First Migrations更新数据库结构(数据迁移) 【转】

背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成. 要求 已安装NuGet 过程示例 [csharp] view plaincopyprint? //原model //原model [csharp] view plaincopyprint? us

数据迁移,iis的各种坑

最近在搞iis发布  本来在家里实验过很多次 都是可以的 觉得很容易!但是到客户现场去试的时候发现各种坑 在这里给大家说说  望大家注意点哈! 首先:数据迁移先是备份数据库,然后再还原  这个地方一定要注意数据库版本问题,比如你如果在sqlserver2012上备份的,到sqlserver2008版本上还原就不行,因为这是高版本还原到低版本了 就不兼容,但是低版本还原到高版本就可以! 第二步:还原好了数据库,vs代码要配置服务器了,也要注意个问题:因为vs配置的是sqlserver的sql认证账

EF数据迁移,未将对象引用设置到对象实例

现象: 执行Enable-Migrations -force时就报"未将对象引用设置到对象实例"的异常: DbProviderServicesExtensions.GetProviderManifestTokenChecked 原因: 1.项目启动项的App.config或web.config里面没有配置 entityFramework节点或connectionStrings节点,EF在数据迁移时找不到数据库连接串信息 2.项目启动项配置错误,应该选择有entityFramework节