-
Notifications
You must be signed in to change notification settings - Fork 17
FastDCS开发说明
##1.5 开发说明 FastDCS通过简洁而有效的设计,为开发者提供一套简洁而有效的分布式计算框架,开发者只需要定制由FastDCS提供的几个用户自定义UDF函数(User defined function),就可以完成整个分布式系统的开发工作。
###1.5.2 管理节点Master开发说明
开发者可以通过自定义Master节点类实现自定义的FastDCS管理节点功能,需要处理的有如下几个部分:
-
自定义 Master 类名
DemoMaster
,继承 Master 类后即可拥有FastDCS服务集群的管理功能; -
如果需要初始化
DemoMaster
中的自定义变量,可以在虚函数 InitialTracker 中实现; -
如果需要释放
DemoMaster
中的自定义变量,可以在虚函数 FinalizeTracker 中实现; -
必须在虚函数 ImportTaskUDF 中实现 DemoMaster 中的计算任务导入到服务集群;
-
必须在虚函数 ExportTaskUDF 中实现 DemoMaster 中的计算结果保存到外部存储系统;
-
必须通过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工作节点功能,需要处理的有如下几个部分:
-
自定义 Worker 类名
DemoWorker
,继承 Worker 类后即可响应FastDCS服务集群的计算任务调度、并行计算等功能; -
如果需要初始化
DemoWorker
中的自定义变量,可以在虚函数 InitialTracker 中实现; -
如果需要释放
DemoWorker
中的自定义变量,可以在虚函数 FinalizeTracker 中实现; -
必须在虚函数 ComputingUDF 中实现 DemoWorker 中的计算处理;
-
必须通过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数据库。
编译和安装依赖环境
-
安装GCC
- 目前FastDCS开发环境使用的是 GCC 4.4.4 版本。
-
安装CMake
- CMake用于管理和编译FastDCS工程,由于FastDCS系统需要使用Protobuf,所以CMake必须安装 2.8.0 以上版本。
- 你可以通过 http://www.cmake.org/cmake/resources/software.html 下载和安装CMake的二进制版本。
- CMake安装教程点击这里
-
安装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
-
编译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