Applier是MySQL推出的MySQL数据库与HDFS数据的实时同步工具,Hive的数据实时同步同样适用。官方介绍可参见:http://dev.mysql.com/tech-resources/articles/mysql-hadoop-applier.html

[size=large]环境:[/size]

Applier当前的版本为0.1.0-alpha,只支持MySQL5.6及以上版本。需要的环境:
[list]
[*]Hadoop1.0.4:hadoop需要开启append模式(hdfs-site.xml中dfs.support.append设为true)
[*]libhdfs (it comes precompiled with Hadoop distros, ${HADOOP_HOME}/libhdfs/libhdfs.so)
[*]cmake 2.6 or greater
[*]libmysqlclient 5.6
[*]gcc 4.6.3
[*]MySQL Server 5.6
[*]FindHDFS.cmake (cmake file to find libhdfs library while compiling. You can get a copy online)
[*]FindJNI.cmake (optional, check if you already have one: $locate FindJNI.cmake)
[/list]

[size=large]相关文档:[/size]

Applier实现以及安装使用的一个简单说明:[url]http://innovating-technology.blogspot.com/2013/04/mysql-hadoop-applier-part-2.html[/url]
demo视频:[url]http://www.youtube.com/watch?v=mZRAtCu3M1g&feature=youtu.be[/url]

[size=large]编译部署:[/size]

[size=medium]libhdfs[/size]

在${HADOOP_HOME}下执行命令编译

ant compile-c++libhdfs -Dislibhdfs=true

${HOME_HADOOP}/build/c++/Linux-amd64-64/lib下面生成libhdfs的库文件

测试:
以下是Hadoop官方提供的例子:

#include "hdfs.h" 

int main(int argc, char **argv) {

    //default是host,自行更改    hdfsFS fs = hdfsConnect("default", 0);    const char* writePath = "/tmp/testfile.txt";    hdfsFile writeFile = hdfsOpenFile(fs, writePath, O_WRONLY|O_CREAT, 0, 0, 0);    if(!writeFile) {          fprintf(stderr, "Failed to open %s for writing!\n", writePath);          exit(-1);    }    char* buffer = "Hello, World!";    tSize num_written_bytes = hdfsWrite(fs, writeFile, (void*)buffer, strlen(buffer)+1);    if (hdfsFlush(fs, writeFile)) {           fprintf(stderr, "Failed to 'flush' %s\n", writePath);           exit(-1);    }   hdfsCloseFile(fs, writeFile);}

编译过程中有可能找不到某些库,需要指定路径,主要是libhdfs.so和java的libjvm.so

gcc testHDFS.c  -I${HADOOP_HOME}/src/c++/libhdfs -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux -L${HADOOP_HOME}/c++/Linux-amd64-64/lib/ -lhdfs -L${JAVA_HOME}/jre/lib/amd64/server -ljvm -o testHDFS

执行过程中可能会碰到这样的错误:

error while loading shared libraries: libhdfs.so.0: cannot open shared object file: No such file or directory或error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory

需要设置LD_LIBRARY_PATH路径

export LD_LIBRARY_PATH=${HADOOP_HOME}/c++/Linux-amd64-64/lib:${JAVA_HOME}/jre/lib/amd64/server:$LD_LIBRARY_PATH

执行成功后,会在hdfs的/tmp下生成testfile.txt文件,内容为Hello,world!

[size=medium]MySQL5.6[/size]

MySQL5.6下载地址:[url]http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz[/url]
根据官方文档进行安装:

groupadd mysqluseradd -r -g mysql mysql# Beginning of source-build specific instructionstar zxvf mysql-VERSION.tar.gzcd mysql-VERSIONcmake .makemake install# End of source-build specific instructions# Postinstallation setupcd /usr/local/mysqlchown -R mysql .chgrp -R mysql .scripts/mysql_install_db --user=mysqlchown -R root . chown -R mysql databin/mysqld_safe --user=mysql &# Next command is optionalcp support-files/mysql.server /etc/init.d/mysql.server

[size=medium]Applier[/size]

Applier下载地址:[url]http://downloads.mysql.com/snapshots/pb/hadoop-applier/mysql-hadoop-applier-0.1.0-alpha.tar.gz[/url]

Applier利用cmake生成Makefile,依赖FindHDFS.cmake和FindJNI.cmake,这个并没有包含在包中,需要自行下载,可参见:[url]http://code.ohloh.net/project?pid=aj2Ue-0Ech4&prevcid=1&did=cmake_modules&cid=IzFytetI1gk&fp=392579&mp&projSelected=true&filterChecked[/url]
放到cmake的Modules目录下

需要注意的是,Hadoop1.x的头文件和库的目录较先前版本有一点变动,直接进行编译有可能找不到相关文件。Applier提供了FindHDFS.cmake的补丁

--- FindHDFS.cmake+++ FindHDFS.cmake@@ -11,6 +11,7 @@ exec_program(hadoop ARGS version OUTPUT_VARIABLE Hadoop_VERSION # currently only looking in HADOOP_HOME find_path(HDFS_INCLUDE_DIR hdfs.h PATHS   $ENV{HADOOP_HOME}/include/+  $ENV{HADOOP_HOME}/src/c++/libhdfs/   # make sure we don't accidentally pick up a different version   NO_DEFAULT_PATH )@@ -26,9 +27,9 @@ endif() message(STATUS "Architecture: ${arch_hint}")

 if ("${arch_hint}" STREQUAL "x64")-  set(HDFS_LIB_PATHS $ENV{HADOOP_HOME}/lib/native)+  set(HDFS_LIB_PATHS $ENV{HADOOP_HOME}/c++/Linux-amd64-64/lib) else ()-  set(HDFS_LIB_PATHS $ENV{HADOOP_HOME}/lib/native)+  set(HDFS_LIB_PATHS $ENV{HADOOP_HOME}/c++/Linux-i386-32/lib) endif ()

 message(STATUS "HDFS_LIB_PATHS: ${HDFS_LIB_PATHS}")

将该补丁保存为FindHDFS.patch,在FindHDFS.cmake目录下执行patch -p0 < FindHDFS.patch

编译libreplication
Applier目录下执行命令进行编译:

export MYSQL_DIR=<path of mysql directory or libmysql>mkdir buildcd buildcmake .. -DCMAKE_MODULE_PATH:String=<path of cmake Modules>make -j4

[quote]Applier依赖MySQL5.6,MySQL5.6较之前版本在接口参数类型上有所变动,使用之前版本的头文件会报类型不一致的错误
务必保证/usr/local/mysql/include下的头文件为5.6版本[/quote]

编译成功之后在build/lib目录下会生成libreplication.so文件
下面编译examples中的mysql2hdfs例子
注意:不要在example的源码目录中进行编译。在build/example/mysql2hdfs目录中执行make即可。

编译过程中有可能会出现如下的错误:
[quote]
/usr/bin/ld: warning: libmawt.so, needed by /home/supertool/jdk1.7.0_09/jre/lib/amd64/libjawt.so, not found (try using -rpath or -rpath-link)
/home/supertool/jdk1.7.0_09/jre/lib/amd64/libjawt.so: undefined reference to `awt_FreeDrawingSurface@SUNWprivate_1.1'
/home/supertool/jdk1.7.0_09/jre/lib/amd64/libjawt.so: undefined reference to `awt_Unlock@SUNWprivate_1.1'
/home/supertool/jdk1.7.0_09/jre/lib/amd64/libjawt.so: undefined reference to `awt_Lock@SUNWprivate_1.1'
/home/supertool/jdk1.7.0_09/jre/lib/amd64/libjawt.so: undefined reference to `awt_GetComponent@SUNWprivate_1.1'
/home/supertool/jdk1.7.0_09/jre/lib/amd64/libjawt.so: undefined reference to `awt_GetDrawingSurface@SUNWprivate_1.1'
collect2: ld 返回 1
make[2]: *** [examples/mysql2hdfs/happlier] 错误 1
make[1]: *** [examples/mysql2hdfs/CMakeFiles/happlier.dir/all] 错误 2
make: *** [all] 错误 2
[/quote]
需要将libmawt.so的目录加入到LD_LIBRARY_DIR

export LD_LIBRARY_DIR=${JAVA_HOME}/jre/lib/amd64/xawt:${LD_LIBRARY_DIR}

注意:${JAVA_HOME}/jre/lib/amd64/headless目录下也有libmawt.so文件,一定要xawt目录下的,否则仍然会报错。
编译过后,会生成名为happlier的可执行文件。

通过以下命令即可启动服务

./happlier [options] mysql://root@127.0.0.1:13000 hdfs://localhost:9000

相关参数自行更改。

[size=large]总结[/size]
[list]
[*]Applier当前版本仍然是一年之前的0.1.0-alpha版本,该版本的作用主要是说明通过mysql的binlog实现向hdfs实时传输数据的可行性
[*]必须使用MySQL5.6版本,对5.6之前的版本不支持,这一点有很强的限制性
[*]安装过程非常繁杂,对底层环境的依赖较高,gcc、cmake都存在版本依赖问题(一般情况下都可满足),部分文件需要手动添加且需要打patch
[*]只有两个example可用,仅供测试
[*]google上可以搜索到的资源基本都是在编译过程中出现的问题,很难找到使用方面的信息
[*]最重要的是:当前只支持insert操作,delete、update和DDL语句均不支持。
[/list]

Applier编译安装相关推荐

  1. Windows 10下编译安装Hadoop2.6

    转自:https://www.linuxidc.com/Linux/2016-08/134131.htm Windows 10下安装Hadoop2.6,Windows10下编译64位Hadoop2.x ...

  2. 7 centos 源码安装samba_在CentOS7.6里编译安装PHP7.4(最新版),很详细

    拿到一个空的服务器,首先我们就要来用起来啦! 首先要先下载并编译安装PHP最新版本,请到php官网下载: 这里我首先在系统里在新建存储源码包的文件夹,比如我存放在这里 下载安装PHP7.4之前,你要先 ...

  3. mysql8.0.12最小化安装_简述MySql8.0编译安装过程

    [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 8.0.1905 (Core) 注意:不要用8以下的系统编译My ...

  4. debian编译安装python_编译安装python2.7及相关模块(debian5.0.1)

    基础环境说明及安装 当前系统 cat /etc/debian_version 5.0.1 因自带的python版本太旧 开发需要使用python2.7的版本 并需要paramiko Crypto My ...

  5. php编译7教程,PHP7 快速编译安装

    PHP7正式版发布啦, 之前没有安装过的,都来安装试一试 . 即将发布的ThinkPHP5 在PHP7环境下也完全兼容, 佩服鸟哥把兼容性做得这么好 快速编译安装PHP7步骤: 第一步: 安装必要一些 ...

  6. linux mysql 5.6.22_LinuxCentOS6.0下编译安装MySQL5.6.22

    Linux CentOS6.5下编译安装MySQL 5.6.22[给力详细教程] 一.编译安装MySQL前的准备工作 安装编译源码所需的工具和库(安装过程注意有没出错) yum install gcc ...

  7. 在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi

    一.简介 LLVM LLVM(之前称为低级虚拟机Low Level Virtual Machine)是一种非常强大的编译器基础架构框架,专门为使用您喜爱的编程语言编写的程序的编译时.链接时和运行时优化 ...

  8. 在Ubuntu 14.04 64bit上编译安装Crtmpserver trunk svn 811版本!

    这里仅在 在Ubuntu 12.04 64bit上搭建Crtmpserver视频点播服务 基础上补充一下在Ubuntu 14.04上编译安装Crtmpserver的方法,以作备忘.因为Ubuntu 1 ...

  9. 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出

    2011年那会儿就开始研究rtmp, 但是后来很快又换了公司转作Android移动浏览器项目,就一直没有机会 继续进行下去.现在因为工作需要,我又重新捡使起来, 继续进行中断了几年的工作.下面记录下我 ...

最新文章

  1. python 命令-python 处理命令行参数
  2. 提取手机游戏资源 特效 显存分析工具 无视任何加密
  3. python日记----2017.8.1
  4. phpcmsv9 更换域名出现页面无法访问后怎么办
  5. 十六进制数相加校验和计算程序
  6. python modbus类封装_如何避免从入门到放弃——python小组学习复盘
  7. JavaWeb中实现验证码(ssh框架版)
  8. java calendar数组_Java Calendar Date使用总结
  9. mysql2005错误码_SQL Server2005 常见错误及解决方案
  10. Linux教程-修炼
  11. 【bb平台刷课记】wireshark结合实例学抓包
  12. 揭开HPC应用的神秘面纱
  13. A Benchmark and Simulator for UAV Tracking(论文翻译)
  14. 视频全屏非全屏切换,状态栏动态显示隐藏兼容性解决
  15. 西米支付:支付宝/微信支付/银联支付通道的接入介绍
  16. vbs整人简单实现大量弹窗+指定语句退出!
  17. python居然可以画樱花
  18. ubuntu linux编译环境搭建,Ubuntu14.04开发环境搭建
  19. 面试成功一个公司,微信上HR和我谈好了薪资和入职日期。却不发offer。这种企业值得去吗?
  20. 英语语法笔记——状语从句(五)

热门文章

  1. JS 数字 、中文、 英文、判断
  2. 本地blast~TBtools
  3. 计算机的定义以及发展史
  4. 实战十三:基于BPR算法实现个性化排名推荐 代码+数据
  5. 动漫游、瑜伽游、军事游……春节定制旅游悄然兴起
  6. 【线上分享】全球多媒体视频内容保护最佳实践
  7. 第八章 Docker常规安装简介
  8. 计算机专业河南单招,河南单招计算机专业专科学校排名
  9. Java开源的CMS系统
  10. 《机械工程基础》复习题