Sqoop导入导出模板(点击了解更多)Sqoop 导入导出操作,从 mysq 导入数据到 hive,从 hive 导出数据到 mysqlhttps://blog.csdn.net/qq_17685725/article/details/122904237
1、sqoop简介
Apache Sqoop 是在 Hadoop 生态体系和 RDBMS 体系之间传送数据的一种工具。Sqoop 工作机制是将导入或导出命令翻译成 mapreduce 程序来实现。在翻译出的 mapreduce 中主要是 inputformat 和 outputformat 进行定制。
- Hadoop 生态系统包括:HDFS、Hive、Hbase 等
- RDBMS 体系包括:Mysql、Oracle、DB2 等
- Sqoop 可以理解为:“SQL 到 Hadoop 和 Hadoop 到 SQL”
站在 Apache 立场看待数据流转问题,可以分为数据的导入导出:
- import:数据导入(RDBMS 到 Hadoop)
- export:数据导出(Hadoop 到 RDBMS)
2、Sqoop安装
注:安装 sqoop 的前提是已经具备 java 和 hadoop 的环境:
2.1 下载sqoop安装包:
http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.14.0.tar.gz
2.2 将安装包上传到 linux 中, 并解压(建议放置在 hive 和 hadoop 同服务器的路径下):
tar -zxvf /export/software/sqoop-1.4.6-cdh5.14.0.tar.gz -C /export/server/
- 2.2.1 创建软连接
ln -s /export/server/sqoop-1.4.6-cdh5.14.0/ /export/server/sqoop
- 2.2.2 配置环境变量
vim /etc/profile # 添加以下内容: export SQOOP_HOME=/export/server/sqoop
2.3 修改配置文件 :
cd $SQOOP_HOME/conf
mv sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
# 修改一下三个位置:
export HADOOP_COMMON_HOME= /export/server/hadoop-2.7.5
export HADOOP_MAPRED_HOME= /export/server/hadoop-2.7.5
export HIVE_HOME= /export/server/hive
2.4 加入 mysql 的 jdbc 的驱动包:
cp /hive/lib/mysql-connector-java-5.1.32.jar $SQOOP_HOME/lib/
2.5 验证启动 :
bin/sqoop list-databases \
--connect jdbc:mysql://localhost:3306/ \
--username root --password 123456
# 本命令会列出所有mysql的数据库。如果可以显示, 整个Sqoop安装工作完成。
3、Sqoop命令参数
Sqoop 的数据同步支持2种业务场景,在 Linux 中输入 sqoop help 命令可以查看到。
- 导入: 从 RDBMS 到 HDFS/Hive,命令是 sqoop import 开头
- 导出: 从 HDFS/Hive 到 RDBMS,命令是 sqoop export 开头
注:再在 Linux 中输入 sqoop import –help 或 sqoop export –help 可以查看到具体的用法。
3.1 公用参数:数据库连接
参数 |
说明 |
--connect |
连接关系型数据库的URL |
--help |
打印帮助信息 |
--driver |
JDBC的driver class |
--password |
连接数据库的密码 |
--username |
连接数据库的用户名 |
--verbose |
在控制台打印出详细信息 |
3.2 公用参数:import 导入
参数 |
说明 |
--enclosed-by <char> |
给字段值前加上指定的字符 |
--escaped-by <char> |
对字段中的双引号加转义符 |
--fields-terminated-by <char> |
设定每个字段是以什么符号作为结束,默认为逗号 |
--lines-terminated-by <char> |
设定每行记录之间的分隔符,默认是\n |
--mysql-delimiters |
Mysql默认的分隔符设置,字段之间以逗号分隔,行之间以\n分隔,默认转义符是\,字段值以单引号包裹。 |
--optionally-enclosed-by <char> |
给带有双引号或单引号的字段值前后加上指定字符。 |
-m |
指定并行处理的MapReduce任务数量。 -m不为1时,需要用split-by指定分片字段进行并行导入,尽量指定int型。 |
--split-by id |
如果指定-split by, 必须使用$CONDITIONS关键字, 双引号的查询语句还要加\ |
--query或--e <statement> |
将查询结果的数据导入,使用时必须伴随参--target-dir,--hcatalog-table,如果查询中有where条件,则条件后必须加上CONDITIONS关键字。 如果使用双引号包含sql,则CONDITIONS前要加上\以完成转义:\$CONDITIONS |
3.3 公用参数:export 导出
参数 |
说明 |
--input-enclosed-by <char> |
对字段值前后加上指定字符 |
--input-escaped-by <char> |
对含有转移符的字段做转义处理 |
--input-fields-terminated-by <char> |
字段之间的分隔符 |
--input-lines-terminated-by <char> |
行之间的分隔符 |
--input-optionally-enclosed-by <char> |
给带有双引号或单引号的字段前后加上指定字符 |
3.4 公用参数:hive
参数 |
说明 |
--hive-delims-replacement <arg> |
用自定义的字符串替换掉数据中的\r\n和\013 \010等字符 |
--hive-drop-import-delims |
在导入数据到hive时,去掉数据中的\r\n\013\010这样的字符 |
--map-column-hive <arg> |
生成hive表时,可以更改生成字段的数据类型 |
--hive-partition-key |
创建分区,后面直接跟分区名,分区字段的默认类型为string |
--hive-partition-value <v> |
导入数据时,指定某个分区的值 |
--hive-home <dir> |
hive的安装目录,可以通过该参数覆盖之前默认配置的目录 |
--hive-import |
将数据从关系数据库中导入到hive表中 |
--hive-overwrite |
覆盖掉在hive表中已经存在的数据 |
--create-hive-table |
默认是false,即,如果目标表已经存在了,那么创建任务失败。 |
--hive-table |
后面接要创建的hive表,默认使用MySQL的表名 |
--table |
指定关系数据库的表名 |