mysql导入hdfs指定位置_利用sqoop实现mysql与Hdfs间的数据的导入导出

本文介绍了如何安装配置sqoop并连接MySQL,以及如何使用sqoop将MySQL中的数据导入到HDFS或Hive中。详细步骤包括设置环境变量、添加MySQL驱动、创建数据源、执行导入导出命令等。还提到了增量导入和数据导出的操作,并解释了相关注意事项。
摘要由CSDN通过智能技术生成

安装配置sqoop

原料:

1.sqoop tar 包

2.mysql jar包[最好用高版本的,我用的是5.1.32版]

步骤1

解压tar包,指定安装路径。

2配置环境变量,在/etc/profile文件里指定家目录和path目录。

3.将mysql jar 驱动包放在sqoop安装目录的lib目录下。

4测试   sqoop list-databases jdbc:mysql://master:3306/sqoopDB   –username sqoop -P

5输入密码。如果能显示所有数据库,则证明sqoop安装配置成功,并且与mysql建立链接,剩下要做的就是利用sqoop实现数据的导入导出。

qqEVza.png qoop与MySQL 建立连接

创建数据源

接下来便是在Linux上的MySQL中创建一个数据库,我这里创建的是sqoopDB数据库,并创建一个sqoop用户并授予权限。

create user ‘uername’ indentified by’password’

grant all privileges on sqoopDB.* to userame@ % indentified by ‘password’

再然后对权限的刷新

flush privileges;

r26fiu.png

接着在这个sqoopDB数据库创建表 并添加数据。添加完成后 使用sqoop将MySQL中数据上传到hdfs 或者是hive 中去。

sqoop导入数据命令

上传到hdfs命令: sqoop import –connect jdbc:mysql://mysql.server.ip:3306/sqoopDB –username ‘username’ -P –table ‘tablename’  –target-dir /user/sqoop

要注意的是hdfs中的user/sqoop中的sqoop不能存在,要是存在就无法自动创建 就会报错。

eMjQRr.png 上传到hdfs中的数据

上传到hive 命令:sqoop import –connect jdbc:mysql://mysql.server.ip:3306/sqoopDB

–table ‘tablename’  –username ‘username’ -P   –hive-import -m 1

–hive-import-m 1  是指定有一个map任务。

EBbuqe.png 上传到hive中的数据

如果源数据发生改变了怎么办,比如发生insert update操作。这时候需要增量导入数据操作

目前sqoop支持两种增量导入,分别为append和lastmodified

append主要针对insert操作

lastmoified主要针对update操作

实现数据导入hive仓库分三步骤

1.将相应的表数据导入到hdfs中

2.把表数据类型映射为hive数据类型。然后根据表结构在hive上执行create table 操作创建hive表。

3.在hive中执行load data input 语句将hdfs上的表数据移动到hive数据仓库目录【该目录位置有定义在文件hive_home/conf/hive/hive_site.xml中的属性${hive.metastore.warehose.dir}设置】

sqoop-import-all -tables 操作

这个命令是把MySQL中的某一个数据库中的所有的表数据导入到hdfs中,每一个表数据分别位于hdfs上的一个单独目录下。

执行该命令操作必须满足三个条件。

1.要有主键,但主键不是组合键。

2,不能有任何子句。

3,所有表中的所有列都将被导入到hdfs上不能出现列数据丢失,否则不能导入。

vAFJR3.png 现在只有一个表

beyUF3.png 又添加2个表

此时需要把添加的两个表同时导入到hdfs 上

命令操作:sqoop import-all-tables –connect jdbc:mysql://192.168.145.100:3306/sqoopDB –username sqoop -P

数据的导出

sqoop -export 与sqoop-import 操作功能相反的。 即 吧HDFS HIVE HBase 上的数据导出数据库中,条件是数据库中的表必须存在,表结构也要相同。sqoop-export 支持三种模式,insert update call  执行导出操作时,sqoop将HDFS上输入文件中的数据根据用户指定的分隔符解析成一系列的记录和记录字段,sqoop export 操作默认将这些记录以insert方式插入到指定的数据库目标表中,用户可以指定update方式替换数据库系统中已经存在的记录,或指定call模式调用数据库系统存储过程。

mq26Zz.png 数据导出

sqoop 有很多命令,也有很多组合选项,一时半会记不来,也记不住,需要积累的,只要知道怎么操作,需要达成什么效果,到时候在上网搜命令。

au2UVb.png 数据导出结果表

最后有两个命令要注意

1 sqoop list-databases 这个在前面在我测试时候用到了,它是用于列举出指定数据库服务器中的数据库模式。

2.sqoop list-tables 用于列决出指定数据库服务器中的数据表。

eg:  sqoop list -tables –connect jdbc:mysql://192.168.145.100/sqoopDB –username sqoop -P

I3eyAj.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值