iscsi没有可用于使用快速连接登陆的目标_Sqoop使用总结

f9806008e947c7c48434c546edb81b0b.png

sqoop简介

Sqoop是Hadoop生态系统”中的其中一员——Apache Sqoop。

Apache Sqoop(TM) is a tool designed for efficiently transferringbulk data between ApacheHadoopandstructured datastoressuch as relational databases.

Sqoop是一个为高效传输海量数据而设计的工具,一般用在从关系型数据库同步数据到非关系型数据库中。

e592cbe618c2d55de9fd1156cd35c807.png

使用Sqoop进行数据的导入、导出,其本质上是运行Mapreduce程序,充分利用了MR的并行化和容错性。

因为Sqoop专门是为大数据集设计的。Sqoop支持增量更新,将新记录添加到最近一次的导出的数据源上,或者指定上次修改的时间戳。

一、安装

通过在CDH平台添加服务安装Sqoop组件。

95e48313f6a01a362da9849e6599e669.png

二、使用Sqoop操作各种数据库

在使用sqoop连接到各种数据库之前,首先得在sqoop环境中加入各种数据库的驱动包

下载驱动包上传到/opt/cloudera/parcels/CDH-5.12.2-1.cdh5.12.2.p0.4/lib/sqoop/lib

目录下,然后给驱动包授权 chmod 777 xxx

sqoop连接到Mysql数据库

获取Mysql数据库中的数据库名称

sqoop list-database -connect 'jdbc:mysql://10.1.96.xx:3306' -username test -password test

注意:不能使用mysql的超级管理员root,否则可能会出现错误

sqoop连接到sqlserver数据库

获取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

注意:thin后面还是有个:的。否则会报错

使用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'

b9a449113c579572e289b8ae2e2a7f3c.png

注意:sqoop的抽取数据的时候目标源表名是区分大小写的

三、Sqoop导入数据出现的问题

4d890f5e1ba8e3f3cbbac0f3cb4f6c1c.png

259273f3029b4a34538f7da7dcb14256.png

出现上述问题的时候,先去cm的ui界面查看bug提示,报错提示中有url,复制到浏览器打开即可,然后滑动至最下方查看详细日志。

根据日志提示,大概是如下错误:

org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=EXECUTE, inode="/tmp/hadoop-yarn":grid:supergroup:drwx------

从上面的错误看出该用户 没有执行权限 查看了一下

hadoop fs -ls /tmp

确实 ,权限不够,只能切换到超级用户 su hdfs 赋予root 相应的权限

[hdfs@h1 root]$ hadoop fs -chown -R root:root /tmp

执行命令后,登陆root 账户

再次执行sqoop导入命令。

sqoop 导入数据到Hive

注:sqoop从导入数据的时候可以不用在目标源库下建立表,sqoop可以在导入的时候自动建立表。

sqoop从sqlserver导入数据到hive

sqoop import -connect 'jdbc:sqlserver://192.168.12.xx:1433;database=pems_data;username=sa;password=user' -table tablename -hive-import -hie-database fmcs -create-hive-table -m 1 

还有可能出现的错误:

Output directory hdfs://hadoop:8020/user/root/output already exists

这是因为每次MR都会生成一个output目录但是不能自动删除,所以我们就把HDFS的输出目录删除:

hadoop fs -ls -R:查看目录

hadoop fs -rmr output:删除输出目录

四、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和行分隔符(nr)
  • –hive-drop-import-delims 从导入的字符串字段中删除Hive记录0x01和行分隔符(nr)
  • –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类型的映射

HCatalog参数(Hive元数据导入参数)

  • –hcatalog-database HCatalog数据库名称(即Hive数据库)
  • –hcatalog-home 覆盖 $HCAT_HOME(即HIVE_HOME)
  • –hcatalog-partition-keys 设置导入到hive时要使用的分区键
  • –hcatalog-partition-values 设置导入到hive时要使用的分区值
  • –hcatalog-table HCatalog表名(即Hive表)
  • –hive-home 覆盖 $HIVE_HOME
  • –hive-partition-key 设置导入到hive时要使用的分区键
  • –hive-partition-value 设置导入到hive时要使用的分区值
  • –map-column-hive 覆盖指定列到hive类型的映射

HCatalog导入特定选项

  • –create-hcatalog-table 在导入之前创建HCatalog
  • –drop-and-create-hcatalog-table 在导入之前删除并创建HCatalog
  • –hcatalog-storage-stanza 用于创建表的HCatalog存储节

HBase参数

  • –column-family 设置导入的目标列族
  • –hbase-bulkload 启用HBase批量加载
  • –hbase-create-table 如果指定,创建缺少的HBase表
  • –hbase-row-key 指定要使用哪个输入列作为行键
  • –hbase-table 导入到HBase中的表名

Accumulo参数

  • –accumulo-batch-size 批处理大小(以字节为单位)
  • –accumulo-column-family 设置导入的目标列族
  • –accumulo-create-table 如果指定,则创建缺少的累加Accumulo表
  • –accumulo-instance Accumulo实例名
  • –accumulo-max-latency 最大写延迟(以毫秒为单位)
  • –accumulo-password Accumulo密码
  • –accumulo-row-key 指定要使用哪个输入列作为行键
  • –accumulo-table 导入到Accumulo中的表
  • –accumulo-user Accumulo用户名
  • –accumulo-visibility 要应用于导入的所有行的可见性令牌
  • –accumulo-zookeepers 逗号分隔的zookeeper列表(主机:端口号)

代码生成的参数

  • –bindir 编译对象的输出目录
  • –class-name 设置生成的类名,覆盖 --package-name. 当与–jar-file组合时,设置input类.
  • –escape-mapping-column-names 禁用列名中转义的特殊字符
  • –input-null-non-string 输入空非字符串表示
  • –input-null-string 输入空字符串表示
  • –jar-file 禁用代码生成;使用指定的jar
  • –map-column-java 覆盖特定列到java类型的映射
  • –null-non-string 空非字符串表示(数值型默认初始化值:0)
  • –null-string 空字符串表示(即String默认初始化值:"")
  • –outdir 生成代码的输出目录
  • –package-name 将自动生成的类放在这个包中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值