当前位置:   article > 正文

将mysql中的数据导入到hdfs中_将mysql数据库中“major”数据库下的“school”表数据导入hdfs的“/major/sc

将mysql数据库中“major”数据库下的“school”表数据导入hdfs的“/major/school

将mysql中的数据导入到hdfs

mysql中的数据导入到hdfs中,需要借助一个工具sqoop完成,sqoop的安装和简介请点大数据必学框架-sqoop

一、配置sqoop环境

为了能够让sqoop识别到hdfs,需要在配置文件中指定位置,conf目录下的sqoop-env.sh

export HADOOP_COMMON_HOME=/opt/module/hadoop
export HADOOP_MAPRED_HOME=/opt/module/hadoop
export ZOOKEEPER_HOME=/opt/module/zookeeper
export ZOOCFGDIR=/opt/module/zookeeper/conf
  • 1
  • 2
  • 3
  • 4

上述的配置解释

之所以配置HADOOP_MAPRED_HOME,是因为sqoop导入导出数据走的是map-reduce,因为只涉及到map并不涉及到reduce,所以sqoop导入导出数据可以简单的理解为走的是map方式

在安装好sqoop之后,将jdbc驱动拷贝到sqoop的lib目录下,可以测试是否环境配置没有问题,输入命令

bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password password
  • 1

list-databases就是sqoop的一个命令,命令后跟上参数即可,参数类型可以看作是kv类型,中间使用空格分隔

如果打印结果为一下,就证明环境没有问题
在这里插入图片描述

然后就可以进行mysql和hdfs之间的数据导入和导出问题

二、mysql数据导入到hdfs中

首先需要了解sqoop的两个命令:import 和 export

**import:**将mysql中的数据导入到hdfs中

**export:**将hdfs中的数据导入到mysql中

将mysql中数据导入到hdfs中

需求:现在需要将mysql中的gmall数据库中的user_info表中的数据导入到hdfs中,而且只导入id在1~20之间的id和login_name

bin/sqoop import \
--connect jdbc:mysql://hadoop103:3306/gmall \
--username root \
--password 000000 \
--table user_info \
--columns id,login_name \
--where "id>=1 and id<=20" \
--target-dir /user_info \
--delete-target-dir \
--fields-terminated-by '\t' \
--num-mappers 2 \
--split-by id
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

参数解释:

connect:mysql的连接地址,到数据库名

username:用户名

password:用户名密码

table:要导入的表名

columns:导入的字段

where:过滤条件

target-dir:要导入hdfs的目标路径

delete-target-dir:若目标路径存在删除

fields-terminated-by:字段间的分割字符

num-mappers:map的个数

split-by:根据那个字段进行切片,sqoop的切片个数和map的个数一致,切片规则是取到字段的最大值和最小值,取中值进行切分,这个字段可以任意选择,但是一般选择主键

在执行完上面的命令之后,就会走一个mapreduce流程,执行完毕就会在hdfs中看到对应的文件夹

三、改进

--table user_info \
--columns id,login_name \
--where "id>=1 and id<=20" \
  • 1
  • 2
  • 3

上述的这三个参数其实可以使用sql语句替代,相应的命令是

--query 'select id,login_name from user_info where id>=1 and id<=20 and $CONDITIONS'
  • 1

注意:最后面得 C O N D I T I O N S 是 必 须 要 带 有 的 , 可 以 简 单 的 理 解 为 是 一 个 占 位 符 , 用 于 在 s q o o p 的 切 片 时 使 用 , CONDITIONS是必须要带有的,可以简单的理解为是一个占位符,用于在sqoop的切片时使用, CONDITIONSsqoop使CONDITIONS会根据切片规则将sql语句的过滤条件修改为各分区内的过滤条件,如果不这样,那么会每个分区都会执行一遍select id,login_name from user_info where id>=1 and id<=20,就造成了重复导入,而且,如果语句后面不带$CONDITIONS,就会报错
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/519560
推荐阅读
相关标签
  

闽ICP备14008679号