12.9日记

发布时间 2023-12-09 21:20:33作者: zhangmingmingkjz

Sqoop 命令

Sqoop 支持 HDFS 和 Hive 之外的其他导入目标。Sqoop 还可以将记录导入到 HBase 中的表中。
参数名称    参数含义
--column-family <family>    设置导入的目标列族
--hbase-create-table    如果指定,则创建缺少的 HBase 表
--hbase-row-key <col>    指定要用作行键的输入列,如果输入表包含复合键,则 <col> 必须采用单个的形式,逗号分隔的组合键列表属性
--hbase-table <table-name>    指定要用作目标的 HBase 表名而不是 HDFS
--hbase-bulkload    启用批量加载

通过指定--hbase-table,您指示 Sqoop 导入到 HBase 中的表而不是 HDFS 中的目录。Sqoop 会将数据导入到指定为 的参数的表中--hbase-table。输入表的每一行都会转化为一个HBase Put操作到输出表的一行。每行的键取自输入的一列。默认情况下,Sqoop 将使用 split-by 列作为行键列。如果未指定,它将尝试识别源表的主键列(如果有)。您可以使用 手动指定行键列--hbase-row-key。每个输出列都将放置在同一个列族中,必须用--column-family.

如果输入表有复合键,则--hbase-row-key必须采用逗号分隔的复合键属性列表的形式。在这种情况下,HBase 行的行键将通过使用下划线作为分隔符组合复合键属性的值来生成。注意:只有--hbase-row-key在指定了参数的情况下,Sqoop 导入表才能使用复合键。

如果目标表和列族不存在,则 Sqoop 作业将退出并显示错误。您应该在运行导入之前创建目标表和列族。如果指定--hbase-create-table,Sqoop 将使用 HBase 配置中的默认参数创建目标表和列族(如果它们不存在)。

Sqoop 当前通过将每个字段转换为其字符串表示形式(就像您以文本模式导入到 HDFS 一样)将所有值序列化到 HBase,然后在目标单元格中插入此字符串的 UTF-8 字节。Sqoop 将跳过除行键列之外的所有列中包含空值的所有行。

为了减少 hbase 上的负载,Sqoop 可以进行批量加载而不是直接写入。要使用批量加载,请使用--hbase-bulkload。