Итак, вы хотите собрать огромное количество данных из Интернета? Какой механизм хранения лучше, чем Кассандра? Это легко сделать с Nutch.
Часто люди используют Hbase за Nutch. Это работает, но не может быть идеальным решением, если вы являетесь (или хотите быть) магазином Cassandra. К счастью, Nutch 2+ использует уровень абстракции Gora для доступа к своему механизму хранения данных. Гора поддерживает Кассандру. Таким образом, с несколькими изменениями в конфигурации вы можете использовать Nutch для сбора контента непосредственно в Cassandra.
Начнем с Nutch 2.1 … Мне нравится переходить непосредственно от источника:
1
2
3
|
$ git clone https: //github .com /apache/nutch .git -b 2.1 ... $ ant |
После сборки у вас будет каталог nutch / runtime / local, в котором находятся исполняемые файлы. Теперь давайте настроим Nutch для Cassandra.
Сначала нам нужно добавить агента в Nutch, добавив следующий элемент xml в nutch / conf / nutch-site.xml:
1
2
3
4
|
< property > < name >http.agent.name</ name > < value >My Nutch Spider</ value > </ property > |
Далее нам нужно сказать Натчу использовать Гору Кассандру в качестве механизма его сохранения. Для этого мы добавим следующий элемент в файл nutch / conf / nutch-site.xml:
1
2
3
4
5
|
< property > < name >storage.data.store.class</ name > < value >org.apache.gora.cassandra.store.CassandraStore</ value > < description >Default class for storing data</ description > </ property > |
Далее нам нужно рассказать Горе о Кассандре. Отредактируйте файл nutch / conf / gora.properties. Закомментируйте записи SQL и раскомментируйте следующую строку:
1
|
gora.cassandrastore.servers=localhost:9160 |
Кроме того, нам нужно добавить зависимость для Гора-Кассандра. Отредактируйте файл ivy / ivy.xml и раскомментируйте следующую строку:
1
|
< dependency org = "org.apache.gora" name = "gora-cassandra" rev = "0.2" conf="*->default" /> |
Наконец, мы хотим заново сгенерировать среду выполнения с новой конфигурацией и дополнительной зависимостью. Сделайте это с помощью следующей команды ant:
1
|
ant runtime |
Теперь мы готовы к запуску!
Создайте каталог с именем «urls», с файлом с именем seed.txt, который содержит следующую строку:
1
|
http: //nutch .apache.org/ |
Затем обновите URL-адрес регулярного выражения в файле conf / regex-urlfilter.txt:
1
|
+^http: // ([a-z0-9]*\.)*nutch.apache.org/ |
Теперь ползи!
1
|
bin /nutch crawl urls - dir crawl -depth 3 -topN 5 |
Это будет собирать веб-страницы для Кассандры !!
Давайте посмотрим на модель данных на секунду …
Вы заметите, что было создано новое пространство ключей: веб-страница. Это пространство клавиш содержит три таблицы: f, p и sc.
1
2
3
4
5
6
7
|
[cqlsh 2.3.0 | Cassandra 1.2.1 | CQL spec 3.0.0 | Thrift protocol 19.35.0] Use HELP for help. cqlsh> describe keyspaces; system webpage druid system_auth system_traces cqlsh> use webpage; cqlsh:webpage> describe tables; f p sc |
Каждая из этих таблиц является хранилищем значений ключей. Чтобы понять, что находится в каждом из них, взгляните на файл nutch / conf / gora-cassandra-mapping.xml. Я включил фрагмент ниже:
1
2
3
4
5
6
|
< field name = "baseUrl" family = "f" qualifier = "bas" /> < field name = "status" family = "f" qualifier = "st" /> < field name = "prevFetchTime" family = "f" qualifier = "pts" /> < field name = "fetchTime" family = "f" qualifier = "ts" /> < field name = "fetchInterval" family = "f" qualifier = "fi" /> < field name = "retriesSinceFetch" family = "f" qualifier = "rsf" /> |
Из этого файла сопоставления вы можете увидеть, что он помещает в таблицу, но, к сожалению, схема на самом деле не способствует исследованию из приглашения CQL. (Я думаю, что здесь есть место для улучшения) Было бы неплохо, если бы существовала схема, дружественная к CQL, но этого может быть трудно достичь с помощью gora. Увы, это, вероятно, цена абстракции.
Таким образом, самое простое — использовать инструмент для извлечения данных. Вы можете извлечь данные с помощью следующей команды:
1
|
runtime /local/bin/nutch readdb -dump data -content |
Когда это завершится, перейдите в каталог данных и вы увидите выходные данные задания Hadoop, которое использовалось для извлечения данных. Затем мы можем использовать это для анализа.
Я действительно хотел бы, чтобы Nutch использовал лучшую схему для C *. Было бы замечательно, если бы эти данные были немедленно использованы изнутри C *. Если кто-то сделает это улучшение, пожалуйста, дайте мне знать!