阿里DataX编译与案例

下载源码

 

svn checkout http://code.taobao.org/svn/datax/trunk

 

 

-环境

 

root@datanode158:~# java -version
java version "1.7.0_45"
root@datanode158:~# python -V
Python 2.7.3
root@datanode158:~# ant -version
Apache Ant(TM) version 1.8.2 compiled on December 3 2011
root@datanode158:~# g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
root@datanode158:~# rpm --version
RPM version 4.9.1.1
root@datanode158:~# dos2unix -V
dos2unix 5.3.1 (2011-08-09)
With native language support.
LOCALEDIR: /usr/share/locale

 

 

步骤:

1、进入datax的rpm目录:/datax/rpm

在root下运行:rpmbuild --ba t_dp_datax_engine.spec

会出现一堆FileNotFound的问题

RPM build errors:  
    File not found: /root/rpmbuild/BUILDROOT/t_dp_datax_engine-1.0.0-1.x86_64/home/taobao/datax/bin  
    File not found: /root/rpmbuild/BUILDROOT/t_dp_datax_engine-1.0.0-1.x86_64/home/taobao/datax/conf  
    File not found: /root/rpmbuild/BUILDROOT/t_dp_datax_engine-1.0.0-1.x86_64/home/taobao/datax/engine  
    File not found: /root/rpmbuild/BUILDROOT/t_dp_datax_engine-1.0.0-1.x86_64/home/taobao/datax/common  
    File not found: /root/rpmbuild/BUILDROOT/t_dp_datax_engine-1.0.0-1.x86_64/home/taobao/datax/libs  
    File not found: /root/rpmbuild/BUILDROOT/t_dp_datax_engine-1.0.0-1.x86_64/home/taobao/datax/logs  
    File not found: /root/rpmbuild/BUILDROOT/t_dp_datax_engine-1.0.0-1.x86_64/home/taobao/datax/jobs  

 开源也不好好修改下源码,搞到一头雾水=,=

 

修改t_dp_datax_engine.spec如下:

summary: engine provides core scheduler and data swap storage for DataX   
Name: t_dp_datax_engine  
Version: 1.0.0  
Release: 1  
Group: System  
License: GPL  
AutoReqProv: no   
BuildArch: noarch  
  
%define dataxpath  /home/taobao/datax //改成%{buildroot}/home/taobao/datax  
%define vdataxpath /home/taobao/datax //添加,其中vdataxpath下面要用  
  
%description  
DataX Engine provides core scheduler and data swap storage for DataX   
  
%prep  
cd ${OLDPWD}/../  
export LANG=zh_CN.UTF-8  
ant dist  
  
%build  
  
%install  
dos2unix ${OLDPWD}/../release/datax.py  
  
mkdir -p %{dataxpath}/bin  
mkdir -p %{dataxpath}/conf  
mkdir -p %{dataxpath}/engine  
mkdir -p %{dataxpath}/common  
mkdir -p %{dataxpath}/libs  
mkdir -p %{dataxpath}/jobs  
mkdir -p %{dataxpath}/logs  
  
cp ${OLDPWD}/../jobs/sample/*.xml %{dataxpath}/jobs  
cp ${OLDPWD}/../release/*.py %{dataxpath}/bin/  
  
cp -r ${OLDPWD}/../conf/*.properties %{dataxpath}/conf  
cp -r ${OLDPWD}/../conf/*.xml %{dataxpath}/conf  
  
cp -r ${OLDPWD}/../build/engine/*.jar %{dataxpath}/engine  
  
cp -r ${OLDPWD}/../build/common/*.jar %{dataxpath}/common  
cp ${OLDPWD}/../c++/build/libcommon.so %{dataxpath}/common  
  
cp -r ${OLDPWD}/../libs/commons-io-2.0.1.jar %{dataxpath}/libs  
cp -r ${OLDPWD}/../libs/commons-lang-2.4.jar %{dataxpath}/libs  
cp -r ${OLDPWD}/../libs/dom4j-2.0.0-ALPHA-2.jar %{dataxpath}/libs  
cp -r ${OLDPWD}/../libs/jaxen-1.1-beta-6.jar %{dataxpath}/libs  
cp -r ${OLDPWD}/../libs/junit-4.4.jar %{dataxpath}/libs  
cp -r ${OLDPWD}/../libs/log4j-1.2.16.jar %{dataxpath}/libs  
cp -r ${OLDPWD}/../libs/slf4j-api-1.4.3.jar %{dataxpath}/libs  
cp -r ${OLDPWD}/../libs/slf4j-log4j12-1.4.3.jar %{dataxpath}/libs  
  
%post  
chmod -R 0777 %{dataxpath}/jobs //改成chmod -R 0777 %{vdataxpath}/jobs  
chmod -R 0777 %{dataxpath}/logs //改成chmod -R 0777 %{vdataxpath}/logs  
  
%files  
%defattr(0755,root,root)  
%{dataxpath}/bin // 改成%{vdataxpath}/bin  
%{dataxpath}/conf //改成%{vdataxpath}/conf  
%{dataxpath}/engine //改成%{vdataxpath}/engine   
%{dataxpath}/common //改成%{vdataxpath}/common   
%{dataxpath}/libs //改成%{vdataxpath}/libs   
%attr(0777,root,root) %dir %{dataxpath}/logs //改成%attr(0777,root,root)  
 %{vdataxpath}/logs  
%attr(0777,root,root) %dir %{dataxpath}/jobs //改成 %attr(0777,root,root)   %{vdataxpath}/jobs  
  
  
%changelog  
* Fri Aug 20 2010 meining   
- Version 1.0.0   

再次编译

Processing files: t_dp_datax_engine-1.0.0-1.noarch  
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/t_dp_datax_engine-1.0.0-1.x86_64  
Wrote: /root/rpmbuild/SRPMS/t_dp_datax_engine-1.0.0-1.src.rpm  
Wrote: /root/rpmbuild/RPMS/noarch/t_dp_datax_engine-1.0.0-1.noarch.rpm  
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.y3UwSl  
+ umask 022  
+ cd /root/rpmbuild/BUILD  
+ /bin/rm -rf /root/rpmbuild/BUILDROOT/t_dp_datax_engine-1.0.0-1.x86_64  
+ exit 0  

 

进入:/root/rpmbuild/RPMS/noarch

发布

rpm -ivh t_dp_datax_engine-1.0.0-1.noarch.rpm

 

至此安装完成!

 

测试

 

root@datanode158:~/rpmbuild/RPMS/noarch# python /home/taobao/datax/bin/datax.py -e true
Taobao DataX V1.0 
Data Source List :
0       mysql
1       sqlserver
2       http
3       fake
4       stream
5       oracle
6       hdfs
7       hbase
Please choose [0-7]: 2
Data Destination List :
0       stream
1       mysql
2       hdfs
3       oracle
4       hbase
Please choose [0-4]: 0
Generate /home/taobao/datax/jobs/httpreader_to_streamwriter_1396012010274.xml successfully .

 配置/home/taobao/datax/jobs/httpreader_to_streamwriter_1396012010274.xml

   

<?xml version="1.0" encoding="UTF-8"?>

<jobs>
  <job id="httpreader_to_streamwriter_job">
    <reader>
      <plugin>httpreader</plugin>
      <!--
default:;
description:how to split url
mandatory:false
name:URLDelimiter
-->
      <param key="urldelimiter" value=";"/>
      <!--
default:\t
description:separator to split urls
mandatory:false
name:fieldSplit
-->
      <param key="field_split" value="\t"/>
      <!--
default:UTF-8
range:UTF-8|GBK|GB2312
description:encode
mandatory:false
name:encoding
-->
      <param key="encoding" value="UTF-8"/>
      <!--
default:\N
description:replace this nullString to null
mandatory:false
name:nullString
-->
      <param key="null_string" value="\N"/>
      <!--
range:legal http url
description:url to fetch data
mandatory:true
name:httpURLs
-->
      <param key="httpurls" value="http://www.baidu.com"/>
      <!--
default:1
range:1-100
description:concurrency of the job
mandatory:false
name:concurrency
-->
      <param key="concurrency" value="1"/>
    </reader>
    <writer>
      <plugin>streamwriter</plugin>
      <!--
default:\t
description:seperator to seperate field
mandatory:false
name:fieldSplit
-->
      <param key="field_split" value="\t"/>
      <!--
default:UTF-8
range:UTF-8|GBK|GB2312
description:stream encode
mandatory:false
name:encoding
-->
      <param key="encoding" value="UTF-8"/>
      <!--
range:
description:print result with prefix
mandatory:false
name:prefix
-->
      <param key="prefix" value="baidu"/>
      <!--
default:true
range:
description:print the result
mandatory:false
name:print
-->
      <param key="print" value="true"/>
      <!--
default:
range:
description:replace null with the nullchar
mandatory:false
name:nullchar
-->
      <param key="nullchar" value="hello"/>
      <!--
default:1
range:1
description:concurrency of the job
mandatory:false
name:concurrency
-->
      <param key="concurrency" value="1"/>
    </writer>
  </job>
</jobs>

自动生成的 xml 文件中,有“?” 标识的 value 值,表示此处用户必须配置,其他地方的默认值用户可以根据自己需要作修改

 

执行

DataX 的运行命令如下:
/home/taobao/datax/bin/datax.py    job.xml
其中/home/taobao/datax/bin/datax.py 是 DataX 命令行的 python 封装,该执行脚本
是整个 DataX 的程序入口,Job.xml 是该 job 的配置文件。

 

如上述配置,该程序会将百度首页download下来

................百度页面html、js代码

2014-03-28 21:13:02,204 [main] INFO  schedule.Engine - DataX Reader post work begins .
2014-03-28 21:13:02,204 [main] INFO  schedule.Engine - DataX Reader post work ends .
2014-03-28 21:13:02,204 [main] INFO  schedule.Engine - DataX Writers post work begins .
2014-03-28 21:13:02,205 [main] INFO  schedule.Engine - DataX Writers post work ends .
2014-03-28 21:13:02,205 [main] INFO  schedule.Engine - DataX job succeed .
2014-03-28 21:13:02,210 [main] INFO  schedule.Engine - 
DataX starts work at      : 2014-03-28 21:13:00
DataX ends work at        : 2014-03-28 21:13:02
Total time costs          :                  2s
Average byte speed        :              26KB/s
Average line speed        :                1L/s
Total transferred records :                   1
Total discarded records   :                   0

 

<think>好的,用户想了解DataX编译版的使用方法。首先,我需要确认DataX的基本概念,确保自己理解正确。DataX阿里开源的数据同步工具,支持多种数据源之间的数据传输。用户提到的是编译版,可能是指从源码自行编译的版本,而不是直接下载的二进制包。 接下来,用户可能需要知道编译和使用的具体步骤。首先,我应该回忆DataX的官方文档,确认编译所需的依赖和环境。通常,编译DataX需要Maven和JDK。需要检查版本是否兼容,比如Maven 3.x和JDK 1.8以上。 然后,编译步骤一般是克隆仓库,运行mvn命令。但要注意,可能需要跳过测试,因为有时候测试会失败。编译成功后,如何打包成可用的tar.gz文件,这也是关键步骤。用户可能遇到编译错误,需要提示常见问题,比如网络问题导致依赖下载失败,或者JDK版本不匹配。 接下来是使用部分,编译后的DataX和官方预编译版在使用上是否有区别。应该说明启动命令,job配置文件的结构,以及如何编写一个简单的同步任务示例。用户可能需要知道如何验证安装是否成功,比如运行自检脚本。 还要考虑用户可能的环境问题,比如PATH设置,权限问题,或者依赖缺失。例如,Python环境是否正确安装,因为DataX的部分脚本是用Python写的。另外,不同数据源的插件是否需要额外配置,或者编译时是否包含了所有插件。 用户可能的深层需求是希望自定义DataX,比如修改源码或添加插件,因此编译版可以满足这种需求。需要提到如果需要开发自定义插件,编译过程可能需要调整pom.xml文件,添加依赖。 最后,整理步骤,确保逻辑清晰,分步说明编译和使用的流程,注意事项,以及常见问题的解决方法。这样用户能逐步操作,避免遗漏关键点。同时,保持回答结构清晰,使用代码块和示例,方便用户复制命令。</think>DataX编译版使用指南(分步说明) 1. 环境准备 - JDK 1.8+(验证:`java -version`) - Maven 3.3.9+(验证:`mvn -v`) - Python 2.7(DataX部分脚本依赖) - 500MB+磁盘空间 2. 源码获取 ```bash git clone https://github.com/alibaba/DataX.git cd DataX ``` 3. 编译构建 ```bash # 核心编译命令(跳过测试) mvn -U clean package assembly:assembly -Dmaven.test.skip=true # 编译成功后提示: # [INFO] BUILD SUCCESS # 生成目录:target/datax-{version}.tar.gz ``` 4. 部署使用 ```bash # 解压编译产物 tar -zxvf target/datax-{version}.tar.gz cd datax # 验证安装 python bin/datax.py --version # 应输出版本信息 # 目录结构说明: ├── bin # 启动脚本 ├── conf # 全局配置 ├── job # 示例任务 ├── lib # 核心依赖库 ├── plugin # 各数据源插件 └── tmp # 临时文件 ``` 5. 编写配置文件(示例:mysql2mysql.json) ```json { "job": { "content": [{ "reader": { "name": "mysqlreader", "parameter": { "username": "root", "password": "123456", "column": ["id","name"], "connection": [{ "table": ["users"], "jdbcUrl": ["jdbc:mysql://source-db:3306/db1"] }] } }, "writer": { "name": "mysqlwriter", "parameter": { "username": "root", "password": "123456", "column": ["id","name"], "connection": [{ "jdbcUrl": "jdbc:mysql://target-db:3306/db2", "table": ["users"] }] } } }] } } ``` 6. 执行同步任务 ```bash python bin/datax.py job/mysql2mysql.json ``` 常见问题排查: 1. 编译失败: - 检查Maven镜像配置(推荐阿里云镜像) - 确认网络畅通(需下载约200MB依赖) - 确保JDK版本正确 2. 运行时错误: - 检查插件是否完整编译(查看plugin目录) - 确认数据库驱动版本匹配 - 增加JVM内存:修改bin/datax.py中的`-Xms1g -Xmx2g` 高级用法: 1. 自定义插件开发: - 在`plugin`目录新建模块 - 实现Reader/Writer接口 - 重新执行编译流程 2. 增量同步: ```json "reader": { "parameter": { "incrementalField": "update_time", "startTime": "2023-07-01 00:00:00" } } ``` 3. 限速配置: ```json "core": { "transport": { "channel": { "speed": { "byte": 1048576 } // 1MB/s } } } ``` 注意事项: 1. 编译时间约5-15分钟(依赖网络速度) 2. 推荐使用`-Pdebug`参数开发调试 3. 生产环境建议使用release版本 4. 注意不同插件的版本兼容性要求
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值