Sqoop学习笔记——关系数据库与hdfs间数据迁移

一、安装:

上传到hadoop集群的某一个节点上,将sqoop压缩包解压即可直接使用;

二、配置:

将需要连接的数据库(比如Oracle、MySQL)的连接驱动拷贝到 sqoop目录的lib里;

三、配置mysql远程连接

GRANT ALL PRIVILEGES ON ekp_11.* TO ‘root‘@‘192.168.1.10‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION;

FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION;

FLUSH PRIVILEGES

四、使用:

第一类:关系型数据库中的数据导入到HDFS上

1.1使用默认输出路径、指定导出的字段、设置map数量为1:

./sqoop import --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456  --table job_log --columns ‘fd_id, fd_start_time, fd_end_time, fd_subject,fd_success‘ -m 1

执行成功后,会在hdfs的/user/目录下会根据操作的用户名自动生成同名的root目录,root 目录下会生成同表名的job_log 目录,在job_log 目录下就是真正的导入到hdfs的数据文件。如下图:

1.2指定输出路径、指定数据导入后的分隔符、指定Map数量为1:

./sqoop import --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456  --table job_log --target-dir ‘/sqoop/jl‘ --fields-terminated-by ‘\t‘ -m 1

执行成功后,会在hdfs的根目录下创建我们的指定目录/sqoop/jl ,在jl目录下就是真正的导入到hdfs的数据文件。查看导入的数据文件内容,数据的列分隔符根据我们的要求使用了制表符分割,如下图:

1.3增加where条件, 注意:条件必须用引号引起来

./sqoop import --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456  --table job_log --where ‘ fd_start_time >"2015-06-00 00:00:00" ‘ --target-dir ‘/sqoop/jl2‘ -m 1

1.4增加query语句(使用 \ 将语句换行)

./sqoop import --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456 --query ‘SELECT * FROM job_log where fd_start_time >"2015-06-00 00:00:00" AND $CONDITIONS‘ --target-dir ‘/sqoop/jl3‘ -m 1

注意:使用--query这个命令的时候,需要注意where后面的参数,AND $CONDITIONS这个参数必须加上,而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上\即\$CONDITIONS。

1.5指定Map数量 -m

./sqoop import --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456  --table job_log --target-dir ‘/sqoop/jl4‘ --fields-terminated-by ‘\t‘ -m 4 --split-by fd_start_time

注意:如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},当设定的map 数量大于1时,需要加上参数 --split-by ${tablename.column} ,指定多个map任务执行的内容划分。

执行结果如下图:

这里发现个小问题,我是按时间来分割的,出现了数据丢失的问题。可以看到part-m-0001文件大小为0,没有数据内容。

指定多个map,并根据fd_id进行分割:

./sqoop import --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456  --table job_log --target-dir ‘/sqoop/jl4‘ --fields-terminated-by ‘\t‘ -m 4 --split-by fd_id

第二类:将HDFS上的数据导出到关系型数据库中(不要忘记指定分隔符)

2.1首先在关系数据库中创建好表空表job_log_bak :

create table job_log_bak select fd_id,fd_start_time,fd_end_time,fd_subject,fd_success from job_log where fd_id =‘1‘

然后执行命令,将hdfs上的数据导入到该表中:

./sqoop export --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456 --export-dir ‘/user/root/job_log‘ --table job_log_bak -m 1 --fields-terminated-by ‘,‘

第三类:将关系型数据库的数据导出到hive

3.1将数据库的表结构复制到hive中,只是复制表的结构:

./sqoop create-hive-table --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --table job_log --username root --password 123456 --hive-table job_log

执行成功后,其实是在hdfs 的hive 目录上创建了一个 job_log 目录,如下图:

3.2从关系数据库导入文件到hive中

./sqoop import --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456 --table job_log --hive-import -m 1 --fields-terminated-by ‘\t‘

执行成功后,会在hive的默认路径下/user/hive/warehouse/下首先创建表目录job_log,然后在该表目录下生成导入的数据的文件如part-m-00000。具体效果如下图:

注意:如果未指定字段的分隔符,将使用hive默认的分隔符 ‘\001‘

第四类:将hive的数据导出到关系型数据库

./sqoop export --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456 --table job_log_bak --export-dir /user/hive/warehouse/job_log/  -m 1 --input-fields-terminated-by ‘\t‘  --fields-terminated-by ‘,‘

注意:需要在执行的时候给sqoop增加参数 --input-fields-terminated-by,告诉sqoop读取的文件的分隔符,使它能够正确的解析文件字段。

其他使用:

列出mysql数据库中的所有数据库

./sqoop list-databases --connect jdbc:mysql://192.168.1.10:3306/ --username root --password 123456

连接mysql并列出ekp_11数据库中的表

./sqoop list-tables --connect jdbc:mysql://192.168.1.10:3306/ekp_11 --username root --password 123456

未完待续。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-01 02:58:30

Sqoop学习笔记——关系数据库与hdfs间数据迁移的相关文章

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

C++学习笔记之由文本文件读取数据到vector模板建立的二维数组 并存储为新的文本文件

阅读本文可首先参考: C++学习笔记之输入.输出和文件 测试数据: 1 /*读取txt文件到二维数组*/ 2 #include <iostream> 3 #include <fstream> 4 #include <vector> 5 #include <string> 6 7 using namespace std; 8 9 typedef vector< vector<int> > D2array; //二维数组 10 typed

UI学习笔记---第十四天数据持久化

一.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内斗放在了统一的文件夹目录下 沙盘路径的位置 1. 通过Finder查找程序沙盘相对路径 ~/Library/Application Support/iPhone Simulator 2. 通过代码查找程序沙盘相对路径 NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearc

sqlite学习笔记6:更新表数据

一 条件判断 在SQL中条件判断使用where,相当于其他变成语言中的if,基本用法如: SELECT column1, column2, columnN FROM table_name WHERE [condition] 另外,SQL支持数学运算,逻辑运算,位于运算等等,均可放在WHERE子句中. 二 更新表 基本语法如下: UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE

《MyCat 学习笔记》第八篇.数据分片 之 求摸运算分片

1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值取摸应该是最简单的一种. 优点:数据离散概率较为平均,可以有效的提高应用的数据吞吐. 缺点:比较明显,后期数据运维与迁移比较困难.好在Mycat有对应的解决方案,具体后期验证或可直接参考Mycat权威指南相应章节. 2 环境说明 参考  <MyCat 学习笔记>第六篇.数据分片 之 按月数据分片  http://www.cnblogs.com/kaye0110/p/5160826.html 3 参数配置 3.1 server.xm

Accelerated C++学习笔记5—&lt;组织程序和数据&gt;

第4章  组织程序和数据 从前面的学习中,我们可以发现程序并不是我们所想的那么简短,他们都有一个共同的特性,那就是 1)都能解决某些特定类型的问题 2)与其他的大多数工具都互相独立 3)都具有一个自己的名称 C++中提供两种基本的方法来让我们组织大型的程序,函数(子程序)和数据结构. 1.组织计算 1)计算总成绩 子函数grade <span style="font-family:KaiTi_GB2312;">//根据学生的期中考试.期末考试.家庭作业成绩来计算总成绩 do

【Spring学习笔记-MVC-4】返回Json数据-方式2

摘要 本文讲解另外一种利用spring MVC返回json数据的方法. 前文回顾 在<[Spring学习笔记-MVC-3]返回Json数据-方式1>中介绍了通过: @ResponseBody声明返回值: 配置<mvc:annotation-driven />: 来返回json数据.效果如下:   ==>, 从上面的效果看,只能返回一个对象,不能返回多个对象,不能做到形如下图的返回结果, 存在局限性(可能可以返回多个,自己不知道如何实现). 下面介绍的方式2,利用spring

Mysql学习笔记(三)对表数据的增删改查。

写在前面:(一些牢骚,可以直接跳到分割线后) 太过敏感的人不会快乐,不幸的是我正是这种性格的人. 从培训机构毕业后,迫于经济方面的压力,和当时的班里的一个同学住在了一起,我们在一个公司上班.谁知道这都是不开心生活的源头,从每天早晨开始心情就很糟糕.他是个脾气很慢的人,我是个急脾气,特别是在早上上班的时候.由此种种吧,实在是不胜枚举.算了,还是不说了,太痛苦了,我不太喜欢说别人的坏话.我是学心理学的,已经用各种方法去安慰自己,但是都不太奏效. 回想以往和朋友的交往中,我虽然不算十分合群的人,但绝对

Sqoop学习笔记_Sqoop的基本使用一

Sqoop   关系DB与Hive/HDFS/HBase导入导出的Mapreduce框架. http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.4-cdh5.1.0/SqoopUserGuide.html   ETL: Extraction-Transformation-Loading的缩写,数据提取.转换(业务处理)和加载. 文件数据源:hive load命令 关系DB数据源:sqoop抽取 Sqoop import数据到HDFS/Hive/Hba