本案例仅适用于HDFS与MySQL之间的数据同步实现。
1、 在编译安装之前注意将release下面的setSharePath方法中的路径改为你自己的安装路径,笔者的为/home/woody/datax/libs.
2、 rpm打包之前,要修改*.spec文件中的路径,dataxpath,此外可能还需要注解掉部分赋值文件的代码,如cp –r ${OLDPWD}****.properties ****.conf,在engine.spec中的jar包复制语句也要注解掉。
3、 注意将hdfsreader/writer(这两个文件的路径也是需要改的)中复制hadoop-core.Jar包的语句中的该jar包改为你自己的hadoop版本的hadoop-core.jar包。
4、 Mysqlreader/writer只需要修改路径就可以。
5、 接下来主要涉及到field\line by一致性的问题:
我们按正常顺序来搞一下:
首先将mysql数据同步到hdfs,需要用到mysqlreader 和hdfswriter
Mysqlreader文件不需要修改
Hdfswriter文件中的field_spilt=’\u0001’
Line_spilt=’\n’,别的地方不需要确认,只需要确认这两个地方。
然后将hdfs数据同步到mysql,需要用到hdfsreader和mysqlwriter
Hdfsreader文件中field_spilt=’\t’,该项确认即可
Mysqlwriter文件中sep=’\001’(注意该项保持不变即可)
String sql=”LOAD DATA LOCAL INFILE ‘hdfs://localhost:9000/test_in/part’ ”
Sql+=String.format(“DIELDS TERMINATED BY ‘\u0001’ESCAPED BY ‘\\’ ”)
Sql+=String.format(“LINES TERMINATED BY ‘\n’”)
此外还要注意,mysqlwriterinputstreamadapter.java文件中的sep=’\u0001’
BREAK = ‘\n’行分隔符,NULL=’\\N’ (NULL字面字符)这两项也值得注意。
以上东西确认完成之后就可以打包编译安装了。
接下来可以开始从mysql同步数据到hdfs了,要配置jobs下面mysqlreader_to_hdfswriter.xml文件:
ip\port\dbname\username\password\table这些都自己配置,where value=”1=1”;
sql value=”select * from test_datax” ; columns value=”*”这三项确认下即可,
hadoop.job.ugivalue=”woody,supergroup” ; hadoop_conf的值写你自己的hadoop core-site.xml文件路径即可,dir value=”hdfs://localhost:9000/test_in” ;field_spilt value=”\u0001” ; line_spilt value=”\n” ; nullchar value = “\N” 这些项目确认即可。
然后就可以执行数据同步命令了。
接下来可以开始从hdfs同步数据到mysql了,要配置jobs下面hdfsreader_to_mysqlwriter.xml文件:
Hadoop.job.ugi\hadoop_conf\dir\field_spilt与以上相同即可,nullstring value=”\N” ;
col_filter一项注释掉。
ip\port\dbname\username\password\table这些与以上相同即可,pre value=”select * from test_datax” ; post value=”select * fromtest_datax” ; colorder value=”user_id,user_name” ;
set value=”user_id=user_id,user_name=user_name”
然后就可以执行数据同步命令了。