sqoop的安装与使用

mac2026-01-07  7

sqoop的安装与使用

文章目录

sqoop的安装与使用一:sqoop是什么:sqoop数据迁移的方向:数据迁入(import):数据迁出(export):sqoop的原理: 二:sqoop安装安装准备:安装节点:安装版本:安装步骤:1)上传2)解压3)配置环境变量4)修改sqoop的配置文件5)将mysql的驱动包 放在sqoop的lib下 三:sqoop的使用1.数据导入(import,mysql-->hdfs|hive|hbase)1)mysql----hdfs1.导入到hdfs的默认路径下2.指定hdfs的路径 和分隔符 进行导入3.指定mysql中的字段进行导入4.指定mysql中的过滤条件导入5.指定sql查询语句导入注意: 2)mysql----hive导入过程1.导入hive的默认库和表下2.指定hive的库和表注意: 3)mysql----hbase4)sqoop的增量数据导入: 2.数据导出(import,hdfs|hive|hbase -->mysql)1)hdfs----mysql2)hive----mysql3)hbase----mysql

一:sqoop是什么:

传统关系型数据库到大数据库平台之间的数据迁移的工具

传统关系型数据库:mysql oracle

大数据平台:hdfs hive hbase

sqoop数据迁移的方向:

数据迁入(import):

mysql | oracle ---->hdfs|hive|hbase

数据迁出(export):

hdfs|hive|hbase---->mysql | oracle

sqoop的原理:

翻译器:将sqoop命令翻译成mr任务执行

数据迁入:mysql—>hdfs

从mysql读取任务,再将数据写出到hdfs

重新定义了FileInuputFormat–DBInputFormat,定制化输入inputformat


数据迁出:hdfs—>mysql

mr任务,从hdfs读取,将数据写出mysql

重新定义输出FileOutputFormat–DBOutputFormat,定制化outputFormat

注意:sqoop只有maptask任务,没有reducetask任务

二:sqoop安装

安装准备:

​ mysql hadoop hive hbase jdk zookeeper 均正常

安装节点:

​ 能够访问 hive|hdfs|hbase的客户端的节点

安装版本:

​ sqoop1 sqoop1.4.6

安装步骤:

1)上传
2)解压
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
3)配置环境变量

vi编辑器打开sqoop.sh文件

sudo vi /etc/profile.d/sqoop.sh

添加环境变量

export SQOOP_HOME=/home/hadoop/apps/sqoop-1.4.6.bin__hadoop-2.0.4-alpha export PATH=PATH:SQOOP_HOME/bin

重新加载sqoop.sh文件

source /etc/profile.d/sqoop.sh

检查是否安装成功

sqoop version
4)修改sqoop的配置文件
/home/hadoop/apps/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf mv sqoop-env-template.sh sqoop-env.sh #设置hadoop的家目录 export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.7.6 #hadoop的core的目录 export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.7.6 #HBASE的安装目录 export HBASE_HOME=/home/hadoop/apps/hbase-1.2.6 #HIVE的家目录 export HIVE_HOME=/home/hadoop/apps/apache-hive-2.3.2-bin #zookeeper的配置文件的目录 export ZOOCFGDIR=/home/hadoop/apps/zookeeper-3.4.10/conf
5)将mysql的驱动包 放在sqoop的lib下

测试sqoop:显示mysql下所有的数据库

sqoop list-databases \ --connect jdbc:mysql://hadoop03:3306/ \ --username root \ --password 123456

三:sqoop的使用

sqoop help 查看帮助文档的 sqoop help command 查看某一个命令的详细使用

1.数据导入(import,mysql–>hdfs|hive|hbase)

–connect 指定mysql连接url–username 指定mysql的用户名–password 指定mysql的密码–table 指定需要导入hdfs的mysql的表-m 指定maptask的个数

1)mysql----hdfs

mysql:help_keyword

1.导入到hdfs的默认路径下
sqoop import \ --connect jdbc:mysql://hadoop03:3306/mysql \ --username root \ --password 123456 \ --table help_keyword \ -m 1

导入默认的hdfs的路径:/user/hadoop/help_keyword/part-m-00000 默认字段之间的分隔符: ,

2.指定hdfs的路径 和分隔符 进行导入

–target-dir 指定hdfs的目标路径 –fields-terminated-by 指定字段之间的分隔符

sqoop import \ --connect jdbc:mysql://hadoop03:3306/mysql \ --username root \ --password 123456 \ --table help_keyword \ --target-dir /user/sqoop/data/my_help_keyword1 \ --fields-terminated-by '\t' \ -m 2
3.指定mysql中的字段进行导入

–columns 字段 指定mysql表字段

sqoop import \ --connect jdbc:mysql://hadoop03:3306/mysql \ --username root \ --password 123456 \ --columns "name" \ --table help_keyword \ --target-dir /user/sqoop/data/my_help_keyword2 \ -m 1
4.指定mysql中的过滤条件导入

–where “” 指定mysql的过滤条件

sqoop import \ --connect jdbc:mysql://hadoop03:3306/mysql \ --username root \ --password 123456 \ --columns "name" \ --where "help_keyword_id>150" \ --table help_keyword \ --target-dir /user/sqoop/data/my_help_keyword3 \ -m 1

where…等价于

select name from help_keyword where help_keyword_id>150;
5.指定sql查询语句导入

–query “sql” 指定sql查询语句 –split-by 指定maptask进行切分的字段 指定逻辑切片切分标准 尽量指定主键

sqoop import \ --connect jdbc:mysql://hadoop03:3306/mysql \ --username root \ --password 123456 \ --target-dir /user/sqoop/data/my_help_keyword4 \ --query 'select help_keyword_id,name from help_keyword where help_keyword_id>200 and $CONDITIONS' \ --split-by help_keyword_id \ --fields-terminated-by '\t' \ -m 4
注意:

1)–query 和 --columns|–where 不可以一起使用的,因为query后面指定sql查询语句,where和columns的作用可以直接在sql语句中实现

2)maptask如何按照 split-by字段切分的? 按照数据的范围区间平均分,例如指定的maptask的个数是4,split-by的字段是id,那么就会按照最大id和最小id之间的范围,将区间分为四个,如果split-by的字段是连续递增的就不会出现数据倾斜,如果不是连续递增的,有可能会出现map端的数据倾斜。

3)sqoop语法要求 sql查询中必须包含$CONDITIONS 在where子句中,如果没有,会报错:

Query [select help_keyword_id,name from help_keyword where help_keyword_id>200] must contain '$CONDITIONS' in WHERE clause.

4)query后面的sql查询语句放在’ '中

2)mysql----hive

导入过程

​ 1)先将数据导入hdfs的默认路径下/user/hadoop/help_keyword 2)hive中建表 3)将hdfs数据加载到hive的表中 默认导入hive的数据库:default 默认导入的hive表名:和mysql中的表名一致 help_keyword

1.导入hive的默认库和表下

注意:要确认默认的导出路径不存在,否则会报错

sqoop import \ --connect jdbc:mysql://hadoop03:3306/mysql \ --username root \ --password 123456 \ --table help_keyword \ --hive-import \ -m 1
2.指定hive的库和表
–hive-overwrite 覆盖导入–create-hive-table 创建hive中的表–hive-database 指定hive的数据库名–hive-table 指定hive的表名–delete-target-dir 删除目标路径 sqoop import \ --connect jdbc:mysql://hadoop03:3306/mysql \ --username root \ --password 123456 \ --table help_keyword \ --fields-terminated-by "\t" \ --lines-terminated-by "\n" \ --hive-import \ --hive-overwrite \ --create-hive-table \ --delete-target-dir \ --hive-database mydb_test \ --hive-table new_help_keyword
注意:

在hive中自动创建表 不会创建数据库的 数据库手动创建 create database mydb_test;

3)mysql----hbase

–hbase-table 指定hbase的表名–column-family 指定列族的–hbase-row-key 指定hbase的数据rk

手动创建hbase的表 create “test_sqoop”,“info”

sqoop import \ --connect jdbc:mysql://hadoop03:3306/mysql \ --username root \ --password 123456 \ --table help_keyword \ --hbase-table test_sqoop \ --column-family info \ --hbase-row-key help_keyword_id

4)sqoop的增量数据导入:

全量数据导入|增量数据导入 全量数据导入:每次导入一个表的全部的数据 增量数据导入: 每次只导入新增的数据 Incremental import arguments:

–check-column 指定增量的参考字段 一般字段取主键–incremental 指定增量导入的类型 ‘append’ 追加–last-value 指定参考字段的上次的最后一个值

增量导入: 指定字段的上一次最后一个值的下一个开始导入

sqoop import \ --connect jdbc:mysql://hadoop03:3306/mysql \ --username root \ --password 123456 \ --table help_keyword \ --target-dir /user/sqoop/data/my_help_keyword5 \ --incremental append \ --check-column help_keyword_id \ --last-value 300 \ -m 1

类似于sql:

select * from help_keyword where help_keyword_id>300;

2.数据导出(import,hdfs|hive|hbase -->mysql)

–export-dir 指定hdfs的文件的路径 –fields-terminated-by hdfs文件的字段之间的分隔符

1)hdfs----mysql

sqoop export \ --connect jdbc:mysql://hadoop03:3306/test_sqoop \ --username root \ --password 123456 \ --table sqoopstudent \ --export-dir /hive_data/student.txt \ --fields-terminated-by ','

注意: mysql的库和表 都需要 手动手动创建

create database test_sqoop; use test_sqoop; CREATE TABLE sqoopstudent ( id INT NOT NULL PRIMARY KEY, name VARCHAR(20), sex VARCHAR(20), age INT, department VARCHAR(20) );

2)hive----mysql

–export-dir 指定hive的表在hdfs的存储路径 –input-fields-terminated-by 指定hive的hdfs的文件的字段分割符

sqoop export \ --connect jdbc:mysql://hadoop03:3306/test_sqoop \ --username root \ --password 123456 \ --table uv_info \ --export-dir /user/hive/warehouse/mydb_test.db/new_help_keyword \ --input-fields-terminated-by '\t'

手动建表:

CREATE TABLE uv_info ( id INT NOT NULL PRIMARY KEY, name VARCHAR(200) );

3)hbase----mysql

没有一种直接的方式 可以将hbase的数据直接导出mysql中,不支持

间接方式: hbase----hive----mysql

最新回复(0)