`
paddy.w
  • 浏览: 509066 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Applier编译安装

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


环境:

        Applier当前的版本为0.1.0-alpha,只支持MySQL5.6及以上版本。需要的环境:
  • 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)



相关文档:

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

编译部署:

libhdfs

        在${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!

MySQL5.6

        MySQL5.6下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16.tar.gz
        根据官方文档进行安装:
groupadd mysql
useradd -r -g mysql mysql
# Beginning of source-build specific instructions
tar zxvf mysql-VERSION.tar.gz
cd mysql-VERSION
cmake .
make
make install
# End of source-build specific instructions
# Postinstallation setup
cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
scripts/mysql_install_db --user=mysql
chown -R root . 
chown -R mysql data
bin/mysqld_safe --user=mysql &
# Next command is optional
cp support-files/mysql.server /etc/init.d/mysql.server


Applier

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

        Applier利用cmake生成Makefile,依赖FindHDFS.cmake和FindJNI.cmake,这个并没有包含在包中,需要自行下载,可参见:http://code.ohloh.net/project?pid=aj2Ue-0Ech4&prevcid=1&did=cmake_modules&cid=IzFytetI1gk&fp=392579&mp&projSelected=true&filterChecked
        放到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 build
cd build
cmake .. -DCMAKE_MODULE_PATH:String=<path of cmake Modules>
make -j4

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


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

编译过程中有可能会出现如下的错误:
引用

/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

        需要将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

       相关参数自行更改。

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


分享到:
评论

相关推荐

    feature-change-applier:在历时语音过程建模中的应用

    Feature Change Applier是将系统声音更改规则应用于输入词典的工具。 特征: 基于功能的电话定义基于功能的声音更改规则支持多字符电话支持多个规则集的比较运行什么是LATL?LATL是一种针对JavaScript的编译语言,...

    CorePatch:通用补丁程序生成器和应用程序,例如使用BsDiffBsPatch和Google Archive Patch

    要运行测试用例,只需克隆此存储库,然后使用android studio进行编译和运行 用法 相依性 摇动 dependencies { //for generator compile "io.github.lizhangqu:corepatch-core-generator:1.0.4" //for applier ...

    lvs+keepalived+mha+mysql架构最佳部署手册

    1. **安装MySQL**:根据所选操作系统选择对应的安装方式,如RPM包、源码编译等。 2. **配置主从复制**: - 在Master服务器上启用二进制日志。 - 在Slave服务器上配置复制参数。 - 确保Slave服务器能够成功连接到...

    中小企业数字化转型指南(2025年) 2025-1.docx

    中小企业数字化转型指南(2025年) 2025-1

    移动开发_安卓_键盘面板布局冲突处理_微信解决方案_1744035957.zip

    移动开发_安卓_键盘面板布局冲突处理_微信解决方案_1744035957

    华为OD机考辅导材料50题

    华为OD机考辅导材料50题

    软考网络工程师考试资料详细指南

    软考网络工程师考试是计算机技术与软件专业技术资格(水平)考试(简称“软考”)中的一个重要科目,属于中级资格。考试分为上午和下午两部分,上午为选择题,下午为案例分析题。软考网络工程师考试需要系统学习和充分准备。通过合理利用官方教材、历年真题、复习笔记、视频教程等资源,结合科学的备考计划和技巧,考生可以有效提升备考效率,顺利通过考试。

    Matlab Simulink中事件触发控制仿真的实现与稳定性研究

    内容概要:本文详细介绍了如何利用Matlab Simulink平台实现事件触发控制的仿真,并探讨了其稳定性的实现方法。文章首先解释了事件触发控制的基本原理,即仅在系统状态满足特定条件时进行控制动作,从而减少不必要的计算和资源消耗。接着,通过具体步骤指导读者搭建一个二阶系统的事件触发控制仿真模型,包括创建基础模型、添加事件触发模块以及构建控制回路。文中还提供了关键的Matlab代码片段用于实现事件触发逻辑,并详细讲解了各个模块的功能和参数设置。此外,文章强调了仿真参数的选择对结果的影响,并给出了具体的设置建议。最后,通过对仿真结果的分析,展示了事件触发控制的有效性和优越性。 适合人群:具有一定Matlab和Simulink基础的科研人员、工程师及学生。 使用场景及目标:①帮助用户深入了解事件触发控制的工作原理;②掌握使用Matlab Simulink进行复杂控制系统仿真的技能;③提高实际控制系统设计中的效率和性能。 其他说明:文章不仅提供了理论知识,还包括大量实战经验和技巧分享,有助于读者更好地理解和应用事件触发控制技术。

    【C#编程语言】VIP学习资源整合:涵盖基础至高级开发资源助力全阶段开发者成长

    内容概要:本文详细介绍了C#编程语言的学习资源,涵盖了从基础到高级的不同层次。首先,对于初学者,推荐了多本经典书籍如《C# 8.0 and .NET Core 3.0 - Modern Cross-Platform Development》、《C# 9.0 in a Nutshell》等,以及在线课程和视频教程,帮助理解C#的基本语法、面向对象编程等概念。接着,针对进阶开发者,提供了深入研究C#特性的书籍和课程,如《C# 9 and .NET 5 – Modern Cross-Platform Development》,并推荐了一些实战项目来巩固所学知识。最后,为高级开发者准备了深入探讨C#内部机制和技术细节的书籍,如《CLR via C#》,以及高级课程和开源项目。此外,还介绍了常用的开发工具(如Visual Studio、Visual Studio Code)、框架(如ASP.NET Core、Entity Framework Core),并列出了活跃的开发社区和论坛供交流学习。; 适合人群:所有对C#编程感兴趣的开发者,无论是初学者还是有经验的专业人士。; 使用场景及目标:①初学者可以通过基础资源快速入门C#编程,掌握基本语法和面向对象编程;②进阶开发者可以利用提供的资源深入理解C#特性,如并发编程、异步编程等;③高级开发者则可以通过高级资源和实战项目提升技术水平,解决复杂问题。; 其他说明:文中提到的资源不仅限于理论学习,还包括大量实战项目和开源项目,鼓励开发者在实践中不断积累经验。同时,活跃的社区和论坛也为开发者提供了良好的交流平台,有助于解决问题和获取最新资讯。

    【嵌入式系统】Systick定时器详解:24位倒计数定时器在延时与中断中的应用及寄存器函数解析

    内容概要:本文档详细介绍了Systick定时器的基础知识及其应用。Systick定时器是一个24位倒计数定时器,广泛用于延时或作为实时系统的心跳时钟。它能在计数到0后自动从RELOAD寄存器重载初始值,并可在睡眠模式下持续运行。文档重点解析了四个关键寄存器(CTRL、LOAD、VAL、CALIB)的功能与操作方式,并提供了基于这些寄存器实现的延时函数(delay_init、delay_us、delay_ms)。此外,还介绍了Systick库函数如SysTick_CLKSourceConfig()用于配置时钟源以及SysTick_Config()用于初始化Systick并设置中断优先级,最后给出了Systick中断服务函数SysTick_Handler()的定义。; 适合人群:对嵌入式系统开发有一定了解,特别是ARM架构的开发者。; 使用场景及目标:①理解Systick定时器的工作原理及内部寄存器的作用;②掌握如何利用Systick实现精确延时;③学会配置Systick定时器以适应不同的应用场景,如低功耗模式下的定时任务。; 阅读建议:建议读者结合实际硬件平台进行实验,深入理解各个寄存器的功能及延时函数的具体实现细节,同时关注Systick在不同工作模式下的行为特性。

    基于JAVAWEB校园订餐系统项目源码.zip

    基于JAVAWEB校园订餐系统项目源码

    Win10家庭版改装工具.exe

    可以把安装在电脑上的Windows 10企业版、教育版、专业版系统改装成Windows 10家庭版操作系统。

    (源码)基于 React 框架的前端技术示例项目.zip

    # 基于 React 框架的前端技术示例项目 ## 项目简介 本项目是一个基于 React 框架开发的前端示例项目,涵盖了 React 多种核心技术和开发模式,包含状态管理、路由懒加载、Hooks 使用、组件优化等多个方面,旨在帮助开发者深入理解和掌握 React 相关知识,可作为学习和实践 React 开发的参考。 ## 项目的主要特性和功能 1. 状态管理介绍了 setState 更新状态的两种写法(对象式和函数式),并说明了不同场景下的使用原则。同时,运用 React Hooks 中的 useState 让函数组件也能拥有状态并进行读写操作。 2. 路由懒加载通过 React 的 lazy 函数配合 import() 函数实现路由组件的动态加载,利用 <Suspense> 组件在加载路由打包文件前显示自定义的 loading 界面。

    医院挂号小程序源码.zip

    《医院挂号小程序源码》简介 该资源为医院挂号小程序源码,是一份极具实用价值的学习资源。在当今数字化医疗蓬勃发展的时代,小程序凭借其便捷性、轻量化等优势,成为医疗服务的重要载体。此挂号小程序源码蕴含丰富功能,涵盖用户端与管理端。 从用户端来看,患者可轻松注册登录,快速查询各科室医生排班信息,根据自身需求精准预约挂号,还能实时查看挂号进度与就诊提醒,极大提升就医体验。管理端则方便医院工作人员高效处理挂号业务,包括号源管理、预约审核、患者信息统计等,助力医院实现挂号流程的信息化与规范化。 对于开发者而言,研究这份源码能深入理解小程序开发架构、前后端交互逻辑以及医疗行业特定需求下的功能实现方式,从中汲取项目实战经验,拓宽技术视野,无论是用于个人技能提升,还是作为商业项目开发的参考范例,都有不可多得的学习价值,但需明确此资源仅作学习交流使用。

    (源码)基于HTML、CSS和JavaScript的TomMaixs studio网站.zip

    # 基于HTML、CSS和JavaScript的TomMaixs studio网站 ## 项目简介 此项目是TomMaixs studio的开源项目仓库,用于存储和维护TomMaixs studio的网站源代码。包含网站的基础架构、页面设计及必要配置信息,采用Apache License 2.0许可证开源,可供开发者免费使用和学习。 ## 项目的主要特性和功能 ### 主要特性 基于HTML、CSS和JavaScript构建,具备良好的跨平台兼容性。 有基础的网站架构和页面设计,便于开发者二次开发。 采用Apache License 2.0许可证,保证项目开放性和自由性。 ### 功能介绍 提供基础的网页浏览功能,涵盖主页、项目页面和关于页面等。 具备基础的网站导航和页面交互功能。 ## 安装使用步骤 1. 你已下载本项目的源码文件。 2. 确保开发环境安装了HTML、CSS和JavaScript的编辑器或IDE。

    一维声子晶体带隙仿真模型的Python实现及其应用

    内容概要:本文详细介绍了如何构建一维声子晶体结构带隙的仿真模型。首先解释了什么是声子晶体以及带隙的概念,接着阐述了平面波展开法和传递矩阵法这两种常用的一维声子晶体建模方法。文中提供了具体的Python代码示例,展示了如何通过有限元方法和传递矩阵法进行带隙计算,并通过Matplotlib库进行了可视化展示。此外,还讨论了一些常见的数值仿真陷阱及解决方案,如频率分辨率设置不当导致的锯齿状跳变等问题。 适合人群:对材料科学、物理学感兴趣的科研人员和技术爱好者,尤其是那些希望深入了解声子晶体带隙特性和仿真的读者。 使用场景及目标:适用于需要理解和研究声子晶体带隙特性的场合,如隔音材料设计、滤波器开发等。通过本文的学习,读者可以掌握一维声子晶体的基本理论和仿真技巧,为进一步的实际应用打下坚实的基础。 其他说明:本文提供的模型虽然相对简化,但对于初学者来说非常友好,有助于快速入门并激发更深层次的研究兴趣。同时,文中提到的一些优化建议和常见错误提示也非常有价值,可以帮助避免不必要的弯路。

    基于uni-app开发的菜谱小程序新版源码.zip

    《基于 uni-app 开发的菜谱小程序新版源码》简介 这是一份极具实用价值的学习资源——基于 uni-app 开发的菜谱小程序新版源码。uni-app 凭借其多端适配的强大特性,一次开发就能在多个平台运行,极大地提升了开发效率与应用覆盖范围。 此菜谱小程序源码功能丰富。它拥有精美且简洁直观的界面设计,方便用户快速上手操作。在内容呈现上,涵盖了海量的菜谱资源,无论是家常小菜、地方特色菜肴,还是异国料理,都能在其中找到详细的做法教程,步骤清晰,图文并茂,甚至部分还搭配了视频讲解,让烹饪新手也能轻松学会。 对于开发者而言,这份源码是学习 uni-app 开发的绝佳范例。可以深入研究其代码架构、页面布局、数据交互以及各种功能的实现逻辑,从中汲取经验,提升自己在跨平台移动应用开发方面的能力,更好地理解 uni-app 框架的优势与应用场景,为后续的开发项目奠定坚实的基础,助力开发出更多优质且高效的应用程序。

    电力系统中不平衡电网下整流与逆变电路的Simulink仿真及正负序分离控制策略

    内容概要:本文详细探讨了不平衡电网对整流电路和逆变电路的影响,并提出了通过Simulink仿真的解决方案。主要内容包括:不平衡电网对整流电路直流侧电压和逆变电路交流侧电流的影响机制;正负序分离方法及其在Simulink中的实现步骤;通过Simulink搭建模型验证控制策略的效果。文中还提供了具体的Matlab代码片段用于实现正负序分离和控制算法,展示了如何通过双闭环结构和PI调节器优化系统性能。 适合人群:从事电力电子、电力系统分析的研究人员和技术人员,尤其是那些关注电网不平衡条件下电力设备性能优化的人群。 使用场景及目标:适用于研究和开发不平衡电网条件下的电力电子设备控制系统,旨在提高电力系统的稳定性和电能质量。主要目标是减少直流侧电压的二倍频率波动和交流侧电流的负序分量,提升设备运行效率。 其他说明:文章不仅介绍了理论背景,还提供了详细的仿真模型构建指导和代码实现,有助于读者快速理解和应用所提出的控制策略。此外,文中提到的实际案例和调试技巧也为实际工程项目提供了宝贵的实践经验。

    Matlab simscape 入门案例:HowToBuildAMultibodyInSimulink (曲柄摇块机构建模仿真)

    在本案例“HowToBuildAMultibodyInSimulink”中,我们探索了如何使用MATLAB Simscape构建曲柄摇块机构的仿真模型。通过这个实例,你将学习到从零开始创建多体动力学模型的基本步骤,包括组件的选择与连接、参数设置以及仿真的运行。这是一个深入了解Simscape功能及其在机械系统建模中应用的绝佳入门教程,适合初学者提升技能并激发进一步学习的兴趣。

    Win11任务栏大小调整工具.exe

    Win11任务栏大小调整工具.exe

Global site tag (gtag.js) - Google Analytics