C++实现的GFS--分布式文件系统KosmosFS的编译和简单部署
fmms
13年前
<p>KosmosFS像Hadoop HDFS一样,是google GFS的开源实现,不过KFS是C++语言写成,目前只支持linux和solaris系统。由于使用了C++开发,所以必然比HDFS在性能和稳定性上有先天优势,在研究其源码之前,先看看如何编译部署它吧。很繁琐,因为KFS依赖了大量的第三方软件,而C++既依赖于操作系统又在软件工程上比java 差,所以编译安装它要做大量准备工作。今天抽空装了个KFS,写下过程。</p> <p> </p> <p>首先可以到<a href="/misc/goto?guid=4959517424030035641">http://code.google.com/p/kosmosfs/downloads/list</a>上下载0.5版本的源码。我的Linux版本是CentOS 5.3 Final,linux kernel版本是2.6.18,大家可以参考。</p> <p> </p> <p>这个项目依赖的东东非常多,强烈建议一定要装yum工具,减少我们的工作量。必须预先安装哪些包呢?列一下:</p> <p>openssl</p> <p>openssl-devel</p> <p>xfsprogs</p> <p>xfsprogs-devel</p> <p>e2fsprogs</p> <p>e2fsprogs-devel</p> <p>log4cpp</p> <p>boost</p> <p>boost-devel</p> <p>大家执行下yum install -y [上面的包名],把以上必须装的包先装好。然后我们开始编译kosmosFS。假定我们把源码放在~/code/kfs目录下。</p> <pre class="brush:shell; toolbar: true; auto-links: false;">cd ~/code/kfs mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo ~/code/kfs/ make make install</pre>如果以上步骤都没有错误,将会在build目录下生成bin和lib目录。 <p></p> <p>如果需要编译支持java的client包,还需要安装ant工具,有了yum就简单了,在build的上一层目录执行:</p> <pre class="brush:shell; toolbar: true; auto-links: false;">yum install -y ant ant jar </pre>检查是否生成了build/kfs-0.5.jar 和build/class目录,确认是否成功。 <p></p> <p> </p> <p>下面我们可以部署KFS了,这点KFS做得很好,上面它依赖了xfs就是为了支持自动部署的。但是,这个自动部署(它也只支持自动部署)需要从安装机器能够无密码的ssh登录到目标机器。所以,我们也要安装个openssh:</p> <pre class="brush:shell; toolbar: true; auto-links: false;">yum install -y openssh*</pre>当A机器需要无密码的访问B机器时,我们需要先在B机器上用ssh-keygen -t rsa命令生成公匙id_rsa.pub,然后拷贝到A机器相应用户的.ssh目录下,覆盖authorized_keys文件。之后就不用再输入ssh 密码了,这样我们的安装程序可以往下走了。 <p></p> <p> </p> <p>安装kfs一般只需要准备好一个文件即可,我们进入kfs/scripts目录,建立machines.cfg文件,文件内容可以如下:</p> <pre class="brush:shell; toolbar: true; auto-links: false;">[metaserver] node: localhost rundir: /home/leon/kfsRun/meta baseport: 20000 clusterkey: test-cluster [chunkserver1] node: localhost rundir: /home/leon/kfsRun/chunk1 baseport: 30000 space: 10 G [chunkserver2] node: localhost rundir: /home/leon/kfsRun/chunk2 baseport: 40000 space: 10000 M</pre>这样就只有一个node结点,chunk和meta都在这个server上。必须保证ssh登陆本机也是无密码的,KFS没那么智能,安装本机也会试图ssh本机的。 <p></p> <p>安装命令如下:</p> <pre class="brush:shell; toolbar: true; auto-links: false;">scripts$ python kfssetup.py -f machines.cfg -b ../build -w ../webui -s</pre>成功后启动命令如下: <pre class="brush:shell; toolbar: true; auto-links: false;">python kfslaunch.py -f machines.cfg --start</pre>查看运行状态可以到kfs/build/bin/tools目录下,执行: <pre class="brush:shell; toolbar: true; auto-links: false;">./kfsping -c -s localhost -p 30000</pre>查看指定IP和端口上的服务是否正常。结果类似下面: <pre class="brush:shell; toolbar: true; auto-links: false;">Meta-server: localhost 20100 Total-space: 5190.17 (MB) Used-space: 0 (MB) </pre>这样一个最简单的KFS就已经部署成功了。研究其源码的话,可以在这上面gdb了。 <br /> <br /> 来自: <a href="/misc/goto?guid=4959517424114755885" target="_blank">http://blog.csdn.net/russell_tao/article/details/7207093</a> <p></p> <p></p> <p></p> <p></p> <p></p>