クローラープロジェクト進捗報告

クローラープロジェクト進捗報告
高橋 俊行
今日の報告
 高速化
 Export API
Crawler, Spider, WWW robot
(a) Fetch a page
(b) Parse it to extract all linked URLs
(c) For all the URLs not seen before,
repeat (a)-(c)
[Broder03]
Web World
The web is very large.
 Google indexed over 3billion pages.
 The web has doubled every 9-12 months
The web pages are changing rapidly.
 Any change
About 40% of all web pages change weekly.
 Change by a third or more
About 7% of all web pages change weekly
Goal
To obtain a reasonably fresh and
complete snapshot of the web, a
search engine must crawl at least 100
million pages per day.
 Step (a) must be executed 1,000
times/sec.
 Membership test in step (c) must be
done well over ten thousand times/sec.
Issues
Parallel and distributed
Tolerance to failures
Scalability
Politeness
 Robot exclusion protocol
 No DoS nor DDoS
Zao project
空いている計算機資源を有効活用
世界中に分散→World Wide Web Crawler
分散Indexing, Link Analysis
とりあえず、、、
Cluster を使用したcrawling
 NEC Express5800 16台
 Compaq DL360 16台
1000pages/sec をめざす
 4台のDEC DS20で270pages/sec
 16台のDEC DS20で500pages/secの報告あり
Kototoi.org(133.11.36.x)
www.kototoi.org
計算ノード
 Sun Blade 1000 * 16 (SPARC)
 Compaq DL360 * 16 (Dual PIII 800MHz)
 NEC Express 5800 * 16 (PIII 1.4GHz)
データサーバー
 IBM xSeries (8 Xeon 1.6GHz) 3TB Disk
 20TB RAID
東大幹線に直接光接続
Zao crawler version 1
http://www.abc.com/def.html をcrawl
User-agent: *
 www.abc.com → 133.11.36.2
Disallow: /cgi-bin
 www.abc.com/robots.txt の取得 Disallow: /images
 www.abc.com/def.html の取得
 /def.html のparse → あたらしいリンクの発見
同時に数千の Webサーバーにアクセス
ひとつのWebサーバーには1分おき
複数のクローラーが協調してcrawl
資源の追加削除が自由でスケーラブルな性能
Zaoクローラーの構造
Retriever
Scheduler
Extractor
Compressor
Downloader
Partition
Table
Eliminator
Forwarder
Document
DB(Silo)
URL
DB
Forward
URLs
Document flow
URL flow
to other crawlers
Partition Table
layout_table = [
(‘q0.*.*.*.o0’, ‘tsubame00.kototoi.org’),
(‘q1.*.*.*.o0’, ‘tsubame01.kototoi.org’),
(‘q2.*.*.*.o0’, ‘tsubame02.kototoi.org’),
(‘q3.*.*.*.o0’, ‘tsubame03.kototoi.org’),
(‘q0.*.*.*.o4’, ‘hibari00.kototoi.org’),
(‘q1.*.*.*.o4’, ‘hibari01.kototoi.org’),
(‘q2.*.*.*.o4’, ‘hibari02.kototoi.org’),
(‘q3.*.*.*.o4’, ‘hibari03.kototoi.org’),
]
fc403278
q3
o1
(‘q3.*.*.*.o1’,
‘tsubame07.kototoi.org’)
h0~h1
q0~q3
o0~o7
Half
Quarter
Octant
Retriever の構造
Ready
Queue
URL
Internet
Connection
Holdover
Queue
URL
Job
Idle
deny
holdover
ready
save
error
connect
URL &
Page
Retrieve
Queue
Idling
sending
saving
receive
send
timeout
receiving
Eliminator
Extracted URLを
 他のcrawlerに転送
 URLDBに照会して
→New URLを抽出
URLDB
非常に大きい、ボトルネックになりやすい
分割、統合が短い時間でできる必要有
照会~抽出の時間はきにしない
Eliminator
Extracted URLを
 他のcrawlerに転送
 URLDBに照会して
→New URLを抽出
URLDB
このときにキャッシュを使う!
[Cho02][Broder03]
非常に大きい、ボトルネックになりやすい
分割、統合が短い時間でできる必要有
照会~抽出の時間はきにしない
URL Cache
役割
 他のcrawlerに転送するURLを減らす
 URLDBへの照会を減らす
CLOCK または RANDOM がよい
キャッシュサイズは50000が適当
[Broder03]
CLOCK Cache
キャッシュサイズぶんのMark bit
 Hit したときは Mark bit を on にする
Evict するエントリを選ぶとき
 Handler がMark bit の配列をスキャン
Mark bit がon だったらoff にする
Mark bit がoff だったらEvict
URL Cache のインプリ
 CLOCKのインプリ
RANDOMのインプリ
URLDB の構造
ハッシュ値
www.abc.com:80/def.html
fc403278
0
4
c
f
URLDB の特徴
URLの投入に必要な時間は短いが、そのURL
がLeafに到達するまでそれが「新しいURL」な
のかどうかわからない
少ないメモリでもok
物理的な拡張が容易
URLDB の問題とその解決
 投入したURLがなかなか判定されない
Push 機能の導入
Retriever からの input がなくなったときに
乱数を発生し、その乱数へむかってpush
経験から改良したところ
eth0: can’t fill rx buffer (force 0)
 同時にMEMORY ERROR
 大きなファイルを取ってくるときに発生
→大きなファイルは取ってこない
腐ったデータを読み込むと動かない
→try catch で回避
メモリリーク
ドキュメントの数
ドキュメントの大きさ
圧縮しながらDiskの読み書きは損
Zlibを使い、URLを2000000行読み書きした
 圧縮して書く
 解凍して読む
69.93秒
30.15秒
 圧縮せずに書く
 圧縮しなかったものを読む
48.11秒
17.47秒
NEC Express5800 PIII 1.4GHz Ultra160SCSI
htmlしかとってこない
.html 60.4%
15.1%
.htm
9.9%
/
2.4%
.jpg
.shtml 2.2%
none
1.8%
.asp
1.6%
.pdf
1.4%
I/O の高速化
 URLDBはローカルディスクにつくる
 SiloとURLDBは別のディスクにつくる
Stop words
 stop_words =
'(free|password|pussy|bitch|manko|a
dult|fuck|sex|erotic|panty|skirt|porn|
nude|naked|AppleGate|pink|girl|teen
|kitt|video|sumi\masen|xxx|kogal|chikan|sukebe|mov
ie|superloose|peep)'
この1年
32台 16台
I/Oの高速化
RANDOM
Cache の
インプリ
I/Oの高速化
Push のインプリ
URLDB非圧縮
この2週間
性能が右肩下がりなのはなぜ
 URLDBから生産されるURLが少ない
 <Base> タグを認識していないために発生す
るループ
http://abc.com/error/
404 – Page not found
<base href=http://abc.com/>
<a href=“hoge”> hoge </a>
<a href=“aho”> aho </a>
http://abc.com/error/hoge
http://abc.com/error/aho
Export API
 できるだけシンプル
 tokiでもtsubameでもxx研のデスクトップで
も同じAPIがつかえる
Kototoiネットワーク
toki
hibari00
tsubame00
sekirei00
5TB
home
hibari01
tsubame01
sekirei01
5TB
hibari02
tsubame02
sekirei02
5TB
hibari03
tsubame03
sekirei03
5TB
sekirei04
5TB
PIII 800MHz*2
hibari15
PIII 800MHz*2
tsubame15
PIII 1.4GHz
Xeon
Zao C API
 クライアント・サーバ方式
 ユーザアプリケーション=クライアント
 Siloが読めるところでサーバを立てる
 Siloを読むためのCライブラリを用意




ZaoStream* open_stream(char*)
ZaoUrl* get_url(ZaoStream*)
void request_contents(ZaoUrl*)
ZaoPage* get_contents(ZaoStream*)
デモ
性能
 1秒間にget_urlを実行できる回数
 6万回弱
 1秒間に
get_url/request_contents/get_content
sを実行できる回数
 1600回弱
 1秒間に.jpドメインだけをget_contentsでき
る回数
 1600回弱
Future work
 APIの並列化問題
 APIの関数を並列に呼び出したらどうなる?
 複数のストリーム○
 シングルストリームマルチスレッド×
 複数のクライアントにどのように分散させるか
 現在はすべてのページをスキャン
 途中でとめて途中から再開したい
 グループで仕事をシェアしたい
References
 [Broder03] A. Z. Broder, M. Najork, and J. L.
Wiener. Efficient URL Caching for World Wide
Web Crawling. In Proceedings of the 12th
World Wide Web Conference, May 2003.
 [Cho02] J. Cho and H. Garcia-Molina.
Parallel crawlers. In Proceedings of the 11th
World Wide Web Conference, May 2002.
 [Najork01] M. Najork and A. Heydon. Highperformance web crawling. SRC Research
Report 173, Compaq Systems Research
Center, Palo Alto, CA, Sept. 2001.