ZhongZiChang’s Dao

July 17, 2007

分布式搜索引擎技术的实现-开篇

Filed under: 未分类 — 钟 子昌 @ 2:16 am

最近觉得想看书又没耐心,想炼字却不够专注,想玩乐器怕被邻居骂,金刚经背了一篇,法会因由分… 有机会再读;慧禅法师的讲经看了一会就睡着。还是写写blog最实际。

前段时间将nutch搜索部分改写成能对普通Lucene索引库进行检索的分布式搜索系统,暂时命名为billy。还不知道用来作什么用,搁置一段时间后,决定将我对nutch搜索部分的架构和实现的分析,以及如何将nutch改写成billy的过程写出来,这也能为开源出一点力。接下来的日子里,将慢慢的随意的写下我对Hadoop 、Lucene4j 、nutch-plugin系统 、rpc 的实现等模块的理解。

June 17, 2007

在办公室喝啤酒的小兔

Filed under: 未分类 — 钟 子昌 @ 10:38 pm

环保的时代来到

Filed under: 未分类 — 钟 子昌 @ 1:35 am

今天重温了电影”the day after tomorrow” ,中文名”后天“。这几年地球的温室效应太严重,在北京三年的时间里,5月份的气温从十几度升到二十几度。当年5月是不能是不能穿这一件T-shirt到处晃的。世界发展的主题已经是环保了。

June 1, 2007

又庆祝六一儿童节le

Filed under: 未分类 — 钟 子昌 @ 1:31 pm

这段时间忙着分布式搜索的收尾工作。几个月,终于能跑起来,虽然目前还没时间做太多的测试并且一些特别的需求还是需要特别的处理,但是我对它很乐观。

由于朋友提示我的blog难看并且不更新,就抽空自己动手把版面修改一下。布局不想动了,色彩换成我喜欢的中国红,另外背景换成我的生肖马:-p 。同时把IM的图标换成一个“道”字,是觉得做事应该顺其自然,在合适的时间做合适的事,做到为事而事,这样符合事物的发展规律。

北京三年,认识好多nb的朋友,反正不是已经nb,就是将要nb的。记得三年前的这个时候来北京,五月,大约4号,我背着包,穿着短袖短裤,从深圳到北京,一下火车,冻得发抖,感觉在车上睡一觉就从夏天直接入冬了… sorry 我思维跳跃比较大,不想长篇大论的 :-)

接下来准备回家一趟,今年过年的时候只在家待了三天。五一也没有回去。打算利用这段过渡时间回家。游山玩水,拜访亲朋好友–那是不太可能的。最多在家能放松的睡觉吃饭,待上几天就很满足了。

其实内容与六一没关系,只是今天儿童节,祝各位儿童节日快乐!!!

April 17, 2007

今天才发现有一些评论需要回复

Filed under: 未分类 — 钟 子昌 @ 11:06 pm

刚开始时是没开评论,后来开了但是评论需要手动通过。我上blog的后台只会发文,发完就离开。对于以前没有回复的兄弟表示抱歉!!! :-p

ibm发布支持mapreduce开发框架的eclipse插件

Filed under: 未分类 — 钟 子昌 @ 10:59 pm

看看下面其提供的Cheat Sheets就知道提供什么样的方便!

cheat-sheets.gif

nutch里面的三角关系

Filed under: 未分类 — 钟 子昌 @ 10:51 pm

relationship.gif
这个模型比较适用于层次式的集群系统

April 9, 2007

用Hadoop搭建分布式存储和分布式运算集群

Filed under: 开发, 搜索, 配置 — 钟 子昌 @ 7:59 pm

1. 列出使用的机器

普通PC,要求:
cpu: 750M-1G
mem: >128M
disk: >10G
不需要太昂贵的机器。

机器名:
finewine01
finewine02
finewine03

将finewine01设为主节点,其它的机器为从节点。

2. 下载和生成

从这里checkout,我选择trunk
http://svn.apache.org/repos/asf/lucene/hadoop/
使用ant进行生成

3. 部署前的准备工作
在主节点的start-all.sh脚本执行后,主节点和从节点的所有服务运行。即这个脚本将启动主节点的服务,并ssh到从所有的节点,继而启动从节点的服务。

start-all.sh这个脚本假定hadoop被安装在所有机器的同一个位置,每一台机器都用同一个路径存放hadoop的数据。

我们需要在每台机器上创建同样的目录结构。
/hadoop
/hadoop-install/hadoop-0.10.0 hadoop的0.10.0版的安装位置
/filesystem hadoop文件系统的根
/home 用户hadoop的主目录

以root登录到所有的机器,创建hadoop用户和目录结构。
ssh -l root finewine01
mkdir /hadoop
mkdir /hadoop/hadoop-install
mkdir /hadoop/filesystem
mkdir /hadoop/home
groupadd hadoop
useradd -d /hadoop/home -g hadoop hadoop
chown -R hadoop:hadoop /hadoop
passwd hadoop hadooppassword

start-all.sh脚本要启动所有机器的服务,需要对所有的机器进行ssh无密码的登录的能力。因此我们需要在每台机器上创建一个ssh key。在这个例子中,主节点也需要启动自己的服务,因此主节点同样需要做无密码的ssh登录设置。

用vi编辑/hadoop/hadoop-install/hadoop-0.10.0/conf/hadoop-env.sh,将下面的环境变量设置:

export HADOOP_HOME=/hadoop/hadoop-install/hadoop-0.10.0
export JAVA_HOME=/usr/java/jdk1.5.0_06
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves

这个文件还有很多变量,这些变量的设定影响hadoop的运行。比如你以后执行脚本时发生ssh错误,就需要调整其中的HADOOP_SSH_OPTS变量。
同时需要注意的是,在初始的拷贝操作后,需要在设置hadoop-env.sh文件中的HADOOP_MASTER变量,这样程序才能通过rsync同步主节点的改变到所有的从节点上。

在主节点上创建ssh keys,然后复制到各个从节点上。这些操作必须由先前创建的hadoop用户完成。不要su成hadoop用户来做。开启一个新shell,以hadoop用户的身份登录来完成这些操作。
cd /hadoop/home
ssh-keygen -t rsa (Use empty responses for each prompt)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /hadoop/home/.ssh/id_rsa.
Your public key has been saved in /hadoop/home/.ssh/id_rsa.pub.
The key fingerprint is:
a6:5c:c3:eb:18:94:0b:06:a1:a6:29:58:fa:80:0a:bc nutch@localhost

在主节点上,拷贝刚才创建的公共key到一个名为authorized_keys的文件:
cd /hadoop/home/.ssh
cp id_rsa.pub authorized_keys

只需在主节点上运行ssh-kegen程序。其他节点的目录结构创建后,将刚才在主节点创建的keys通过scp拷贝到从节点的同样的目录上。
scp /hadoop/home/.ssh/authorized_keys hadoop@finewine02:/hadoop/home/.ssh/authorized_keys
第一次,你需要输入hadoop用户的密码。第一次登录到其他的机器上,ssh提示你是否选择将机器加入到已知的机器列表中,选择yes。这个keys文件拷贝后,以hadoop的身份从主节点到从节点的登录就不需要密码了。
可以从主节点上以hadoop的身份测试:
ssh finewine02
接下来一个命令提示符将直接出现,不需要密码的。

一旦成功在所有机器上创建ssh keys后,就可以开始在从节点上部署hadoop。

4. 部署hadoop到一个机器上

首先,我们部署hadoop到一个节点上(主节点)。确保运行正常后,加入其他从节点。下面所有的操作都是由登录后的hadoop用户进行的。
cp -R /path/to/build/* /hadoop/hadoop-install/hadoop-x.x.x

然后确保这些shell脚本文件都是unix格式,并且是可执行的(这些文件分别在/bin和/conf目录中)。

一个hadoop-site.xml的例子:

fs.default.name
finewine01:9000

The name of the default file system. Either the literal string
“local” or a host:port for NDFS.

mapred.job.tracker
finewine01:9001

The host and port that the MapReduce job tracker runs at. If
“local”, then jobs are run in-process as a single map and
reduce task.

mapred.map.tasks
2

define mapred.map tasks to be number of slave hosts

mapred.reduce.tasks
2

define mapred.reduce tasks to be number of slave hosts

dfs.name.dir
/hadoop/filesystem/name
dfs.data.dir
/hadoop/filesystem/data
mapred.system.dir
/hadoop/filesystem/mapreduce/system
mapred.local.dir
/hadoop/filesystem/mapreduce/local
dfs.replication
1
fs.default.name // 缺省的文件系统 “local”或者”host:port”

hadoop包含两个组件,分别是分布式文件系统和mapreduce功能。分布式文件系统允许你在多台普通机器上存储和复制文件。mapreduce可以让你很容易就执行并行程序任务。

分布式文件系统包含名字节点和数据节点。当一个客户想操作一个在文件系统上的文件时,它首先和名字节点联系,名字节点将告诉它在那个数据节点上可以取得文件。名字节点负责调度和保存那些数据块保存和复制到在那些机器上。数据节点是数据仓库,保存真实的文件数据块。当你在同一台机器上运行名字节点和数据节点的服务时,它同样会通过sockets来通讯,如同在不同机器上一样。

mapreduce是一种分布式运算,就如分布式文件系统一样,只不过分布的一个运算操作,而不是文件。负责mapreduce调度服务器叫做mapreduce job tracker。每一个执行运算操作的节点都有一个守护叫task tracker,task tracker运行并且和job tracker通信。

主节点和从节点的通信以连续的heartbeat(5-10秒)的方式进行。如果从节点的heartbeat停止,主节点将假定该从节点失效并不再使用该节点。

mapredu.job.traker // mapreduce的主节点,”local”或者”host:port”

mapred.map.tasks和mapred.reduce.tasks用于设定并行任务的数量。

dfs.name.dir // 名字节点用于存储数据节点的跟踪和调度信息

dfs.data.dir // 数据节点用于存储实际的数据块

mapred.system.dir // mapreduce tasker 存储自己的数据,仅仅在tasker所在的机器上,不在mapreduce主机上

mpred.local.dir // mapreduce 在节点上存储自己的本地数据。mapreduce使用巨大的本地空间来执行它的tasks。tasks退出时,mapreduce产生的中间文件并没有被删除。在每个节点上,这个属性是一样的。

dfs.replication // 冗余,单个文件将被拷贝到多少机器上。这个值不能高于的所有的数据节点的数量。否则守护启动时会看见很多错误信息。

在你启动hadoop服务之前,确保格式化名字节点

bin/hadoop namenode -format

现在可以启动hadoop服务了

bin/start-all.sh

停止hadoop服务可以使用下面的命令

bin/stop-all.sh

如果设置正确,会看到正常的输出信息

5. 部署Hadoop到多台机器上

一旦你在一台机器上成功运行hadoop,就可以将配置文件拷贝到其他的机器上。
如:
scp -r /hadoop/hadoop-install/hadoop-x.x.x hadoop@finewine02:/hadoop/hadoop-install/

对每台从节点机器都执行这个操作。然后编辑slaves文件,增加每一个slave到这个文件中,每行一个。编辑hadoop-site.xml的值,修改map和reduce的task的数量。修改replication属性。

6. 分布式搜索

产品系统一般每个索引库存100万条记录。50个服务器每秒处理20多个请求。
多处理器、多磁盘的系统,每个服务使用一个独立的磁盘和索引,这样机器的费用可以降低50%,电力解约到75%。一个多磁盘的机器并不能像单磁盘机器一样每秒处理那么多查询,但是它能处理更大的索引数量,因此平均起来效率更高一些。

7. 同步代码到从节点上

hadoop提供同步代码到从节点的能力。这个功能是可选的,因为它会减慢服务启动的速度,并且有时候你并不想同步改变到从节点上。

虽然从节点可以和主节点同步,但在第一次,你仍然需要基本的安装到从节点上,以至同步的脚本生效。这些工作上面我们在上面已经做了,所以不需要做改变。

同步的启动是由主节点ssh到从节点上,并执行bin/hadoop-daemon.sh脚本。这个脚本调用rsync来同步主节点。这表示你需要能以无密码的方式由从节点登录到主节点。前面,我们设置了从主节点到从节点的无密码登录,现在则设置反向登录。

如果是由于rsync选项引起了问题,查看bin/hadoop-daemon.sh脚本,大约在82行有rsync的选项。

那么,首先第一件事情就是在conf/hadoop-env.sh文件中,设置hadoop主节点变量。如:
export HADOOP_MASTER=finewine01:/hadoop/hadoop-install/hadoop-x.x.x

然后拷贝到所有从节点上,scp /hadoop/hadoop-installl/hadoop-x.x.x/conf/hadoop-env.sh hadoop@finewine02:/hadoop/hadoop-install/hadoop-x.x.x/hadoop-env.sh

最终,你需要登录到所有的从节点上,为每台机器创建一个ssh key。然后拷贝回到主节点,并追加到文件/hadoop/home/.ssh/authorized_keys文件中。在每个从节点上进行如下操作:

ssh -l nutch finewine02
cd /hadoop/home/.ssh

ssh-keygen -t rsa (Use empty responses for each prompt)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /hadoop/home/.ssh/id_rsa.
Your public key has been saved in /hadoop/home/.ssh/id_rsa.pub.
The key fingerprint is:
a6:5c:c3:eb:18:94:0b:06:a1:a6:29:58:fa:80:0a:bc nutch@localhost

scp id_rsa.pub hadoop@finewine01:/hadoop/home/finewine02.pub

在每台从节点机器完成上面的操作后,追加所有的文件到主节点的authorized_keys文件。

cd /hadooop/home
cat finewine*.pub >> .ssh/authorized_keys

当这些操作完成后,每次运行bin/start-all.sh脚本,文件都会从主节点同步的每一个从节点。

8. 查看状况

端口 : 50070
dfs的状态

端口:50060
tracker状态

50030
map/reduce管理

其他端口:
dfs.secondary.info.port 50090
dfs.datanode.port 50010
dfs.info.port 50070
mapred.job.tracker.info.port 50030
mapred.task.tracker.report.port 50050
tasktracker.http.port 50060

April 7, 2007

linux下暂时没法用q

Filed under: 未分类 — 钟 子昌 @ 10:42 pm

腾迅改了通信协议,导致lumaqq和gaim都上不了qq,有需要的话加我msn:zhongzichang (at) hotmail.com

March 2, 2007

十分钟比较google图书搜索和cbdb

Filed under: 搜索, 有用的网站 — 钟 子昌 @ 4:46 pm

google的书不全(关于计算机方面的书比较多),cbdb的书很全,包括了从1900年到2006年的所有中文书籍。

google图书搜索 将一些人们关心的分类提取出来(可全文阅读,国学图书),cbdb其实很智能,功能隐藏的太深了,应该适当的提示。

google提供部分电子书(可全文阅读,部分阅读),可能数据还很少,搜不出来。

google搜索结果不准确,我试了两个查询,分别是”小说”,“武侠小说”,”windows编程”,”邓小平”,”刘德华”,搜索结果惨不忍睹,cbdb的效果比它好多了。

google有书的封面图片,cbdb还没有,据说正在加。

google网页的视觉感受比cbdb好,cbdb的字体偏小,颜色淡,不耐看。

google提供购买书籍的途径,cbdb没有。

目前google使用操作比cbdb方便。建议cbdb在显示单本书的页面上使用ajax技术,比如评论就不要再跳转一个页面了,真的很麻烦。还要再转一个页面才能看图书详情,太麻烦了,而且“图书详情”这个是什么东西嘛,点击进去还是跟原来的页面内容差不多,晕菜了。在显示单本图书的页面时应该把和这本书相关的所有的功能服务都提供,一目了然比不断的跳转方便多了。

就这么点内容,不说总结了。

« Older PostsNewer Posts »

Powered by WordPress