使用Loader导入数据
操作场景
该任务指导用户完成将数据从外部的数据源导入到MRS的工作。
一般情况下,用户可以手工在Loader界面管理数据导入导出作业。当用户需要通过shell脚本来更新与运行Loader作业时,必须对已安装的Loader客户端进行配置。
前提条件
- 创建或获取该任务中创建Loader作业的业务用户和密码。
- 确保用户已授权访问作业执行时操作的HDFS/OBS目录、HBase表和数据。
- 获取外部数据源(SFTP服务器或关系型数据库)使用的用户和密码。
- 检查磁盘空间,确保没有出现告警且余量满足导入、导出数据的大小。
- 使用Loader从SFTP、FTP和HDFS/OBS导入数据时,确保外部数据源的输入路径目录名、输入路径的子目录名及子文件名不能包含特殊字符/\"':;,中的任意字符。
- 如果设置的任务需要使用指定Yarn队列功能,该用户需要已授权有相关Yarn队列的权限。
- 设置任务的用户需要获取该任务的执行权限,并获取该任务对应的连接的使用权限。
操作步骤
- 是否第一次从MRS导入数据到关系型数据库:
- 修改关系型数据库对应的驱动jar包文件权限。
- 登录Loader服务的主备管理节点,获取关系型数据库对应的驱动jar包保存在Loader服务主备节点的lib路径:“${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/install/FusionInsight-Sqoop-1.99.3/FusionInsight-Sqoop-1.99.3/server/webapps/loader/WEB-INF/ext-lib”。
此处版本号8.1.0.1为示例,具体以实际环境的版本号为准。
- 使用root用户在Loader服务主备节点分别执行以下命令修改权限:
cd ${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/install/FusionInsight-Sqoop-1.99.3/FusionInsight-Sqoop-1.99.3/server/webapps/loader/WEB-INF/ext-lib
chown omm:wheel jar包文件名
chmod 600 jar包文件名
- 登录FusionInsight Manager系统,选择“集群 > 待操作集群名称 > 服务 > Loader > 更多 > 重启服务”输入管理员密码重启Loader服务。
- 登录Loader服务的主备管理节点,获取关系型数据库对应的驱动jar包保存在Loader服务主备节点的lib路径:“${BIGDATA_HOME}/FusionInsight_Porter_8.1.0.1/install/FusionInsight-Sqoop-1.99.3/FusionInsight-Sqoop-1.99.3/server/webapps/loader/WEB-INF/ext-lib”。
- 登录“Loader WebUI”界面。
- 登录FusionInsight Manager系统,具体请参见访问FusionInsight Manager(MRS 3.x及之后版本)。
- 选择“集群 > 待操作集群名称 > 服务 > Loader”。
- 单击“LoaderServer(节点名称,主)”打开“Loader WebUI”界面。
图1 Loader WebUI界面
- 创建Loader数据导入作业,单击“新建作业”,在“1.基本信息”选择所需要的作业类型,然后单击“下一步”。
- “名称”输入作业的名称,“类型”选择“导入”。
- “连接”选择一个连接。默认没有已创建的连接,单击“添加”创建一个新的连接,完成后单击“测试”,测试是否可用,待提示成功后单击“确定”。
MRS与外部数据源交换数据和文件时需要连接数据源,“连接”表示连接数据源时的连接参数集合。
表1 连接配置参数一览表 连接器类型
参数名
说明
generic-jdbc-connector
JDBC驱动程序类
JDBC驱动类名。
JDBC连接字符串
JDBC连接字符串。
用户名
连接数据库使用的用户名。
密码
连接数据库使用的密码。
JDBC连接属性
JDBC连接属性,单击“添加”手动添加。
- 名称:连接属性名。
- 值:连接属性值。
ftp-connector
FTP服务器的IP
FTP服务器的IP地址。
FTP服务器端口
FTP服务器的端口号。
FTP用户名
访问FTP服务器的用户名。
FTP密码
访问FTP服务器的密码。
FTP模式
设置FTP访问模式,“ACTIVE”表示主动模式,“PASSIVE”表示被动模式。不指定参数值,默认为被动模式。
FTP协议
设置FTP传输协议:
- “FTP”:FTP协议。
- “SSL_EXPLICIT”:显式SSL协议。
- “SSL_IMPLICIT”:隐式SSL协议。
- “TLS_EXPLICIT”:显式TLS协议。
- “TLS_IMPLICIT”:隐式TLS协议。
不指定参数值,默认为FTP协议。
文件名编码类型
填写FTP服务器支持的文件名、文件路径编码格式,不填写时使用系统默认格式“UTF-8”。
hdfs-connector
-
-
oracle-connector
JDBC连接字符串
用户连接数据库的连接字符串。
用户名
连接数据库使用的用户名。
密码
连接数据库使用的密码。
连接属性
连接属性,单击“添加”手动添加。
- 名称:连接属性名。
- 值:连接属性值。
mysql-fastpath-connector
JDBC连接字符串
JDBC连接字符串。
用户名
连接数据库使用的用户名。
密码
连接数据库使用的密码。
连接属性
连接属性,单击“添加”手动添加。
- 名称:连接属性名。
- 值:连接属性值。
sftp-connector
Sftp服务器的IP
SFTP服务器的IP地址。
Sftp服务器端口
SFTP服务器的端口号。
Sftp用户名
访问SFTP服务器的用户名。
Sftp密码
访问SFTP服务器的密码。
Sftp公钥
Sftp服务器公钥。
oracle-partition-connector
JDBC驱动程序类
JDBC驱动类名。
JDBC连接字符串
JDBC连接字符串。
用户名
连接数据库使用的用户名。
密码
连接数据库使用的密码。
连接属性
连接属性,单击“添加”手动添加。
- 名称:连接属性名。
- 值:连接属性值。
- “组”设置作业所属组,默认没有已创建的组,单击“添加”创建一个新的组,单击“确定”保存。
- “队列”设置Loader的任务在指定的Yarn队列中执行。默认值“root.default”表示任务在“default”队列中执行。
- “优先级”设置Loader的任务在指定的Yarn队列中的优先级。可选值为“VERY_LOW”、“LOW”、“NORMAL”、“HIGH”和“VERY_HIGH”。默认值为“NORMAL”。
- 在“2.输入设置”,设置数据来源,然后单击“下一步”。
- 创建或者编辑Loader作业时,在配置SFTP路径、HDFS/OBS路径、SQL的Where条件等参数时,可以使用宏定义,具体请参考配置项中使用宏定义章节。
- Loader支持常见的字段数据类型,如Char、VarChar、Boolean、Binary、SmallInt、Int、BigInt、Decimal、Float、Double、Date、Time、TimeStamp、String等,具体支持类型根据数据来源的不同可能会有所变化,具体支持的类型可以参考Loader界面中相应输入算子(如表输入等)的字段数据类型下拉框中的内容。一些数据库的特有字段可能不被支持,例如Loader不支持oracle中的CLOB和XMLType、BLOB字段。
表2 输入配置参数一览表 源文件类型
参数名
解释说明
sftp-connector或ftp-connector
输入路径
SFTP服务器中源文件的输入路径,如果连接器配置多个地址此处可对应使用分号分隔多个输入路径,数量需要与连接器中服务器的数量一致。
文件分割方式
选择按文件或大小分割源文件,作为数据导入的MapReduce任务中各个map的输入文件。
- 选择“FILE”表示每个map处理1个或多个完整的源文件,同一个源文件不可分配至不同map,数据保存至输出目录时将保留输入路径的目录结构
- 选择“SIZE”表示每个map处理一定大小的输入文件,同一个源文件可分割至多个map,数据保存至输出目录时保存的文件数与map数量相同,文件名格式为“import_part_xxxx”,“xxxx”为系统生成的随机数,具有唯一性。
过滤器类型
选择文件过滤的条件。“WILCARD”表示使用通配符过滤,“REGEX”表示使用正则表达式匹配。与“路径过滤器”和“文件过滤器”配合使用。不选择值时默认为通配符过滤。
路径过滤器
与“过滤器类型”配合使用,配置通配符或正则表达式对源文件的输入路径包含的目录进行过滤。输入路径“输入路径”不参与过滤。配置多个过滤条件时使用逗号隔开,配置为空时表示不过滤目录。
文件过滤器
与“过滤器类型”配合使用,配置通配符或正则表达式对源文件的输入文件名进行过滤。配置多个过滤条件时使用逗号隔开。不能配置为空。
编码类型
源文件的编码格式,如UTF-8。导入文本文件时才能配置。
后缀名
源文件导入成功后对输入文件增加的后缀值。该值为空,表示不加后缀。
压缩
使用SFTP协议导数据时,是否开启压缩传输功能以减小带宽使用。“true”为开启压缩,“false”为关闭压缩。
hdfs-connector
输入路径
HDFS中源文件的输入路径。
路径过滤器
配置通配符对源文件的输入路径包含的目录进行过滤。输入路径不参与过滤。配置多个过滤条件时使用逗号隔开,配置为空时表示不过滤目录。不支持正则表达式过滤。
文件过滤器
配置通配符对源文件的输入文件名进行过滤。配置多个过滤条件时使用逗号隔开。不能配置为空。不支持正则表达式过滤。
编码类型
源文件的编码格式,如UTF-8。导入文本文件时才能配置。
后缀名
源文件导入成功后对输入文件增加的后缀值。该值为空,表示不加后缀。
generic-jdbc-connector
架构名称
“表方式”模式下存在,数据库模式名。
表名
“表方式”模式下存在,数据库表名。
SQL语句
“SQL方式”模式下存在,配置要查询的SQL语句,使Loader可通过SQL语句查询结果并作为导入的数据。SQL语句需要有查询条件“WHERE ${CONDITIONS}”,否则无法正常工作。例如,“select * from TABLE WHERE A>B and ${CONDITIONS}”。如果同时配置“表列名”,SQL语句中查询的列将被“表列名”配置的列代替。不能和“架构名称”、“表名”同时配置。
表列名
配置要导入的列,使Loader将列的内容全部导入。配置多个字段时使用逗号分隔。
分区列名
指定数据库表的一列,根据该列来划分要导入的数据,在map任务中用于分区。建议配置主键字段。
说明:- 分区列必须有索引,如果没有索引,请不要指定分区列,指定没有索引的分区列会导致数据库服务器磁盘I/O繁忙,影响其他业务访问数据库,并且导入时间长。
- 在有索引的多个字段中,选择字段值最离散的字段作为分区列,不离散的分区列会导致多个导入MR任务负载不均衡。
- 分区列的排序规则必须支持大小写敏感,否则在数据导入过程中,可能会出现数据丢失。
- 不建议分区列选择类型为float或double的字段,因为精度问题,可能导致分区列字段的最小值、最大值所在记录无法导入。
分区列空值
配置对数据库列中为null值记录的处理方式。值为“true”时,分区列的值为null的数据会被处理;值为“false”时,分区列的值为null的数据不会被处理。
是否指定分区列
是否指定分区列。
oracle-connector
表名
表名。
列名
列名。
查询条件
SQL语句中的查询条件。
切分方式
指定数据的切分方式,有“ROWID”和“PARTITION”两种。
表分区名
表分区名,使用逗号分隔不同的分区。
数据块分配方式
指定数据切分后,如何分配。
读取大小
指定每次读取多大的数据量。
mysql-fastpath-connector
架构名称
数据库模式名。
表名
数据库表名。
查询条件
指定表的查询条件。
分区列名
指定数据库表的一列,根据该列来划分要导入的数据,在map任务中用于分区。建议配置主键字段。
说明:- 分区列必须有索引,如果没有索引,请不要指定分区列,指定没有索引的分区列会导致数据库服务器磁盘I/O繁忙,影响其他业务访问数据库,并且导入时间长。
- 在有索引的多个字段中,选择字段值最离散的字段作为分区列,不离散的分区列会导致多个导入MR任务负载不均衡。
- 不建议分区列选择类型为float或double的字段,因为精度问题,可能导致分区列字段的最小值、最大值所在记录无法导入。
分区列空值
配置对数据库列中为null值记录的处理方式。
- 值为“true”时,分区列的值为null的数据会被处理。
- 值为“false”时,分区列的值为null的数据不会被处理。
是否指定分区列
是否指定分区列。
oracle-partition-connector
架构名称
数据库模式名。
表名
分区表名。
查询条件
SQL语句中的查询条件。
表列名
配置要导入的列,使Loader将列的内容全部导入。配置多个字段时使用逗号分隔。
- 在“3.转换”设置数据传输过程中的转换操作。
确认Loader创建的数据操作作业中,源数据的值是否满足直接使用需求而不进行转换,例如大小写转换、截取、拼接和分隔。
- 默认没有已创建的转换步骤,可拖动左侧样例到编辑框,添加一个新的转换步骤。
- 完整的转换流程包含以下类型,每个类型请根据业务需要进行选择。
- 输入类型,第一个转换步骤,仅添加一种,任务涉及HBase或关系型数据库必须添加。
- 转换类型,中间转换步骤,可添加一种以上或不添加。
- 输出类型,最后一个转换步骤,仅添加一种,任务涉及HBase或关系型数据库必须添加。
表3 样例一览表 类型
描述
输入类型
- CSV文件输入:CSV文件输入步骤,配置分隔符以转换生成多个字段。
- 固定宽度文件输入:文本文件输入步骤,配置截取字符或字节的长度以转换生成多个字段。
- 表输入:关系型数据输入步骤,配置数据库的指定列为输入的字段。
- HBase输入:HBase表输入步骤,配置HBase表的列定义到指定字段。
- HTML输入:HTML网页数据输入步骤,配置获取HTML网页文件目标数据到指定字段。
- Hive输入:Hive表输入步骤,配置Hive表的列定义到指定字段。
- Spark输入:SparkSQL表输入步骤,配置SparkSQL表的列定义到指定字段。仅支持SparkSQL存取Hive数据。
转换类型
- 长整型时间转换:长整型日期转换步骤,配置长整型数值与日期的转换。
- 空值转换:空值转换步骤,配置指定值替换空值。
- 随机值转换:随机数据生成步骤,配置新增值为随机数据的字段。
- 增加常量字段:增加常量步骤,配置直接生成常量字段。
- 拼接转换:拼接字段步骤,配置已生成的字段通过连接符连接,转换出新的字段。
- 分隔转换:分隔字段步骤,配置已生成的字段通过分隔符分隔,转换出新的字段。
- 取模转换:取模运算步骤,配置已生成的字段通过取模,转换出新的字段。
- 剪切字符串:字符串截取步骤,配置已生成的字段通过指定位置截取,转换出新的字段。
- EL操作转换:计算器,可以对字段值进行运算,目前支持的算子有:md5sum、sha1sum、sha256sum和sha512sum等。
- 字符串大小写转换:字符串转换步骤,配置已生成的字段通过大小写变换,转换出新的字段。
- 字符串逆序转换:字符串逆序步骤,配置已生成的字段通过逆序,转换出新的字段。
- 字符串空格清除转换:字符串空格清除步骤,配置已生成的字段通过清除空格,转换出新的字段。
- 过滤行转换:过滤行步骤,配置逻辑条件过滤掉含触发条件的行。
- 更新域:更新域步骤,配置当满足某些条件时,更新指定字段的值。
输出类型
- 文件输出:文本文件输出步骤,配置已生成的字段通过分隔符连接并输出到文件。
- 表输出:关系型数据库输出步骤,配置输出的字段对应到数据库的指定列。
- HBase输出:HBase表输出步骤,配置已生成的字段输出到HBase表的列。
- Hive输出:Hive表输出步骤,配置已生成的字段输出到Hive表的列。
- Spark输出:SparkSQL表输出步骤,配置已生成的字段输出到SparkSQL表的列。仅支持SparkSQL存取HIve数据。
编辑栏包括以下几种任务:
- 重命名:重命名样例。
- 编辑:编辑步骤转换,参考6.c。
- 删除:删除样例。
也可使用快捷键“Del”删除。
- 单击“编辑”,编辑步骤转换信息,配置字段与数据。
步骤转换信息中的具体参数设置请参考算子帮助。
- 使用sftp-connector或ftp-connector导入数据时,在数据转换步骤中,需要将原数据中时间类型数值对应的字段,设置为字符串类型,才能精确到毫秒并完成导入。数据中包含比毫秒更精确的部分不会被导入。
- 使用generic-jdbc-connector导入数据时,在数据转换步骤中,建议“CHAR”或“VARCHAR”类型字段设置数据长度为“-1”,使全部数据正常导入,避免实际数据字符太长时被部分截取,出现缺失。
- 使用generic-jdbc-connector导入数据时,在数据转换步骤中,需要将原数据中时间类型数值对应的字段,设置为时间类型,才能精确到秒并完成导入。数据中包含比秒更精确的部分不会被导入。
- 导入到Hive分区表内表时,Hive默认不会扫描新导入的数据,需要执行如下HQL修复表才可以查询到新导入数据:
转换步骤配置不正确时,传输的数据将无法转换并成为脏数据,脏数据标记规则如下:
- 任意输入类型步骤中,原数据包含字段的个数小于配置字段的个数,或者原数据字段值与配置字段的类型不匹配时,全部数据成为脏数据。
- “CSV文件输入”步骤中,“验证输入字段”检验输入字段与值的类型匹配情况,检查不匹配时跳过该行,当前行成为脏数据。
- “固定宽度文件输入”步骤中,“固定长度”指定字段分割长度,长度大于原字段值的长度则数据分割失败,当前行成为脏数据。
- “HBase输入”步骤中,“HBase表名”指定HBase表名不正确,或者“主键”没有配置主键列,全部数据成为脏数据。
- 任意转换类型步骤中,转换失败的行成为脏数据。例如“分隔转换”步骤中,生成的字段个数小于配置字段的个数,或者原数据不能转换为String类型,当前行成为脏数据。
- “过滤行转换”步骤中,被筛选条件过滤的行成为脏数据。
- “取模转换”步骤中,原字段值为“NULL”,当前行成为脏数据。
- 对于导入数据到Hive/SparkSQL表的作业,必须配置Hive的转换步骤。
- 单击“下一步”。
- 在“4.输出设置”,设置数据保存目标位置,然后单击“保存”保存作业或“保存并运行”,保存作业并运行作业。
表4 输出配置参数一览表 存储类型
参数名
解释说明
HDFS
文件类型
在下拉菜单中选择数据导入HDFS后保存文件的文件类型。
- “TEXT_FILE”:导入文本文件并保存为文本文件。
- “SEQUENCE_FILE”:导入文本文件并保存为sequence file文件格式。
- “BINARY_FILE”:以二进制流的方式导入文件,可以导入任何格式的文件,不对文件做任何处理。
说明:
文件类型选择“TEXT_FILE”或“SEQUENCE_FILE”导入时,Loader会自动根据文件的后缀选择对应的解压方法,对文件进行解压。
压缩格式
在下拉菜单中选择数据导入HDFS后保存文件的压缩格式,未配置或选择NONE表示不压缩数据。
输出目录
数据导入到HDFS里存储的保存目录。
文件操作方式
数据导入时的操作行为。全部数据从输入路径导入到目标路径时,先保存在临时目录,然后再从临时目录复制转移至目标路径,任务完成时删除临时路径的文件。转移临时文件存在同名文件时有以下行为:
- “OVERRIDE”:直接覆盖旧文件。
- “RENAME”:重命名新文件。无扩展名的文件直接增加字符串后缀,有扩展名的文件在文件名增加字符串后缀。字符串具有唯一性。
- “APPEND”:在旧文件尾部合并新文件内容。合并操作只是简单的追加,不保证追加文件是否可以使用。例如文本文件可合并,压缩文件合并后可能无法使用。
- “IGNORE”:保留旧文件,不复制新文件。
- “ERROR”:转移过程中出现同名文件时任务将停止执行并报错,已转移的文件导入成功,同名的文件及未转移的文档导入失败。
Map数
配置数据操作的MapReduce任务中同时启动的map数量。不可与“Map数据块大小”同时配置。参数值必须小于或等于“3000”。
Map数据块大小
配置数据操作的MapReduce任务中启动map所处理的数据大小,单位为MB。参数值必须大于或等于“100”,建议配置值为“1000”。不可与“Map数”同时配置。当使用关系型数据库连接器时,不支持“Map数据块大小”,请配置“Map数”。
HBASE_BULKLOAD
HBase实例
在HBase作业中,Loader支持从集群可添加的所有HBase服务实例中选择任意一个。如果选定的HBase服务实例在集群中未添加,则此作业无法正常运行。
导入前清理数据
导入前清空原表的数据。“true”为执行清空,“false”为不执行。不配置此参数则默认不执行清空。
Map数
配置数据操作的MapReduce任务中同时启动的map数量。参数值必须小于或等于“3000”。
Map数据块大小
HBase不支持此参数,请配置“Map数”。
HBASE_PUTLIST
HBase实例
在HBase作业中,Loader支持从集群可添加的所有HBase服务实例中选择任意一个。如果选定的HBase服务实例在集群中未添加,则此作业无法正常运行。
Map数
配置数据操作的MapReduce任务中同时启动的map数量。参数值必须小于或等于“3000”。
Map数据块大小
HBase不支持此参数,请配置“Map数”。
HIVE
输出目录
数据导入到Hive里存储的保存目录。
Map数
配置数据操作的MapReduce任务中同时启动的map数量。不可与“Map数据块大小”同时配置。参数值必须小于或等于“3000”。
Map数据块大小
配置数据操作的MapReduce任务中启动map所处理的数据大小,单位为MB。参数值必须大于或等于“100”,建议配置值为“1000”。不可与“Map数”同时配置。当使用关系型数据库连接器时,不支持“Map数据块大小”,请配置“Map数”。
SPARK
输出目录
仅支持SparkSQL存取Hive数据,指定数据导入到Hive里存储的保存目录。
Map数
配置数据操作的MapReduce任务中同时启动的map数量。不可与“Map数据块大小”同时配置。参数值必须小于或等于“3000”。
Map数据块大小
配置数据操作的MapReduce任务中启动map所处理的数据大小,单位为MB。参数值必须大于或等于“100”,建议配置值为“1000”。不可与“Map数”同时配置。当使用关系型数据库连接器时,不支持“Map数据块大小”,请配置“Map数”。
- 已创建的作业可以在“Loader WebUI”界面上进行浏览,可进行启动、停止、复制、删除、编辑和查看历史信息操作。
图2 查看Loader作业