Итак, вы хотите собрать огромное количество данных из Интернета? Какой механизм хранения лучше, чем Кассандра? Это легко сделать с 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_tracescqlsh> 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 *. Если кто-то сделает это улучшение, пожалуйста, дайте мне знать!