
- 作 用
- 处理大数据
- 起始时间
- 2009年
- 外文名
- sqoop
- 发 音
- skup
-
Sqoop
2018-09-05 20:17:58Sqoop文章目录
一、简介
Sqoop是一种在Hadoop与关系型数据库或主机之间传输数据的工具。一般来说,外界数据加载到HDFS中,有如下几种方法:
- 数据源为日志,一般使用Flume + Kafka;
- 数据源为RDBMS,一般使用Sqoop;
- 数据源为文件,一般用kettle直接加载;
Sqoop支持的数据源:MySQL/ SQL Server/ Oracle/ ProtgreSQL/ HDFS/ Hive/ HBase;从使用上来看,Sqoop基本不需要代码开发,用命令行就可以,可以说使用难度较小。
Reference:
二、命令
Sqoop是一系列工具的集合,以下总结相关工具的具体调用命令。
sqoop version # 显示版本信息 sqoop help # 显示帮助信息 sqoop help <tool_name> # 显示具体命令的帮助信息 sqoop help import # eg:显示import工具的帮助信息 sqoop import # RDBMS -> HDFS,用的最多的命令 sqoop export # HDFS -> RDBMS,用的最多的命令 sqoop codegen # 获取表的数据,并打jar包 sqoop create-hive-table # 创建Hive表 sqoop eval # 查看SQL执行结果 sqoop import-all-tables # 将数据库中所有数据导入HDFS sqoop job # 生成一个Sqoop任务 sqoop list-databases # 列出所有数据库名 sqoop list-tables # 列出某个库内部的所有表名 sqoop merge # 将HDFS不同目录下的数据,合并到一个目录中 sqoop metastore # 记录Sqoop任务的元数据信息 # 显示MySQL地址下所有库名 sqoop list-databases \ --connect jdbc:mysql://<host>:<port> \ --username <username> \ --password <password> # 显示MySQL地址下,某数据库所有表名 sqoop list-tables \ --connect jdbc:mysql://<host>:<port>/<table_name> \ --username <username> \ --password <password>
三、参数
1. 公用参数
--connect # 连接RDBMS的url --connection-manager # 制定要使用的管理类 --driver # JDBC的驱动类 --help # 打印帮助信息 --username # 连接数据库的用户名 --password # 连接数据库的密码 --verbose # 在控制台打印出详细信息 --direct # 使用直连的方式,加快传输速度;但目前仅对MySQL/ PostgreSQL有效,分别使用直连的MySQL_dump/ pg_dump
2. sqoop import
RDBMS -> HDFS;其中,RDBMS中的目标表必须已经存在
--fields-terminated-by <char> # 指定Hive表中字段的分隔符 --lines-terminated-by <char> # 指定Hive表中行的分隔符 # demo(全量导入Hive,实测有效);当然也有其余的配置,如columns/ call等,这里略过不表 sqoop import \ --connect jdbc:sqlserver://172.16.100.241:1433 \ --table PP_JD_RPT.dbo.rpt_24028 \ --username <username> \ --password <password> \ --driver com.microsoft.sqlserver.jdbc.SQLServerDriver \ --direct \ --num-mappers 1 \ --hive-import \ # 指定导入Hive --create-hive-table \ # 创建Hive表,此前Hive表不存在 --delete-target-dir \ # RDBMS数据加载到HDFS之后,删除 --hive-database rpt_jd \ # hive库名 --hive-table rpt_24028_1029 # hive表名 # demo(增量导入到Hive) sqoop import \ --connect jdbc:sqlserver://172.16.100.241:1433 \ --table PP_JD_RPT.dbo.rpt_24028 \ --username <username> \ --password <password> \ --driver com.microsoft.sqlserver.jdbc.SQLServerDriver \ --direct \ --num-mappers 1 \ --target-dir hdfs://nameservice1/user/hive/warehouse/rpt_jd.db/rpt_24028 \ --incremental append \ --check-column timest \ --last-value '2019-01-01' # demo(导出数据到HBase) sqoop import \ --connect jdbc:mysql://hadoop1:3306/mysql \ --username root \ --password root \ --table help_keyword \ --hbase-table new_help_keyword \ --column-family person \ --hbase-row-key help_keyword_id # 导出全部表 sqoop import-all-tables --connect jdbc:mysql://<host>/<db_name>
3. sqoop export
HDFS -> RDBMS;其中,RDBMS的表必须已存在
--input-fields-terminated-by <char> # 字段之前的分隔符 --input-lines-terminated-by <char> # 行之间的分隔符 # demo(全量导入,实测有效);当然也有其余的配置,如columns/ call等,这里略过不表 sqoop export \ --connect jdbc:sqlserver://172.16.100.241:1433 \ # SQL Server地址、端口 --table PP_JD_RPT.dbo.rpt_24028_1029_copy \ # SQL Server库名、表名 --username <username> \ # 登录SQL Server的用户名,这里隐去 --password <password> \ # 登录SQL Server的密码,这里隐去 --export-dir hdfs://nameservice1/user/hive/warehouse/rpt_jd.db/rpt_24028 \ # Hive表在HDFS中的路径,对于Hive可用 desc formatted <hive_table>查看 --driver com.microsoft.sqlserver.jdbc.SQLServerDriver \ # 驱动 -m 32 \ -Dorg.apache.sqoop.export.text.dump_data_on_error=true \ --direct \ --batch \ --input-null-string '\\N' \ --input-null-non-string '\\N' \ --fields-terminated-by '\001'
4. Hive参数
--create-hive-table # --hive-table # 后面接创建表的名字,默认使用MySQL的名称 --table # 指定RDBMS的表名 --hive-overwrite # 覆盖Hive原表中的数据 --hive-import # 从关系型数据库导入数据到Hive --hive-partition-value <v> # 导入Hive表的某个分区
sqoop validation
通过比较行数,以验证源表和目标表的数据导出过程的有效性。一般作为
sqoop import
和sqoop export
的配置项。sqoop create-hive-table
在Hive中创建一张和RDBMS相同的表
sqoop create-hive-table \ --connect jdbc:mysql://<host>:<port>/<db_name> \ --username <username> \ --password <password> \ --table <mysql_table_name> \ --hive-table <hive_table_name>
源码阅读
-
sqoop
2019-12-02 12:05:091.sqoop-1.4.7.tar.gz下载解压 2.拷贝mysql的jdbc驱动包mysql-connector-java-5.1.31-bin.jar到sqoop/lib目录下。 3.复制sqoop/conf/sqoop-env-template.sh为sqoop-env.sh并添加配置 # Set Hadoop-specific ...1.sqoop-1.4.7.tar.gz下载解压
2.拷贝mysql的jdbc驱动包mysql-connector-java-5.1.31-bin.jar到sqoop/lib目录下。
3.复制sqoop/conf/sqoop-env-template.sh为sqoop-env.sh并添加配置# Set Hadoop-specific environment variables here. #Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=/root/apps/hadoop-2.8.1 #Set path to where hadoop-*-core.jar is available export HADOOP_MAPRED_HOME=/root/apps/hadoop-2.8.1 #set the path to where bin/hbase is available #export HBASE_HOME= #Set the path to where bin/hive is available export HIVE_HOME=/root/apps/hive-1.2.1 #Set the path for where zookeper config dir is export ZOOCFGDIR=/root/apps/zookeeper-3.4.6/conf
4.配置configure-sqoop,注释掉对于HBase和ZooKeeper的检查
# Check: If we can't find our dependencies, give up here. if [ ! -d "${HADOOP_HOME}" ]; then echo "Error: $HADOOP_HOME does not exist!" echo 'Please set $HADOOP_HOME to the root of your Hadoop installation.' exit 1 fi #if [ ! -d "${HBASE_HOME}" ]; then # echo "Error: $HBASE_HOME does not exist!" # echo 'Please set $HBASE_HOME to the root of your HBase installation.' # exit 1 #fi #if [ ! -d "${ZOOKEEPER_HOME}" ]; then # echo "Error: $ZOOKEEPER_HOME does not exist!" # echo 'Please set $ZOOKEEPER_HOME to the root of your ZooKeeper installation.' # exit 1 #fi
5.配置环境变量
export JAVA_HOME=/root/apps/jdk1.8.0_201 export HADOOP_HOME=/root/apps/hadoop-2.8.1 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export PATH=$FLUME_HOME/bin:$PATH #hive export HIVE_HOME=/root/apps/hive-1.2.1 export PATH=$PATH:$HIVE_HOME/bin export KAFKA_HOME=/root/apps/kafka_2.12-2.2.0 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$KAFKA_HOME/bin export STORM_HOME=/root/storm-1.2.2 export PATH=$PATH:$STORM_HOME/bin #sqoop export SQOOP_HOME=/root/apps/sqoop-1.4.7 export PATH=$PATH:$SQOOP_HOME/bin
6.测试
sqoop version
7.成功
有个坑就是错误: 找不到或无法加载主类 org.apache.sqoop.Sqoop
解决:把sqoop目录下的sqoop-1.4.6.jar拷贝到hadoop/share/hadoop/mapreduce/的lib目
录下解决
sqoop-1.4.6.jar是在sqoop-1.4.6.bin__hadoop-2.0.4-alpha中取出来的
下载地址:http://archive.apache.org/dist/sqoop/1.4.6/19/12/02 10:59:07 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 Sqoop 1.4.6 git commit id c0c5a81723759fa575844a0a1eae8f510fa32c25 Compiled by root on Mon Apr 27 14:38:36 CST 2015
二sqoop测试
数据库列表:
./sqoop list-databases --connect jdbc:mysql://hdp-1:3306/ --username root --password 1
表列表:
./sqoop list-tables
–connect jdbc:mysql://hdp-1:3306/mysql
–username root
–password 1./sqoop create-hive-table
–connect jdbc:mysql://hdp-1:3306/mysql
–username root
–password 1
–table help_keyword
–hive-table hk
-
MySQL 多实例安装 及配置主从复制实验环境
-
MySQL Router 实现高可用、负载均衡、读写分离
-
基本网络查询命令
-
QUESTION 43-utlrp.sql
-
TMU-MVG-material.zip
-
国企程序员是一种怎样的体验
-
任务调度(三)——Timer的替代品ScheduledExecutorService简介
-
【第九周第 1 节】:请求的组成和页面
-
工程制图 AutoCAD 2012 从二维到三维
-
程序员必修基础套餐课
-
克服范式,达成真正的敏捷
-
Linux基础入门系列课程
-
重学操作系统----17 | 进程和线程:进程的开销比线程大在了哪里?
-
2021年 系统架构设计师 系列课
-
HTML5动态效果制作方法整理
-
集成计数器实验报告.docx
-
JMETER 性能测试基础课程
-
简单的Android端新闻App的实现
-
luogu P1438 无聊的数列(线段树+差分)
-
脉冲激光强化点阵光斑强度分布反求算法