H3C DataEngine ETL培训文档手册V1.1_第1页
H3C DataEngine ETL培训文档手册V1.1_第2页
H3C DataEngine ETL培训文档手册V1.1_第3页
H3C DataEngine ETL培训文档手册V1.1_第4页
H3C DataEngine ETL培训文档手册V1.1_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEii目录HYPERLINK1ETL介绍 1-1HYPERLINK2ETL工具介绍 2-2HYPERLINK2.1Kettle 2-2HYPERLINK2.1.1Kettle介绍 2-2HYPERLINK2.1.2Kettle连接各种数据源 2-2HYPERLINK2.2Sqoop工具使用 2-17HYPERLINK2.2.1简介 2-17HYPERLINK2.2.2Oracle导入到Hadoop 2-17HYPERLINK2.3OratoMPP工具使用(Oracle数据库到文件) 2-18HYPERLINK2.3.1简介 2-18HYPERLINK2.3.2Oracle客户端安装 2-18HYPERLINK2.3.3OratoMPP使用 2-24HYPERLINK2.4数据库自带工具抽取数据(数据库到文件) 2-25HYPERLINK2.4.1SQLSERVER使用MicrosoftSQLServerManagementStudio工具 2-25HYPERLINK2.4.2Mysql数据导出 2-30HYPERLINK2.4.3PostgreSQL数据导出 2-30HYPERLINK2.5数据加载(文件到数据库) 2-31HYPERLINK2.5.1MPP数据加载 2-31HYPERLINK2.5.2HDFS数据加载 2-31HYPERLINK2.5.3Hive数据加载 2-31HYPERLINK3场景 3-32HYPERLINK3.1结构化全量数据导入到MPP中 3-32HYPERLINK3.1.1Kettle表到表导入 3-32HYPERLINK3.1.2Kettle表到文本再到表导入 3-35HYPERLINK3.1.3Kettle表到文本再使用dispath导入 3-40HYPERLINK3.1.4MPP工具OratoMPP和dispath导入 3-42HYPERLINK3.2结构化增量数据导入到MPP中 3-43HYPERLINK3.2.1增量数据导入 3-44HYPERLINK3.2.2Updata(修改)数据导入 3-48HYPERLINK3.2.3文本数据自动更新导入 3-48HYPERLINK4FAQ 4-50HYPERLINK4.1MPP工具获取方法 4-50HYPERLINK4.2如何获取SQL建表语句 4-50HYPERLINK4.3kettle遇到错误就会中断的解决方法 4-52HYPERLINK4.4SQLServer数据导出UTF-8出错 4-53HYPERLINK4.5换行符问题 4-5469ETL介绍ETL方法可分为两大类方法一:优点:一:数据不落地,直接从源导入到目标,使用JDBC连接只要有JDBC驱动即可,连接方式较为简单二:建立ETL规则针对每一条数据,做数据验证清理三:在有增量抽取的前提下(数据有时间戳可判断哪些是增量),可通过建立规则达到增量抽取,并且易于定时处理缺点:一:大规模抽取速度远不如原生抽取工具,简单举例子可能ETL每秒可能只能出去10M到30M,而方法二可抽取100M以上的数据,相差10倍以上方法二:优点:一:抽取性能以及加载性能由于使用原生态工具,直接使用底层CAPI接口,远快于JDBC等ETL工具的速度,适合首次大数据量迁移二:开发能力强可适当通过程序手段控制抽取和加载工具,可实现数据的高速抽取加载以及增量抽取和数据清理缺点:一:数据要落地为文本文档,增加一点数据迁移时间,所以上面只出最好是大数据量首次加载二:对常用数据库的数据迁移工具要有一定的了解,如Oracle数据库需要安装客户端才可以使用高速的导出工具,对没有安装过的人有一定的难度ETL工具介绍KettleKettle介绍什么是SpoonKettle是”KettleE.T.T.L.Envirnonment”只取首字母的缩写。这意味着它被设计用来帮助你实现你的ETTL需要:抽取、转换、装入和加载数据。Spoon是一个图形用户界面,它允许你运行转换或者任务,其中转换是用Pan工具来运行,任务是用Kitchen来运行。Pan是一个数据转换引擎,它可以执行很多功能,例如:从不同的数据源读取、操作和写入数据。Kitchen是一个可以运行利用XML或数据资源库描述的任务。通常任务是在规定的时间间隔内用批处理的模式自动运行。安装目前大数据软件DataEngine-V100R001B01D006SP2最新版本已经集成了Kettle工具,部署DataEngine平台时候可以选择Kettle组件,自动完成安装。如果要运行在其它主机上,软件版本可以从公司FTP上下载。注意:如果运行在其它主机上,必须安装Sun公司的JAVA运行环境1.4或者更高版本,相关资源你可以从\o"JDK下载"上下载。运行SpoonDataEngine平台:通过xshell后台直接运行Kettle就可以启动。运行在非DataEngine平台:下面是在不同的平台上运行Spoon所支持的脚本:Spoon.bat: 在windows平台运行Spoon。Spoon.sh:在Linux、AppleOSX、Solaris平台运行Spoon。资源库一个Kettle资源库可以包含那些转换信息,这意味着为了从数据库资源中加载一个转换,你必须连接相应的资源库。要实现这些,你需要在资源库中定义一个数据库连接,你可以在Spoon启动的时候,利用资源库对话框来定义。Kettle连接各种数据源通用连接方法第一步在打开的kettle窗口界面中,找到左侧的主对象树,右键“转换”,新建一个转换。图SEQ图\*ARABIC4、新建转换第二步依然在左侧的主对象树中找到DB连接,右键新建一个DB连接(如果不熟悉可以使用新建数据连接向导)。图SEQ图\*ARABIC5、新建数据库连接 然后在弹出的窗口中按照向导提示一步一步创建一个Oracle数据库连接。图SEQ图\*ARABIC6、成功创建Oracle数据库连接另外还需要注意的是,这样简单创建的数据库连接的字符集是默认的,可能会出现乱码的现象,为了避免乱码现象出现,可以为JDBC连接配置字符集参数。Kettle连接Oracle数据源Kettle连接MSSQLserverSQLServer的数据库名称和示例名称需要和客户确认,有可能不需要示例名称。Kettle连接MPP现在版本已经集成了MPP的驱动包(mpp-connector-java-1-build-53.2-bin),连接方式直接选择MPP的连接即可,并且要提高加载速度需要配置MPP的批量加载功能,在选项中加入参数rewriteBatchedStatements值是true即可。Kettle连接MySqlKettle连接postgre,greemplum,hawqKettle连接HBase,Hadoop(非DataEngine部署的kettle)1.登录H3CDataEngineManager,通过其配置下载功能下载以下文件:core-site.xmlhdfs-site.xmlyarn-site.xml将下载到的三个文件放置到data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp22\目录下,若已存在则覆盖。并在该目录中找到perties文件,打开后,根据当前H3CDataEngineHadoop的版本及其他信息更改该文件的内容。图SEQ图\*ARABIC16、更改perties文件内容由于xml文件中描述的Hadoop集群节点都是使用了主机名,所以需要将集群中的主机映射关系在本地也映射一遍。打开系统hosts文件C:\Windows\System32\drivers\etc\hosts,将集群中的IP与主机映射关系写入。图SEQ图\*ARABIC17、插入主机映射关系重启Spoon,然后再顶部菜单栏点击“工具——>HadoopDistribution...”,然后在弹出的窗口中选择“H3CDataEngineHadoop2.3.x”。图SEQ图\*ARABIC18、选择Hadoop套件版本2.在Spoon左侧主对象树中找到HadoopCluster,右键新建。在弹出的窗口中正确的填入Hadoop集群信息,然后点击“测试”按钮。图SEQ图\*ARABIC19、新建Hadoop集群访问对象点击测试后,将弹出测试结果,本场景仅需如下图的测试结果即可执行:图SEQ图\*ARABIC20、Hadoop集群连接创建测试结果Kettle连接HBase,Hadoop(DataEngine部署的kettle)直接打开kettle,在主对象树的转换下面有hadoopclusters的一个集群默认配置打开测试连接可以直接测试成功,所以hbase和hadoop的连接可以直接使用这个default即可。Sqoop工具使用(不需要安装orc客户端)简介在使用Sqoop之前需要把相应的数据库的JDBC驱动放入/usr/hdp/-3485/sqoop/lib/并且由于权限问题,建议使用hdfs用户执行sqoop相关命令注意:hdp版本号可能根据版本的升级而变化Oracle导入到HadoopOracle导入到HDFSsqoopimport--connectjdbc:oracle:thin:@:1521:orcl--usernamehr--passwordhr--tableJOBS--target-dir'/tmp/aa'--fields-terminated-by':'-m3Su-hdfs(没有密码)sqoopimport--connectjdbc:oracle:thin:@2:1521:orcl--usernamepqf--password12345678--tableJN1--target-dir'/tmp/aa'--fields-terminated-by':'-m3:1521oracle数据IP和端口orcl:数据库实例--table:表名--username:数据库用户名--password:数据库密码-m为Hadoop集群数量(并行度)--fileds-terminated-by数据文件分隔符--target-dir会在tmp目录下创建一个aa目录,放置导出的数据文件Oracle导入Hbase直接创建HBase表sqoopimport--connectjdbc:oracle:thin:@:1521:orcl--usernamehr--passwordhr--tableJOBS--hbase-create-table--hbase-tablejobs--column-familyinfo1--hbase-row-keyJOB_ID-m3--hbase-create-table:若hbase中不存在需要导入的表,则需要加添加该参数进行创建。--hbase-table:hbase的表名--column-family:列簇名--hbase-row-key:指定原表中的一列为key值Oracle导入到Hivesqoopimport--connectjdbc:oracle:thin:@:1521:orcl--usernamehr--passwordhr--tableJOBS--hive-tablejobs--hive-import--fields-terminated-by'|'-m3OratoMPP工具使用(Oracle数据库到文件)简介OratoMPP是一个可以快速、高效地从oracle数据库系统中抽取数据,并将数据保存到指定文件中的专用工具。并且OratoMPP还提供查询语句导出和全表导出两种方式,其中全表导出的登录用户需要对dba_extents、dba_objects和dba_tables这三张表有select权限。OratoMPP工具所在的服务器需要支持能够访问oracle,所以需要先安装好oracle客户端,再将工具上传到服务器才能正常使用。Oracle客户端安装本章主要为客户讲解如何在Linux操作系统中安装oracle客户端,安装它的目的就是为了使用OratoMPP这个数据抽取工具。通常,我们建议在安装有oracle客户端的物理机器上,使用OratoMPP这个工具。说明:集群的安装包中不提供oracle客户端程序,本章描述仅用于参考。下面以安装平台为Linux,使用oracle11g客户端进行安装为例介绍安装步骤。获取安装文件Linux操作系统中的oracle的客户端安装包文件,通常是rpm包。完整的oracle客户端安装包一共包含如下几个安装包文件:oracle-instantclient11.2-basic-.0-1.x86_64.rpmoracle-instantclient11.2-sqlplus-.0-1.x86_64.rpmoracle-instantclient11.2-devel-.0-1.x86_64.rpm上面的安装包文件,可以访问oracle的官方网站,从网站上下载。我们也已经上传到FTP服务器上可以下载。创建用户在装有Linux操作系统的机器上,首先切换到root,创建一个新的操作系统用户。示例:创建一个oracli用户。$su密码:#/usr/sbin/useraddoracle#passwdoracleChangingpasswordforuseroracleNewpassword:Retypenewpassword:passwd:allauthenticationtokensupdatedsuccessfully.创建目录按照上一小节中的介绍,如果成功的创建用户后,我们接下来的工作,就是需要创建所需要的目录。示例:使用root用户,创建目录,并修改目录的权限su–root密码:#mkdir-p/home/oracle/network/admin#chown-Roracle:oracle/home/oracle#chmod-R755/home/oracle拷贝并修改tnsnames.ora文件我们需要将oracle服务器上面的tnsnames.ora这个文件拷贝装有oracle客户端机器上的/home/oralci/network/admin这个目录下面。查看oracle服务器端的机器中(2)的tnsnames.ora[oracle@linux6admin]$ll/u01/app/oracle/product/11g/db_1/network/admin/tnsnames.ora-rw-r1oracleoinstall504Dec1618:41/u01/app/oracle/product/11g/db_1/network/admin/tnsnames.ora在客户端(4)机器上使用scp命令拷贝文件。[root@node4/]#scproot@2:/u01/app/oracle/product/11g/db_1/network/admin/tnsnames.ora/home/oracli/network/adminTheauthenticityofhost'2(2)'can'tbeestablished.RSAkeyfingerprintisfc:af:fb:d6:54:c5:c8:0d:c5:90:b3:2f:97:4a:fc:dc.Areyousureyouwanttocontinueconnecting(yes/no)?yesWarning:Permanentlyadded'2'(RSA)tothelistofknownhosts.root@2'spassword:tnsnames.ora100%5040.5KB/s00:00由于使用root用户进行的scp拷贝,因此拷贝结束后,依旧需要修改tnsnames.ora权限#chown-Roracle:oracle/home/oracle#chmod-R755/home/oracle切换为oracli用户,查看tnsnames.ora内容su–oracli$cat/home/oracli/network/admin/tnsnames.ora#tnsnames.oraNetworkConfigurationFile:/opt/oracle/product/10g/network/admin/tnsnames.ora#GeneratedbyOracleconfigurationtools.ORCL=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))EXTPROC_CONNECTION_DATA=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))(CONNECT_DATA=(SID=PLSExtProc)(PRESENTATION=RO)))在tnsnames.ora中,需要将HOST=localhost中的localhost修改为oracle服务器端的IP,例如:2。PORT=1521是oracle默认使用的端口,如果发生变化,也需要修改。SERVICE_NAME=orcl中orcl是服务名,使用sqlplus64登录时,需要使用它。该文件像现场客户索取。使用vi命令修改IP地址,修改完毕后:wq保存退出。PORT端口使用默认的1521端口,无需修改。vitnsnames.ora#tnsnames.oraNetworkConfigurationFile:/opt/oracle/product/10g/network/admin/tnsnames.ora#GeneratedbyOracleconfigurationtools.ORCL=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=2)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl.5)))EXTPROC_CONNECTION_DATA=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))(CONNECT_DATA=(SID=PLSExtProc)(PRESENTATION=RO)))说明:因为该文件是从oracle服务器端拷贝过来的,因此,一旦oracle服务器端的该文件的配置发生变化,例如增加了服务名,删除了服务名,我们建议重新拷贝至客户端的/home/oracli/network/admin/路径下,并修改每个服务名中的HOST的IP地址值。如果端口发生变化,也要修改PORT的端口值。安装客户端的rpm包使用root用户进行rpm包的安装,由于rmp包之间的依赖关系,因此oracle客户端rpm包的安装顺序如下:oracle-instantclient11.2-basic-.0-1.x86_64.rpmoracle-instantclient11.2-sqlplus-.0-1.x86_64.rpmoracle-instantclient11.2-devel-.0-1.x86_64.rpm示例:安装rpm包[root@node4~]#rpm-ivhoracle-instantclient11.2-basic-.0-1.x86_64.rpmPreparing...###########################################[100%]1:oracle-instantclient11.###########################################[100%][root@node4~]#rpm-ivhoracle-instantclient11.2-sqlplus-.0-1.x86_64.rpmPreparing...###########################################[100%]1:oracle-instantclient11.###########################################[100%][root@node4~]#rpm-ivhoracle-instantclient11.2-devel-.0-1.x86_64.rpmPreparing...###########################################[100%]1:oracle-instantclient11.###########################################[100%]若出现安装basic包如下报错,说明环境中没有安装libaio包。[root@node4~]#rpm-ivhoracle-instantclient11.2-basic-.0-1.x86_64.rpmerror:Faileddependencies: libaioisneededbyoracle-instantclient11.2-basic-.0-1.x86_64可以使用yum源安装libaio的方式进行安装,安装完成后即可正常安装basic包了。[root@node4~]#yuminstalllibaio*Loadedplugins:fastestmirrorLoadingmirrorspeedsfromcachedhostfileDataEnginerepo|2.9kB00:00HDP-2.3|2.9kB00:00HDP-UTILS-0|2.9kB00:00cdrom|2.9kB00:00supportrepo|2.9kB00:00SettingupInstallProcessResolvingDependencies-->Runningtransactioncheck>Packagelibaio.x86_640:0.3.107-10.el6willbeinstalled>Packagelibaio-devel.x86_640:0.3.107-10.el6willbeinstalled-->FinishedDependencyResolution配置客户端用户的.bash_profile文件用户还需要修改客户端用户下“.bash_profile”文件的配置信息,将下面的配置信息添加到.bash_profile文件中。exportORACLE_HOME=/usr/lib/oracle/11.2/client64exportSQLPATH=/usr/lib/oracle/11.2/client64/binexportTNS_ADMIN=/home/oracli/network/adminexportLD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/libexportPATH=$PATH:$ORACLE_HOME:$LD_LIBRARY_PATHexportNLS_LANG=AMERICAN_AMERICA.AL32UTF8示例:$cd/home/oracli$vi.bash_profile#.bash_profile#Getthealiasesandfunctionsif[-f~/.bashrc];then.~/.bashrcfi#UserspecificenvironmentandstartupprogramsPATH=$PATH:$HOME/binexportPATHexportORACLE_HOME=/usr/lib/oracle/11.2/client64exportSQLPATH=/usr/lib/oracle/11.2/client64/binexportTNS_ADMIN=/home/oracli/network/adminexportLD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/libexportPATH=$PATH:$ORACLE_HOME:$LD_LIBRARY_PATHexportNLS_LANG=AMERICAN_AMERICA.AL32UTF8保存退出后,使用source命令是配置文件生效。$source.bash_profile测试连接oracle所有的安装,配置工作结束后,可以测试oracle客户端是否可以连接了。oracle服务器端IP:2oracle的登录用户和密码:zzh/123456oracle的服务名;orcl使用sqlplus64命令连接oracle。示例如下:sqlplus64/nologSQL*Plus:Release.0-ProductiononFriOct1811:18:042013Copyright(c)1982,2010,Oracle.AllRightsReserved.SQL>connzzh/123456@//2/orcl.5Connected.SQL>connzzh/123456@//2/orcl.5connpqf/12345678@//2/orcl.5OratoMPP使用执行OratoMPP,将table_name参数设置要导出的表名,parallel参数可设置并行度(<=CPU核数),即可快速导出全表数据。./OratoMPP--user='user/passwd@2:1521/orcl'--query="select*FROMlineorder"--file='./lineorder.txt'--field=";"--format=3--parallel=4./OratoMPP--user='pqf/12345678@2:1521/orcl'--query="select*FROMt1"--file='./t1.txt'--field=";"--format=3--parallel=4注释:用户名:user,密码:passwd,oracleSID:orcl,查询:select*fromlineorder输出文件:当前目录下lineorder.txt,分隔符:分号样式format默认为3没有转移字符。具体的OratoMPP的使用建议参考《H3CDataEngineMPP数据抽取及加载工具参考手册》。数据库自带工具抽取数据(数据库到文件)SQLSERVER使用MicrosoftSQLServerManagementStudio工具在想导出的数据库中右键,选择任务,在选择导出数据选择test数据库目标选择平面文件,选择文件名如果只是导出表,可以直接选择第一个,如果要定制SQL,请选择第二个选择行分隔符,{CR}{LF}一般是window下的,linux下为{LF}可根据选择选取可以点击预览查看下数据单击完成,查看运行结果Mysql数据导出可采用下面语法导出,建议导出位置为/tmp,因为mysql安装者可能是mysql用户,在其他目录是没有权限的select*fromuserINTOOUTFILE'/tmp/log1.txt';PostgreSQL数据导出Psql–U用户名然后输入密码登录\l,查看数据库\c数据库名,登录数据库\l,查看表名\copy表名to'/tmp/user.csv'withcsv数据加载(文件到数据库)MPP数据加载关于dispatch更多更详细的参数,请参考《H3CDataEngineMPP数据抽取及加载工具参考手册》。首先需要解压dispatch_server-XXX.tar.bz2tarxvfdispatch_server-XXX.tar.bz2启动dispserver服务:./dispserver--port=6666--log-file=./server.log--log-level=4--loader-log-dir=./server-logs&配置ctl加载配置文件[test_lineorder]disp_server=14:6666#IP地址file_list=/home/data/ssbm/1s/lineorder.tbl#数据路径format=3#默认sg_list=sg01,sg02,sg03#有几个安全组就写几个db_name=test#数据库名table_name=lineorder#表名delimiter='|'#数据分隔符socket=/tmp/gbase_8a_5050.sock#默认extra_loader_args=--parallel=0#默认hash_parallel=6#默认启动加载任务:./dispcli–lcase1.log-L4mission.ctlHDFS数据加载Hadoopfs–putXX源文件/tmpHadoop目录Hive数据加载Hive本身使用Hdfs存储,可直接使用HDFSput命令到HDFS上,建Hive表时直接映射到HDFS数据路径场景结构化全量数据导入到MPP中以传统数据库数据库抽取至MPP数据库为例:当客户提供给我们相应的连接地址和账户密码时候,我们常用的数据抽取方法有以下:A.使用KETTLE连接数据库将数据抽取至MPP。B.使用KETTLE连接数据库将数据抽取至文件,再使用KETTLE将数据加载至mppC.使用KETTLE连接数据库将数据抽取至文件,使用dispserver将数据加载至mppD.如果客户数据库是oracle,安装oracle客户端,使用oratompp工具将数据导出成文件,使用dispserver将数据加载至mpp。方法A的效率比较低,支持各种数据库,优势在于库到库,数据不落地,避免了分隔符、日期格式问题和数据库编码问题,如果不配置批量提交,速度只有几百条每秒,配置批量提交后,抽取速度根据实际环境大约在几千条每秒。适用于表数据较少,数据库内的表较多的场景。方法B和方法C一般用于数据需要处理清洗,或者通过数据文件的形式进行数据迁移,方法C是为了解决方法A和B的加载速度慢。方法D仅限oracle数据库,需要安装oracle客户端,这是数据抽取加载最快的方法,抽取速度受限于oracle数据库效率、网络和磁盘IO,根据编辑数据导出语句,可以对编码格式、分隔符等进行处理,方便数据加载MPP。以下涉及Kettle的数据库的连接方法请参考2.1.2章节,不再详述。Kettle表到表导入新建一个表输入点击左侧“核心对象”标签,然后在“输入”类别中找到表输入。并将该图标拖拽至右侧的转换工作区域,然后双击它,进行编辑。新建一个表输出点击左侧“核心对象”标签,然后在“输出”类别中找到表输出。并将该图标拖拽至右侧的转换工作区域,然后鼠标选择表输入,按住shift和鼠标左键(或者鼠标中键),将表输入和表输出连接起来。编辑表输出若通过第五步获取建表语句存在问题,可以通过navicat获取建表语句:执行转换即可完成一个表的ETL,并且可以通过SQL进行验证是否完成了数据的导入。可以通过selectcount(*)from表名称;这个语句在原数据库和目标数据库分别执行,查看数据行数是否一致,以便确认是否全部导入成功。Kettle表到文本再到表导入新建一个表输入和文本文件输出表输入参考3.1.1,文本文件输出配置可如下:分割符:设置为表数据中不存在的字符,也可以是多个字符的组合,比如双引号中的“|*|”。头部:默认有勾,可以去掉,去掉后输出的文本文件就不包含表字段信息,只有数据。格式:一般选择unix,因为是linux上的数据库,若是windows的sql,可以选择windows的。编码:一般选择UTF-8最小宽度:可能原数据中是空值,但是由于是Oracle则其输出的文本就会以很多空格的方式输出,这样不仅造成文本较大,输出较慢,也会导致加载到MPP占用空间并且较慢,因此点击最小宽度可以解决这个问题。最后执行即可将数据导出到指定的文件中。新建一个文本文件输入和一个表输出:表输出的参考3.1.1章节,文本文件输入参考如下:分割符、头部、格式、编码等按照之前的进行设置:关于表输出,在数据库字段处可以自己进行一对一的定义,确保数据加载正确:最后执行转换任务即可查看加载结果。Kettle表到文本再使用dispath导入kettle将数据抽取到文本文档此步骤参考3.1.2,此处不做描述。在MPP中建表:获取dispatch文件:[root@node4data]#tarxvfdispatch_server-_build11.5_r9.7_2_4.A-redhat6.2-x86_64.tar.bz2dispatch_server/dispatch_server/dispserverdispatch_server/dispcli启动dispserver:[root@node4dispatch_server]#./dispserver--port=6666--log-file=./opt/log/server.log--log-level=4--loader-log-dir=./opt/log/server-logs&[1]76122[root@node4dispatch_server]#psaux|grepdispserverroot761220.00.01783603920pts/1Sl17:300:00./dispserver--port=6666--log-file=./opt/log/server.log--log-level=4--loader-log-dir=./opt/log/server-logsroot761330.00.0103244860pts/1S+17:300:00grepdispserver编辑加载控制文件:[student_lineorder]disp_server=4:6666file_list=/opt/data/student.txtformat=3sg_list=sg01,sg02db_name=h3c_testtable_name=studentdelimiter='|'socket=/tmp/gbase_8a_5050.sockextra_loader_args=--parallel=0hash_parallel=6启动加载:./dispcli-l/opt/log/dispcli/dispcli.log-L4-h5/opt/data/dispatch_server/student.ctlStartmission[student_lineorder]indispatchmode...[7][STARTTIME:2016-12-239:37:24][N/A][RATE:57.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[5][STARTTIME:2016-12-239:37:24][N/A][RATE:57.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[5][STARTTIME:2016-12-239:37:24][N/A][RATE:57.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[7][STARTTIME:2016-12-239:37:24][N/A][RATE:57.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[6][STARTTIME:2016-12-239:37:24][N/A][RATE:41.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[8][STARTTIME:2016-12-239:37:24][N/A][RATE:41.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[8][STARTTIME:2016-12-239:37:24][N/A][RATE:38.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[6][STARTTIME:2016-12-239:37:24][N/A][RATE:38.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...Dispatchmission[2]finished:loaded10records,skipped0recordsMPP工具OratoMPP和dispath导入准备OratoMPP运行环境OratoMPP的环境准备工作参考2.3章节。使用OratoMPP从Oracle数据库中抽取数据成文本文档[root@node4~]#./OratoMPP--user='zzh/123456@2:1521/orcl.5'--query="select*FROMteacher"--file='/opt/data/teacher.txt'--field="|"--format=3--parallel=4exportcolumns:2exportrows:3exporttime:0secprocessok!在MPP中建表略,参考3.1.3章节。编辑加载控制文件:[teacher_lineorder]disp_server=4:6666file_list=/opt/data/teacher.txtformat=3sg_list=sg01,sg02db_name=h3c_testtable_name=teacherdelimiter='|'socket=/tmp/gbase_8a_5050.sockextra_loader_args=--parallel=0hash_parallel=6启动加载:[root@node4dispatch_server]#./dispcli-l/opt/log/dispcli/dispcli.log-L4-h5/opt/data/dispatch_server/teacher.ctlStartmission[teacher_lineorder]indispatchmode...[7][STARTTIME:2016-12-2312:30:9][N/A][RATE:15.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[5][STARTTIME:2016-12-2312:30:9][N/A][RATE:15.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[5][STARTTIME:2016-12-2312:30:9][N/A][RATE:12.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[7][STARTTIME:2016-12-2312:30:9][N/A][RATE:12.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[6][STARTTIME:2016-12-2312:30:9][N/A][RATE:12.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[8][STARTTIME:2016-12-2312:30:9][N/A][RATE:12.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[6][STARTTIME:2016-12-2312:30:9][N/A][RATE:0.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...[8][STARTTIME:2016-12-2312:30:9][N/A][RATE:0.00/s][DONE][BADREC:0][ETA:N/A][ELAPSED:0sec]...Dispatchmission[4]finished:loaded3records,skipped0records结构化增量数据导入到MPP中增量数据导入从oracle数据库同步数据到mpp数据库,需要有合理的机制来判断oracle数据库的数据更新和操作,可以是数据库日志,也可是是数据内容,其中数据内容可以是自增涨的ID列,序号,也可以是时间戳,这里就以常用的时间戳判断来进行数据更新示例:首先从第一个表输入中获取MPP中最后的数据,此用例为时间戳,因此判断时间戳的最大值为最后更新的数据。在第二步oracle表输入中,查询表中的所有数据,后面增加条件,判断该时间戳大于“?”,在下面勾选“替换SQL语句里的变量”,在“从步骤中插入数据”选择前面一个步骤的名称,这样函数就代表了前面查出来的数值,查出大于该时间戳的所有值。为了避免数据库内有错误的时间戳,提高数据准确性,提高查询效率,可以增加语句让该时间戳小于当前系统时间。 这样一个转换就会查询最新的数据到MPP中,然后建立一个作业,设置为定时任务,每隔一段时间或者每天定时执行该转换任务,让数据在控制的频率内同步到MPP中。当每天新增数据量较大时,数据库到库的抽取效率可能无法满足同步需求,因此我们可以将上述过程优化,先将需要的数据抽取至本地文件,然后调用shell脚本执行dispserver加载任务,执行完后删除数据文件,完成一次数据同步转换Shell脚本的编写:勾选插入脚本,选择其工作路径然后将dispcli的命令输入到脚本栏中即可。Updata(修改)数据导入对于源数据库中的某个表,若其中的数据经常是发生修改,而增加的较少。若表较小,则可以采用清空表再全量导入的方式来完成数据的“增量”导入。如下:使用sql语句truncatetablename;可以清空表信息,然后执行一次全量导入的转换,即可完成表更新。文本数据自动更新导入应用场景:银行内的某业务数据库,增量数据都是每天由总行下发,以压缩文件的方式获取到。原来的数据导入方式是直接将该压缩文件传到ftp上,然后运行脚本实现导入。增量文件分为3种类型:

1)新加入的数据文件,该类型是直接通过sqlinsert到表中。

2)原始数据的更新,即update类型的数据,这类数据客户实现并不是通过update的方式进行更新,而是通过判断主键的方式,删除原始数据库中已经存在的数据,然后将新的数据insert进来。

3)纬度表的更新,既有新数据,又有老数据的更新,直接清空原数据表,然后将新的数据插入到表中。脚本实现机制1)执行work.sh脚本,脚本调用gzip解压客户原始数据文件。

2)再分别调用getfilename.sh脚本和gettbname.sh这2个脚本获取文件名和表名

3)接着通过之前获取到的表名,通过调用ctl.sh脚本创建数据加载控制文件

4)启动加载,使用第三步的控制文件将数据加载到临时表中。

5)最后将原始数据文件增加以时间为后缀的文件,方便后续查看原始数据。调用存储过程经过之前的将新的数据加载到临时表后,通过创建的存储过程将临时表中的数据导入到正式表中,依据三种情况进行导入加载

1)新加入的数据文件,该类型是直接通过sqlinsert到表中。

2)原始数据的更新,即update类型的数据,这类数据客户实现并不是通过update的方式进行更新,而是通过判断主键的方式,删除原始数据库中已经存在的数据,然后将新的数据insert进来。

3)纬度表的更新,既有新数据,又有老数据的更新,直接清空原数据表,然后将新的数据插入到表中。

4)数据加载完成后,创建一个加载log日志表,将加载的表名称,表条数,加载时间写入到log表中,方便后续查看。ETL数据到Hadoop结构化数据导入抽取EXCEL数据至HBase注意:此方法适用于大部分结构化数据场景,只需要对获取原数据的方式进行变更即可,比如可以通过kettle表输入方式获取原数据,oracle则可以通过OratoMPP抽取数据到文本,等等方式都可以实现。第一步配置集群,详情参照2.1.2章节kettle连接hbase。第二步在Spoon左侧“主对象树”中找到“HadoopCluster”,并右键新建。然后,在弹出的窗口中填入正确的集群信息。详情参考2.1.2章节。第三步在Spoon窗体左侧“核心对象”标签的“输入”类别下找到Excel输入,并将其拖拽至右侧工作区域,双击进行编辑。 在弹出的编辑窗口中点击“浏览”按钮,从文件系统中选择需要输入的Excel文件。然后点击“增加”按钮。图SEQ图\*ARABIC25、选择需要输入的Excel文件在同窗口内容切换至“工作表”标签,点击“获取工作表”,然后选择输入数据所在的工作表。图SEQ图\*ARABIC26、获取工作表切换至“字段”标签页,点“击获取来自头部的字段..”按钮,最后点击预览记录,若预览数据内容无误,则“Excel输入”配置完成。图SEQ图\*ARABIC27、配置Excel输入的字段第四步登录Hadoop集群,使用HBaseshell创建目标表结构。在这个例子中我们的创建命令如下:切换到hbase用户:su–hbase进入hbase命令行:hbaseshell创建t1表,列簇f1:create't1','f1'创建仅含一个列簇“f1”的表t1。图SEQ图\*ARABIC28、创建HBase目标表第五步从Spoon窗口左侧“核心对象”标签下的“BigData”类别中找到HBaseOutput,将其拖拽至窗口右侧工作区域。然后使用鼠标中键,从“Excel输入”拖拽至“HBaseOutput”,建立两者的连接。然后双击“HBaseOutput”,进行编辑。在编辑页面,首先选择configureconnection界面,选择hadoopcluster集群为Default集群。再选择“Create/Editmappings”,然后输入事先创建好的HBase表“t1”,创建表字段映射关系“m1”。然后点击“Getincomingfields”按钮,在自动生成的映射关系中选择正确的列簇,选择作为key的列值为yes。在本例子中,所有的列都在同一个列簇“f1”上。最后,点击“Savemapping”,该映射关系m1将被存储至HBase表“pentaho_mappings”中。图SEQ图\*ARABIC29、创建字段映射关系图SEQ图\*ARABIC30、存储在HBase中的映射关系映射关系存储成功后,在“HBaseOutput”编辑页面中,选择“Configureconnection”标签。然后选择第二步创建的Hadoopcluster,并将“HBasetablename”与“ Mappingname”,填入前面预设好的值。(该处需要注意的是Hadoopcluster与hbase-site.xml不能同时共存,否则会出问题)图SEQ图\*ARABIC31、编辑HBaseOutput第六步按下F9,在弹出窗口中按下“启动”按钮。细节请参考3.1.6章节。第七步图SEQ图\*ARABIC32、确认加载过程成功与否登录Hadoop集群,使用HBaseshell查询“t1”表,确认数据是否Load成功。图SEQ图\*ARABIC33、确认HTable是否加载数据成功抽取Oracle数据至HDFS步骤一:配置Oracle表输入点击Spoon窗口左侧“核心对象”标签,然后在“输入”类别中找到“表输入”。并将该图标拖拽至右侧的转换工作区域,然后双击它,进行编辑。数据库连接选择创建成功的Oracle数据库连接“o_link”,并写下查询SQL。再点击预览按钮,即可查看配置的正确与否。如果对SQL语句不熟悉,请点击“获取SQL语句”按钮,然后在弹出的“数据库浏览器”窗口中选择需要抽取的表。步骤二:配置HDFS文件输出在Spoon窗体左侧“核心对象”标签下的“BigData”类别下找到HadoopFileOutput,并将其拖拽至右侧工作区域。然后按住鼠标中间通过拖拽建立“表输入”与“HadoopFileOutput”的连接。最后双击“HadoopFileOutput”,进行编辑,编辑内容可参考以下图示:编辑完“文件”标签后,选择“内容”标签进行编辑。然后点击“字段”标签页,点击“获取字段”按钮。步骤三:启动ETL过程按下F9,在弹出窗口中按下“启动”按钮。步骤四:查看结果hdfsdfs-cat/tmp/oracle_t1.txtHDFS格式的文件在目录下看不到,是什么原因?通过Sqoop抽取数据至HDFS步骤一:使用SSH工具登录集群的放有驱动包的节点。切换登录用户为hdfs。su-hdfs步骤二:执行Sqoop命令sqoopimport--connectjdbc:mysql://50:3306/jcd--usernameroot--password123456--tablejcd--target-dir'/tmp/aa'--fields-terminated-by'|'-m1执行结果步骤三:查看执行命令后HDFS上的数据hdfsdfs-cat/tmp/aa/part-m-00000HDFS格式的文件在目录下看不到,是什么原因?通过Sqoop抽取数据至HIVE步骤一:使用SSH工具登录集群的放有驱动包的节点。切换登录用户为hdfs。步骤二:执行Sqoop命令sqoopimport--connect"jdbc:mysql://50:3306/jcd?useUnicode=true&characterEncoding=utf-8"--usernameroot--password123456--tablejcd--hive-import--fields-terminated-by':'-m1--target-dir/temp执行结果步骤三:查看执行命令后Hive上的数据hiveselect*fromjcd;通过Sqoop抽取数据至HBase步骤一:使用SSH工具登录集群的放有驱动包的节点。切换登录用户为hdfs。步骤二:执行Sqoop命令sqoopimport--connectjdbc:mysql://50:3306/jcd--usernameroot--password123456--tablejcd--hbase-create-table--hbase-tablejcd_test--column-familyinfo--hbase-row-keyid-m1执行结果步骤三:查看执行命令后HBase上的数据hbaseshellscan'sqoop_test'非结构化数据导入增量数据导入FAQMPP工具获取方法在DataEngine界面选择MPP,打开服务操作,点击工具下载即可将MPP工具都下载到本地使用,包含了OratoMPP、dispatch、ODBC、JDBC、.net、C-API等接口工具以及MPP集群管理器。如何获取SQL建表语句首先通过navicat连接到数据库,Oracle连接方式参考《Oracle操作指导书》,鼠标右键选择表,选择转储SQL文件,选择仅结构,就可以将该表的建表语句导出成文本。然后将该文本打开,即可找到该表的建表语句如下:--TablestructureforCOURSE--DROPTABLE"ZZH"."COURSE";CREATETABLE"ZZH"."COURSE"("CNO"VARCHAR2(10BYTE)NOTNULL,"CNAME"VARCHAR2(20BYTE)NULL,"TNO"VARCHAR2(20BYTE)NOTNULL)根据MPP的SQL语法和字符类型,修改建表语句如下:CREATETABLECOURSE("CNO"VARCHAR(10)NOTNULL,"CNAME"VARCHAR(20)NULL,"TNO"VARCHAR(20)NOTNULL)最后将该建表语句输入到kettle的表输出的SQL中执行即可在MPP中创建该表结构,也可以用navicat或者MPP集群管理器连接MPP数据库进行表的创建。kettle遇到错误就会中断的解决方法添加一条错误处理步骤给文本文件输出入下图配置文件名在内容栏目可相应去掉表头,修改格式,分隔符字段的一些细节处理,如去掉左右空格,精度等等SQLServer数据导出UTF-8出错SQLServer不支持UTF-8格式的导出,应对方法为转出为gbk,(换行符设置为linux下换行符LF),ftp或者移动硬盘导入到linux下(SQLServer默认肯在window机器下安装)然后在linux下iconv-f"gbk"-t"utf-8"(原文件名称)>(新文件名称)换行符问题Window下换行符为CRLFLinux下换行符为LFMac下换行符为CRMPP数据类型数值类型H3CDataEngineMPP支持数据类型包括严格的数值数据类型(TINYINT,SMALLINT,INT,BIGINT,DECIMAL),以及近似的数值数据类型(FLOAT,DOUBLE)。为了更有效地使用存储空间,请用户尽量使用最精确的类型。例如,如果一个整数列被用于在1~127之间的值,TINYINT是最好的类型。为了存储更大范围的数值,用户可以选择BIGINT或DECIMAL类型。作为SQL92标准的扩展,H3CDataEngineMPP也支持整数类型TINYINT,SMALLINT和BIGINT。H3CDataEngineMPP支持的数值类型,如下表所示:类型名称最小值最大值占用字节数TINYINT-1271271SMALLINT-32767327672INT(INTEGER)-214748364721474836474BIGINT-922337203685477580692233720368547758068FLOAT-3.40E+383.40E+384DOUBLE-1.7976931348623157E+3081.7976931348623157E+3088DECIMAL[(M[,D])]-(1E+M-1)/(1E+D)(1E+M-1)/(1E+D)动态计算TINYINT整数类型,它的范围是-127到127,TINYINT占用1个字节。SMALLINT整数类型。它的范围是-32767到32767,SMALLINT占用2个字节。INT整数类型。INTEGER的同义词。它的范围是-2147483647到2147483647,INT占用4个字节。BIGINT整数类型。它的范围是-9223372036854775806到9223372036854775806,BIGINT占用8个字节。FLOATFLOAT代表一个浮点型数值,占用4个字节,它所存储的数值不是一个准确值。允许的值是-3.402823466E+38到-1.175494351E-38,0,1.175494351E-38到3.402823466E+38。这些是理论限制,基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。H3CDataEngineMPP允许在关键字FLOAT后面的括号内选择用位指定精度,即FLOAT(X)。0到23的精度对应FLOAT列的4字节单精度,24到53的精度对应DOUBLE列的8字节双精度。当24<=X<=53时,FLOAT(X)与DOUBLE(X)等价。同时H3CDataEngineMPP允许使用非标准语法FLOAT(M,D)(M是整数位数和小数位数的总位数,D是小数的个数),H3CDataEngineMPP保存值时进行四舍五入。DOUBLEDOUBLE代表一个浮点型数值,占用8个字节,它所存储的数值不是一个准确值。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0、2.2250738

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论