大数据抽取工具管理操作手册.docx
《大数据抽取工具管理操作手册.docx》由会员分享,可在线阅读,更多相关《大数据抽取工具管理操作手册.docx(58页珍藏版)》请在冰点文库上搜索。
大数据抽取工具管理操作手册
2015-7-31
操作管理手册|作者:
尹标平
1概述
●大数据平台数据抽取工具实现db到hdfs数据导入功能,提供高效的分布式并行处理能力,可以采用数据库分区、按字段分区、分页方式并行批处理抽取db数据到hdfs文件系统中,能有效解决按字段分区数据导致各分区数据不均匀导致作业负载不均衡的问题。
●数据处理服务器为每个作业分配独立的作业任务处理工作线程和任务执行队列,作业之间互不干扰
●灵活的作业任务处理模式:
可以增量方式执行作业任务,作业可以停止后重新执行,重新执行时只需执行未完成的作业任务,也可以全部重新执行所有作业任务;当停止作业后,可以在原有作业切分的基础进一步切分出子任务,然后再重新执行作业,提升系统处理数据效率。
●采用异步事件驱动模式来管理和分发作业指令、采集作业状态数据。
●通过管理监控端,可以实时监控作业在各个数据处理节点作业任务的实时运行状态,查看作业的历史执行状态,方便地实现提交新的作业、重新执行作业、停止正在执行的作业、清除作业执行监控数据、同步作业任务执行状态等操作
1.1技术体系
●Bbossioc:
轻量级ioc容器,ioc扩展属性配置语法
●Bboss持久层:
高效数据查询行处理器,灵活动态数据源管理(连接池数据源/非连接池数据源),表分区信息查询等,动态创建作业配置表和作业监控记录表
●Bboss分布式事件框架:
基于JGroups,提供异步分布式事件驱动模型,动态管理作业节点(服务节点和数据处理节点),包括作业节点的动态加入、动态离开等;在管理节点、数据处理节点之间分发和接收各种作业处理指令事件
●Bbossmvc:
实现监控管理应用模块,在监控服务节点中,通过mvc容器启动监听器启动作业管理节点
●Bboss序列化组件:
用来将作业监控数据序列化存储到sqllite中的作业监控表,同时在查看作业执行历史时将序列化存储的作业监控数据还原为对象状态的监控对象,便于界面展示
●Bboss标签库,jquery等:
实现监控管理应用的视图层
●HadoopHdfs客户端:
用来连接hadoophdfs文件系统
●Sqllite:
在监控节点中保存作业配置,保存作业执行状态数据
●Jetty:
运行监控管理应用模块的web应用容器
●Bboss应用执行容器:
用来启动作业管理监控应用、作业数据处理应用、启动jetty容器
1.2基本概念
指令:
可以在管理节点上或者数据处理节点执行的一系列操作,比如数据抽取操作、停止数据源操作、删除hdfs文件操作等等
作业:
一个完整的数据抽取指令,比如表数据抽取到hdfs作业等,停止数据源作业指令等,一个作业可以被分解为做个作业任务,然后交个数据处理节点执行。
数据处理节点会给每个作业分配独立的作业任务处理队列和作业工作线程,作业之间互不干扰;处理队列长度和工作线程数可以在作业定义中进行配置(可以根据作业对应的数据量级别、服务器资源配置以及数据库并发处理能力进行灵活配置)。
作业任务:
由作业分解而成,将由数据处理节点中的分配给对应作业的工作线程处理执行,如果对应的作业没有空闲的作业线程,则将作业任务加入作业对应的工作队列,如果作业工作队列也满了,则阻塞等待直到有空闲的作业队列或者作业工作线程。
管理节点:
管理、监控、调度作业的服务器
数据处理节点:
处理和执行作业任务的服务器
数据块号:
作业抽取的海量数据会按照表字段分区或者表分区切分成不同的数据块,每个数据块分配一个唯一块号,表字段分区对应数据块可以进一步进行二次切分成多个子块,以便数据抽取任务更加均匀地分配到各个作业节点上执行,提升抽取效率和速度,表分区数据块不能进行二次切分。
1.3整体架构
服务器类型分为管理节点和数据节点两种,它们之间通过分布式事件框架通讯,彼此之间又具备独立性,一个节点失效不会影响其他节点作业任务的执行。
1.3.1管理节点
数量:
只有一台,
作用:
执行所有作业指令的入口,监控所有数据节点作业状态(正常、异常、运行、等待、终止、完成等)和进展情况(数据任务处理状态,成功数据行数,异常数据行数,总的记录行数等等),管理节点也可以作为数据节点。
分解作业任务,根据作业定义,将作业分解成多个任务,然后将作业任务均匀地分配给数据处理节点执行
调度任务,根据数据处理节点作业任务执行情况,将任务繁忙的作业任务调配到相对较空闲的作业数据处理节点【开发中】
停止作业任务,在作业执行过程中可以停止正在执行的作业
重新执行已经完成的作业或者重新执行修改了配置的作业
管理hdfs文件:
删除hdfs文件和目录
管理作业使用的数据源:
停止不需要的数据源,或者作业数据源参数修改调整后,为了加载新的配置而停止数据源
采集作业状态数据源:
通过异步事件机制,采集分布在每个数据处理节点上的作业任务执行状态数据,包括:
作业执行状态、作业任务执行状态、数据抽取进度、异常情况、已经完成作业任务清单、未完成作业任务清单、失败作业任务清单
1.3.2数据节点
数量:
1…n台
作用:
接收并处理管理节点分派的作业任务,为每个作业分配独立的工作处理线程池和工作队列
处理管理节点提交的作业监控指令,将各个作业的实施处理情况以异步事件方式返回给管理节点
2作业指令
2
2.1指令概述
2.1.1操作指令
执行作业指令
停止作业指令
同步作业状态指令
提交新作业指令
记录作业状态
查看作业历史记录
指令执行的窗口如下:
未执行作业窗口
正在执行作业的窗口:
执行完毕作业窗口:
查看作业历史记录窗口
2.1.2执行作业指令类型
db数据抽取到hdfs
删除hdfs文件
停止数据源指令
任务重新分派指令
下面分别介绍各种指令配置及使用方法
2.2作业指令详解
作业指令配置语法采用bbossioc配置语法,大量采用扩展属性配置语法,配置灵活。
1
2
2.1
2.2
2.2.1删除hdfs目录/文件指令
指令说明
一次性删除hdfs中的多个或者一个文件或者文件夹,重新执行作业时可以使用这个指令删除hdfs文件或者目录
指令参数
参数描述
默认值
是否必填
Name
作业唯一名称
无
必填
hdfsserver
指定hdfs服务器
无
必填
Deletefiles
指定要删除的文件或者文件夹,多个以逗号分隔。
无
必填
使用实例
hdfsserver="hdfs:
//10.0.15.40:
9000"
deletefiles="/m2m/sss"
/>
2.2.2停止数据源指令
指令说明
停止数据源,调整数据库参数后使用这个指令来让参数生效
指令参数
参数描述
默认值
是否必填
Name
作业唯一名称
无
必填
stopdbnames
数据源名称,多个数据源用逗号分隔
无
必填
使用实例
2.2.3作业任务重新调度指令
开发测试中。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
将指定作业节点上正在执行的作业的所有未执行作业任务重新调配到其他空闲的节点上运行,以便提升作业处理效率,充分利用节点空闲资源。
如果reassigntaskNode对应的节点以及因为异外异常关闭停止,则由管理节点将该节点对应的作业正在执行的作业任务、未执行的作业、正在等待的作业任务全部调配到其他有效作业数据处理节点执行。
指令样例:
reassigntaskNode="csxbpmts02v-ap-3782"
reassigntaskJobname="test"/>
2.2.4执行作业指令
2.2.4.1单任务作业指令
指令说明
一个作业只对应一个任务,适用于数据量比较小的表数据抽取到hdfs,可以通过target属性指定将作业提交给对应的数据处理节点来,不指定target则交个管理作业节点来执行(前提是管理节点也作为数据处理节点)或者数据处理节点
指令参数
参数描述
默认值
是否必填
Name
作业唯一名称
无
必填
Dbname
数据源名称,多个数据源用逗号分隔
无
必填
Driver
数据库驱动程序,部署时必须要将对于数据库的驱动程序jar文件放到应用的lib目录中
无
必填
Dburl
对应数据库的jdbc连接地址
Dbuser
数据库账号名称
dbpassword
数据库账号访问口令
validatesql
连接池校验sql,非连接池模式不需要指定
Usepool
标识数据源是否采用连接池,默认为true,true采用,false不采用,在作业任务数数量比较少,则可以设置为false,作业任务比较多的情况下,可以采用连接池,重用连接
true
可选
hdfsserver
Hdfs服务器地址
hdfsdatadir
作业数据保存到hdfs服务器的文件夹目录
tablename
指定数据库表名称
可选
querystatement
指定查询语句,如果指定了查询语句,则无需指定表名称
可选
filebasename
作业数据文件的基本文件名前缀
Schema
数据库schema名称,oracle表空间查询时,必须指定
可选
Pkname
表字段分区查询字段名称
可选
Columns
指定要查询的字段名称列表,多个用逗号分隔
Single
单任务作业标识,true单任务,false多任务
false
可选
rowsperfile
每个文件存储的记录条数,指定了rowsperfile属性,则会将文件切分为多个文件保存到hdfs中,每个文件最多存储rowsperfile指定记录条数
0
可选
startfileNo
startfileNo在指定了rowsperfile情况下起作用,从指定的文件号开始抽取数据,忽略之前的文件号对应的数据记录
可选
target
指定单任务作业的数据节点,可以指定也可以不指定,如果指定的话,则在指定的数据作业节点上执行,如果不指定如果管理节点作为数据节点则直接在管理节点上执行,否则任意挑选一个作业节点执行
可选
Datatype
Hdfs文件存储记录数据格式,text:
#分隔字段及字段值,json:
json格式存储作业数据
clearhdfsfiles
执行作业任务时,是否删除所有已经生成的文件,true删除false不删除
false
可选
使用实例
见示例清单
示例一将表中数据生成一个hdfs文件
driver="oracle.jdbc.driver.OracleDriver"dburl="jdbc:
oracle:
thin:
@//10.16.1.12:
1521/iem"
dbuser="SANY"dbpassword="qzjiem#EDC2011"validatesql="select1fromdual"
usepool="false"hdfsserver="hdfs:
//10.0.15.40:
9000"hdfsdatadir="/m2m/data05/common"
filebasename="Sany_vehicle"
tablename="Sany_vehicle"
single="true"
target="BPIT-10006673-2810"
datatype="text"/>
示例二对文件安装行数进行切分成多个文件:
dburl="jdbc:
oracle:
thin:
@//10.0.15.51:
1521/orcl"dbuser="testpdp1"
dbpassword="testpdp1"validatesql="select1fromdual"usepool="false"
hdfsserver="hdfs:
//10.0.15.40:
9000"hdfsdatadir="/m2m/data04/onejob"
filebasename="testbigdata"schema="testpdp1"pkname="tid"columns=""
datatype="text"clearhdfsfiles="false"
querystatement="select*fromtestpdp1.testbigdataorderbyTID"
rowsperfile="10"
single="true"
target="BPIT-10006673-2810"
/>
示例三对文件安装行数进行切分成多个文件,并指定起始抽取文件号(适用于停止后从停止文件号对应的文件继续抽取数据)
dburl="jdbc:
oracle:
thin:
@//10.0.15.51:
1521/orcl"dbuser="testpdp1"
dbpassword="testpdp1"validatesql="select1fromdual"usepool="false"
hdfsserver="hdfs:
//10.0.15.40:
9000"hdfsdatadir="/m2m/data04/onejob"
filebasename="testbigdata"schema="testpdp1"pkname="tid"columns=""
datatype="text"clearhdfsfiles="false"
querystatement="select*fromtestpdp1.testbigdataorderbyTID"
rowsperfile="10"
startfileNo="10"
single="true"
target="BPIT-10006673-2810"
/>
2.2.4.2按字段分区作业指令
指令说明
抽取表数据到hdfs中,按照给定的表字段值进行字段值范围分区,抽取完毕后如果对应的分区文件没有包含数据则会将对应的hdfs文件删除
指令参数
参数描述
默认值
是否必填
name
作业唯一名称
无
必填
dbname
作业数据源名称,根据数据库配置动态生成数据源,如果usepool为true则数据源采用连接池管理db连接,否则直连数据(连接使用完毕后自动释放db连接),dbname不能命名为:
bigdata_conf,bigdata_conf是内置数据源的名称。
无
必填
driver
数据库驱动程序,部署时必须要将对于数据库的驱动程序jar文件放到应用的lib目录中
无
必填
dburl
对应数据库的jdbc连接地址
dbuser
数据库账号名称
dbpassword
数据库账号访问口令
validatesql
连接池校验sql,非连接池模式不需要指定
usepool
标识数据源是否采用连接池,默认为true,true采用,false不采用,在作业任务数数量比较少,则可以设置为false,作业任务比较多的情况下,可以采用连接池,重用连接
true
可选
hdfsserver
Hdfs服务器地址
必填
hdfsdatadir
作业数据保存到hdfs服务器的文件夹目录
必填
tablename
指定数据库表名称
可选
querystatement
手动指定查询sql语句,可以limitstatement属性来确定数据的查询范围,也可以直接指定startid和endid来指定数据查询范围,也可以同时指定表名,然后根据表来获取数据的查询范围。
querystatement属性和tablename属性任意设置一个即可
可选
limitstatement
指定数据查询的分区字段的起点和终点,不指定的话会根据表名称自动生成,形式如下:
selectmin(t.st_pid)asstartid,max(t.st_pid)asendidfromiss.is_static_often_20131211t
可选
filebasename
作业数据文件的基本文件名前缀
schema
数据库schema名称,oracle表空间查询时,必须指定
可选
pkname
表字段分区对应的字段
columns
指定要查询的字段名称列表,多个用逗号分隔,不指定时查询表所有字段
“”
可选
geneworkthreads
指定数据处理节点给作业分配的工作线程数
20
可选
genqueques
指定数据处理节点给作业分配的工作等待队列长度
5
可选
genquequetimewait
指定作业工作等待队列等待超时时间,单位:
秒
10秒
可选
datatype
Hdfs文件存储记录数据格式,text:
#分隔字段及字段值,json:
json格式存储作业数据
Json
可选
clearhdfsfiles
执行作业前是否删除存放作业数据文件的hdfs文件目录,true删除,false不删除
false
可选
usepartition
是否参与表分区抽取数据,true采用,false不采用
false
可选
blocks
指定只抽取块号对应的表分区的数据,多个用逗号分隔
可选
excludeblocks
指定要排除的表分区对应的块号,多个用逗号分隔
可选
startid
指定数据抽取对应分区字段的起始值,也就是符合条件的最小值,这样不需要工具自动去查询最小范围值
可选
endid
指定数据抽取对应分区字段的最大值,也就是符合条件的最大值,这样不需要工具自动去查询最大范围值
可选
errorrowslimit
作业任务最大允许错误行数,如果超过这个错误行数,则强制终止作业执行,-1出现异常不终止直到任务执行完毕,0表示只要一行发生错误及终止对应作业任务执行,大于0时,对作业任务错误记录行数进行计数,当达到指定的最大允许错误行数时,终止作业执行
-1
可选
subblocks
在第一次分块的基础上,将已有块进一步切分成成subblocks对应的子块,使得任务的切分更加合理,数据分布更加均匀地分布到各个块中
true
可选
datablocks
指定按字段分区需要切分的分区个数,这个参数很重要,管理节点会根据分区的起始位置(startid)和终止位置(endid),将期间的数据平均分为datablocks指定的块数,每个块分配唯一的块号,然后管理节点再将这些块转换为作业任务,平均分发给每个数据处理节点进行处理。
按字段分区时必填
usepagine
标识按数据库分页模式进行分区,不建议使用,true采用分页模式false不采用分页模式
false
可选
clearhdfsfiles
执行作业任务时,是否删除所有已经生成的文件,true删除false不删除
false
可选
使用实例
见后续实例清单
示例一基本按表字段分区作业指令
按主键分区作业自动查询分区范围(startid和endid),比较慢的数据库耗时比较长
dbname="hx243"
driver="oracle.jdbc.driver.OracleDriver"
dburl="jdbc:
oracle:
thin:
@//10.11.16.243:
1521/ISS"
dbuser="HX"
dbpassword="edcr9637_"
validatesql="select1fromdual"
usepool="true"
hdfsserver="hdfs:
//10.0.15.40:
9000"
hdfsdatadir="/m2m/data04/hx20111212_20120331"
tablename="is_static_20111212_20120331"
filebasename="is_static"
schema="ISS"
pkname="ST_PID"
columns=""
datablocks="10000"
geneworkthreads="10"
genqueques="5"
genquequetimewait="10"
datatype="text"
clearhdfsfiles="true"
errorrowslimit="0"
/>
示例二按主键分区作业指定分区范围(startid和endid)
dbname="hx243"
driver="oracle.jdbc.driver.OracleDriver"
dburl="jdbc:
oracle:
thin:
@//10.11.16.243:
1521/ISS"
dbuser="HX"
dbpassword="edcr9637_"
validatesql="select1fromdual"
usepool="true"
hdfsserver="hdfs:
//10.0.15.40:
9000"
hdfsdatadir="/m2m/data04/hx20111212_20120331"
tablename="is_static_20111212_20120331"
filebasename="is_static"
schema="ISS"
pkname="ST_PID"
columns=""
datablocks="10000"
geneworkthreads="10"
genqueques="5"
genquequetimewait="10"
datatype="text"
clearhdfsfiles="true"
startid="323404849"
endid="30039753017"errorrowslimit="0"
/>
Errorrowslimit为0表示不允许出现错误行,一旦出现就结束对应作业任务的执行
示例三只抽取blocks对应块号的作业指令
dbname="hx243"
driver="oracle.jdbc.driver.OracleDriver"
dburl="jdbc:
oracle:
thin:
@//10.