目录
一:sqoop简介
- sqoop是一个高效传输海量数据而设计的工具,一般用于从关系型数据库同步数据到非关系型数据库中。
- 使用sqoop进行数据的导入,导出,其本质上是运行Mapreduce程序,充分利用了MR的并行化和容错性。
- sqoop支持增量更新,将新记录添加到最近一次的导出的数据源上。
二:sqoop使用
获取MySQL数据库中数据库名称
sqoop list-database
-connect 'jdbc:mysql://10.1.96.xx:3306'
-username test
-password test
获取sqlserver数据库的某个数据库下的所有表的名称
sqoop list-tables
connect'jdbc:sqlserver://192.168.12.xx:1433;database=pems;
username=sa;password=v3pems@2020'
sqoop 将oracle数据库中的某个库中的所有表导入到hive中
sqoop import-all-tables
-connect jdbc:oracle:thin:@10.89.142.207:1521:orcl
-username scott -password tiger -hive-database eda
-hive-import -create-hive-table -m 1
使用Sqoop执行sql语句
sqoop eval -connect 'jdbc:sqlserver://192.168.12.65:1433;database=PEMS_DATA;
username=sa;password=V3pems@2021' -query'select count(*) from rep_energy_tar'
三:sqoop常见操作命令
使用参数说明
1.数据导入:sqoop import
可通过 sqoop import --help 命令查看参数 说明
普通参数
- –connect 指定JDBC连接字符串
- –connection-manager 指定连接管理器类名
- –connection-param-file 指定连接参数文件
- –driver 手动指定要使用的JDBC驱动程序类
- –hadoop-home 覆盖 $HADOOP_MAPR ED_HOME_ARG 参数
- –hadoop-mapred-home 覆盖 $HADOOP_MAPR ED_HOME_ARG 参数
- –help 打印使用说明
- –metadata-transaction-isolation-level 为元数据查询定义事务隔离级别
- –oracle-escaping-disabled 禁用Oracle/OraOop连接管理器的转义机制
- -P 从控制台读取密码
- –password 设置密码验证
- –password-alias 凭据提供程序密码别名
- –password-file 在密码文件路径上设置验证
- –relaxed-isolation 对导入使用read-uncommi隔离
- –skip-dist-cache 跳过将jar复制到分布式缓存
- –temporary-rootdir 定义导入的临时根目录
- –throw-on-error 在作业期间发生错误时,重新抛出RuntimeException
- –username 设置身份验证的用户名
- –verbose 工作时打印更多信息
导入的控制参数
- –append 以追加模式导入数据
- –as-avrodatafile 将导入数据以avro文件存储
- –as-parquetfile 将导入数据以parquet文件存储
- –as-sequencefile 将导入数据以SequenceFile文件存储
- –as-textfile 以纯文本形式导入数据(默认)
- –autoreset-to-one-mapper 如果没有拆分键可用,则将映射器的数量重置为一个映射器
- –boundary-query 设置边界查询,检索主键的最大值和最小值
- –columns <col,col,col…> 指定需要导入的列
- –compression-codec 用于导入的压缩编解码器
- –delete-target-dir 以删除模式导入数据(如果目标文件存在则删除再导入. 不指定时如果目标路径存在则报错)
- –direct 使用直接导入快速路径
- –direct-split-size 在直接模式导入时,将输入流按“n”字节分割
- -e,–query 导入SQL“语句”的结果
- –fetch-size 当需要更多行时,设置从数据库中获取的行数’n’,设置内联LOB的最大大小
- -m,–num-mappers 使用n个map任务并行导入.默认并行度为4
- –mapreduce-job-name 为生成的mapreduce作业设置名称
- –merge-key 要用于合并结果的Key列(用于增量导入时重复数据的合并)
- –split-by 用于分割工作单元的表的列
- –split-limit 日期/时间/时间戳和整数类型的拆分列每次拆分的行上限。对于日期或时间戳字段,以秒为单位计算。拆分极限应该大于0
- –table 读取的表名(要导入的表)
- –target-dir 导入的表存放于HDFS中的目标路径
- –validate 使用配置的验证器验证副本
- –validation-failurehandler ValidationFailureHandler的完全限定类名
- –validation-threshold ValidationThreshold的完全限定类名
- –validator Validator的完全限定类名
- –warehouse-dir 要导入hdfs的父路径
- –where 导入时使用WHERE条件过滤
- -z,–compress 启用压缩
增量导入参数
- –check-column 源列,以检查增量更改
- –incremental 定义类型为“append”或“lastmodified”的增量导入
- –last-value 增量检查列中最后导入的值
输出行格式化参数
- –enclosed-by 设置所需字段的封闭字符
- –escaped-by 设置转义字符
- –fields-terminated-by 设置字段分隔符
- –lines-terminated-by 设置行尾字符
- –mysql-delimiters 使用MySQL默认的分隔符集: 字段:, ;行:\n ;转义字符:\ ;字段包围符:’
- –optionally-enclosed-by 设置包含字符的字段
输入解析参数
- –input-enclosed-by 设置所需的字段罩
- –input-escaped-by 设置输入转义字符
- –input-fields-terminated-by 设置输入字段分隔符
- –input-lines-terminated-by 设置输入行结束字符
- –input-optionally-enclosed-by 设置包含字符的字段
Hive参数
- –create-hive-table 导入时自动创建Hive表.如果目标hive表存在,则失败
- –hive-database 设置导入到hive时要使用的数据库名称
- –hive-delims-replacement 用用户定义的字符串替换导入字符串字段中的Hive record \0x01和行分隔符(\n\r)
- –hive-drop-import-delims 从导入的字符串字段中删除Hive记录\0x01和行分隔符(\n\r)
- –hive-home 覆盖 $HIVE_HOME 配置参数
- –hive-import 将表导入到Hive中(如果没有设置任何分隔符,则使用Hive的默认分隔符)
- –hive-overwrite 重写Hive表中的现有数据(覆盖导入)
- –hive-partition-key 设置导入到hive时要使用的分区键
- –hive-partition-value 设置导入到hive时要使用的分区值
- –hive-table 设置导入到hive时要使用的表名
- –map-column-hive 覆盖指定列到hive类型的映射
HBase参数
- –column-family 设置导入的目标列族
- –hbase-bulkload 启用HBase批量加载
- –hbase-create-table 如果指定,创建缺少的HBase表
- –hbase-row-key 指定要使用哪个输入列作为行键
- –hbase-table 导入到HBase中的表名
参考文献:
https://zhuanlan.zhihu.com/p/163266351