Skip to content

FastDCS开发说明

liuxun edited this page Jun 24, 2013 · 18 revisions

##1.5 开发说明 FastDCS通过简洁而有效的设计,为开发者提供一套简洁而有效的分布式计算框架,开发者只需要定制由FastDCS提供的几个用户自定义UDF函数(User defined function),就可以完成整个分布式系统的开发工作。

###1.5.2 管理节点Master开发说明

开发者可以通过自定义Master节点类实现自定义的FastDCS管理节点功能,需要处理的有如下几个部分:

  1. 自定义 Master 类名 DemoMaster,继承 Master 类后即可拥有FastDCS服务集群的管理功能;

  2. 如果需要初始化 DemoMaster中的自定义变量,可以在虚函数 InitialTracker 中实现;

  3. 如果需要释放 DemoMaster中的自定义变量,可以在虚函数 FinalizeTracker 中实现;

  4. 必须在虚函数 ImportTaskUDF 中实现 DemoMaster 中的计算任务导入到服务集群;

  5. 必须在虚函数 ExportTaskUDF 中实现 DemoMaster 中的计算结果保存到外部存储系统;

  6. 必须通过REGISTER_FASTDCS_TRACKER宏,将自定义类名 DemoMaster 注册到FastDCS中;

    // 1.自定义Master类名DemoMaster派生在Master之上 class DemoMaster : public Master { // 2.Master节点启动后,会调用这个方法 void InitialTracker(struct settings_s settings) { // 初始化在 DemoMaster 中使用的自定义变量 ...... Master::InitialTracker(settings); };

    // 3.Master节点退出时,会调用这个方法
    void FinalizeTracker() {
        // 释放在 DemoMaster 中使用的自定义变量
        ......
    
        Master::FinalizeTracker();
    };
    
    // 4.FastDCS空闲的时候会主动调用这个方法,将新的计算任务导入到服务集群
    // 该方法只会由选举为Primary master的节点进行调用
    bool ImportTaskUDF(vector<FdcsTask> &tasks) {
        // 你需要将外部存储系统中的计算任务导入到服务集群中
        ......
    
        return true;
    };
    
    // 5.FastDCS会主动调用这个方法,将任务的计算结果导出到外部存储系统
    // 该方法只会由选举为Primary master的节点进行调用
    bool ExportTaskUDF(vector<FdcsTask> tasks) {
    	    // 你需要将计算保存到外部存储系统中
        ......
    
        return true;
    };
    private:
        自定义变量;
    

    }; // 6.注册宏必须填写正确,DemoMaster是你自定义的Master类名称 REGISTER_FASTDCS_TRACKER(DemoMaster);

###1.5.3 工作节点Worker开发说明

开发者可以通过自定义Worker节点类实现自定义的FastDCS工作节点功能,需要处理的有如下几个部分:

  1. 自定义 Worker 类名 DemoWorker,继承 Worker 类后即可响应FastDCS服务集群的计算任务调度、并行计算等功能;

  2. 如果需要初始化 DemoWorker中的自定义变量,可以在虚函数 InitialTracker 中实现;

  3. 如果需要释放 DemoWorker中的自定义变量,可以在虚函数 FinalizeTracker 中实现;

  4. 必须在虚函数 ComputingUDF 中实现 DemoWorker 中的计算处理;

  5. 必须通过REGISTER_FASTDCS_TRACKER宏,将自定义类名 DemoWorker 注册到FastDCS中;

    // 1.自定义Worker类名DemoWorker派生在Master之上 class DemoWorker : public Worker { // 2.Worker节点启动后,会调用这个方法 void InitialTracker(struct settings_s settings) { // 初始化在 DemoWorker 中使用的自定义变量 ......

        Worker::InitialTracker(settings);
    };
    
    // 3.Worker节点退出时,会调用这个方法
    void FinalizeTracker() {
        // 释放在 DemoWorker 中使用的自定义变量
        ......
    
        Worker::FinalizeTracker();
    };
    
    // 4.FastDCS中有需要计算的任务的时候会主动调用这个方法,
    // 开发者自行实现自定义的计算方法
    bool ComputingUDF(FdcsTask &task) {
        // 开发者自行实现自定义的计算方法
        ......
    
        return true;
    };
    private:
        自定义变量;
    

    }; // 5.注册宏必须填写正确,DemoWorker是你自定义的Worker类名称 REGISTER_FASTDCS_TRACKER(DemoWorker);

##1.6 编译和部署说明 FastDCS同样也是非常容易进行部署的,开发者可以轻松的将FastDCS系统部署在很多台Linux服务器中的,FastDCS会自动将这些Linux服务器建立起服务集群,以分布式运行的方式完成开发者的计算任务。

###1.6.1 编译和安装说明

FastDCS只能运行在Linux系统中(需要内核版本高于 2.6 ),目前FastDCS-v0.1.1版本需要Google Protocol Buffers库的支持。

FastDCS系统运行是不需要依赖mysql,但由于FastDCS的demo演示程序是使用mysql作为外部存储系统进行代码编写的,所以你的系统中需要有mysql数据库,或者有能够提供远程连接的mysql数据库。

编译和安装依赖环境

  1. 安装GCC

    • 目前FastDCS开发环境使用的是 GCC 4.4.4 版本。
  2. 安装CMake

  3. 安装Protobuf

    • Google Protocol Buffers用于FastDCS服务集群之间的通讯协议。
    • 你可以通过 http://code.google.com/p/protobuf 下载Protobuf的源代码(目前FastDCS开发环境使用的是 Protobuf-2.4.1 版本 )。
    • $ cd protobuf-2.4.1
    • $ ./configure --prefix=/usr/local
    • $ make
    • $ sudo make install
    • 添加环境变量 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/~/.bash_profile 文件中
    • 添加加载库路径 /usr/local/lib//etc/ld.so.conf文件中
    • $ ldconfig
  4. 编译FastDCS

    • https://github.com/liuxunorg/FastDCS 中下载FastDCS的最新版本源代码。
    • 使用编辑器打开 FastDCS/CMakeLists.txt 文件
    • FastDCS系统自身运行是不需要依赖mysql的,但FastDCS的demo程序是使用mysql作为外部存储系统进行代码编写的,所以需要配置mysql库的路径,你需要修改 SET(MYSQL_DIR "/usr/local/mysql"),将你的mysql安装路径替换 /usr/local/mysql
    • 如果你需要通过 make install 命令将FastDCS安装到其他路径,你需要修改 set(CMAKE_INSTALL_PREFIX "/home/liuxun/FastDCS"),将你自己安装路径替换 /home/liuxun/FastDCS
    • $ cd FastDCS-v0.1.1
    • $ mkdir build
    • $ cd build
    • $ cmake ..
    • $ make
    • $ make install

###1.6.2 系统配置

FastDCS一共有2个配置文件,分别位于 /src/conf/master.conf 和 /src/conf/worker.conf ,这2个配置文件中绝大部分的配置项是通用的。

系统配置参数说明

# Copyright 2013-02-05
# Author: Liu Xun ([email protected])
#
# FastDCS master config file

# 设置成 true,系统将以服务的方式在后台运行
# 设置成 false,系统将以应用的方式在前台运行
run_by_daemon = true

# 设置成 true,当系统异常崩溃的时候,将产生core文件
# 设置成 false,当系统异常崩溃的时候,不会产生core文件
max_core_file = false

# 三种日志类型的输出文件路径
# 如果不需要输出到文件,可以设置成/dev/null,如:
# info_log = /dev/null
# 如果需要见日志输出到控制台,可以不设置任何值,如:
# info_log = 
info_log = /home/liuxun/FastDCS/demo/info.log
warn_log = /home/liuxun/FastDCS/demo/warn.log
err_log  = /home/liuxun/FastDCS/demo/err.log

# 日志文件最大容量,默认值10M,支持的单位如下:
# G or g for gigabyte(GB)
# M or m for megabyte(MB)
# K or k for kilobyte(KB)
log_max_size = 10MB

# 指定以哪个用户运行这个程序,如果没有设置,以当前用户执行
# 该设置项只有在 run_by_daemon = true 的时候才有效
run_by_user = liuxun

# 保存PID的文件名称
pid_file = /tmp/fdcs_master.pid

# 系统支持的最大连接数,默认值256
# 这个参数的建议值是服务集群所运行的节点数的5倍
max_connections = 256

# 用于分配给每个Socket链接的缓冲区大小,默认64KB
# 这个参数建议的范围是 [8KB, 512KB]
socket_buff_size = 128KB

# 在Master 或 Worker 类的基础上派生的自定义类名称
# 例如FastDCS提供的demo程序中的Master节点需要配置成 
# class_factory = DictMaster
# 例如FastDCS提供的demo程序中的Worker节点需要配置成 
# class_factory = DictWorker
class_factory = "please input you master class name"

# 整个master节点集群的服务器IP和端口队列
# 格式为 host1:port1;host2:port2;...
tracker_group = 127.0.0.1:32301;127.0.0.1:32302;127.0.0.1:32303

# 当前节点的IP和端口
tracker_server = 127.0.0.1:32301

# Socket连接超时时间(单位:秒)
# default value is 30s
connect_timeout = 30

# 网络连接超时时间(单位:秒)
# default value is 30s
network_timeout = 60

# 节点发送心跳包的时间间隔(单位:秒)
# 该设置不能小于 lease_timeout 的设置值
heart_beat_interval = 30

# 节点状态报告的时间间隔(单位:秒)
stat_report_interval = 60

# 数据副本有效期时间(单位:秒)
# 该设置不能大于 heart_beat_interval 的设置值
lease_timeout = 10

# Primary master节点
# 每次从外部存储系统加载的计算任务数目(单位:个)
preload_tasks = 100

# Second master节点每次从Primary master节点
# 同步计算任务副本的数目(单位:个)
task_duplicate = 10

# Worker节点中的任务计算线程数
# 仅使用与Worker节点配置
computing_threads = 2

# FastDCS自带mysql的访问封装类的配置项
# FastDCS自身运行是不需要依赖mysql的
# 如果你需要在自定义函数中使用可以在这里进行配置
mysql_database = FastDCS
mysql_host = localhost
mysql_user = FastDCS
mysql_passwd = fastdcs
mysql_port = 3306
Clone this wiki locally