Статьи

Развертывание кластера графов Аврелия

Графический кластер Aurelius представляет собой кластер совместимых графовых технологий, которые могут быть развернуты на вычислительном кластере с несколькими машинами . В этом посте показано, как настроить кластер в Amazon EC2 (популярном поставщике облачных услуг) с использованием следующих графических технологий:

Титан является Apache2 -licensed распределенную графу базу данных , которая использует существующую живучесть технологийтакие как Apache HBase и Кассандру . Titan реализуетAPI графа Blueprints и поэтому поддерживает языкобхода / запроса графа Gremlin . [ OLTP ]

Фаунус является Apache2 -licensed партии аналитик, структура графа вычисленияоснове Apache Hadoop . Faunus используетAPI графа Blueprints и представляет Gremlin в качестве языка обхода / запросов. [ OLAP ]

Пожалуйста, обратите внимание на дату этой публикации. Могут существовать более новые версии обсуждаемых технологий, а также другие методы развертывания. Наконец, все команды указывают на пример кластера, и любое использование команд должно соответствовать конкретному кластеру, на котором производится расчет.

Конфигурация кластера

Примеры в этом посте предполагают, что у читателя есть доступ к учетной записи Amazon EC2 . Первым шагом является создание экземпляра компьютера, на котором установлена ​​как минимум Java 1.6+ . Этот экземпляр используется для порождения кластера графа. Имя, данное этому экземпляру, — agc-masterэто скромная машина m1.small. На agc-master, Apache жужжание 0.8.0 загружается и распаковывается.

~$ ssh [email protected]
...
ubuntu@ip-10-117-55-34:~$ wget http://www.apache.org/dist/whirr/whirr-0.8.0/whirr-0.8.0.tar.gz
ubuntu@ip-10-117-55-34:~$ tar -xzf whirr-0.8.0.tar.gz

Whirr — это независимый от облачных сервисов инструмент, который упрощает создание и уничтожение вычислительного кластера. «Рецепт» Whirr (то есть файл свойств) описывает машины в кластере и их соответствующие службы . Рецепт , используемый в этом посте приводится ниже и сохранить в текстовый файл с именем agc.propertiesна agc-master. Рецепт определяет большой машинный кластер на 5 мкл, содержащий HBase 0.94.1 и Hadoop 1.0.3 (см. whirr.instance-templates). HBase будет служить механизмом сохранения базы данных для Titan, а Hadoop будет служить средством пакетного вычисления для Faunus.

whirr.cluster-name=agc
whirr.instance-templates=1 zookeeper+hadoop-namenode+hadoop-jobtracker+hbase-master,4 hadoop-datanode+hadoop-tasktracker+hbase-regionserver
whirr.provider=aws-ec2
whirr.identity=${env:AWS_ACCESS_KEY_ID}
whirr.credential=${env:AWS_SECRET_ACCESS_KEY}
whirr.hardware-id=m1.large
whirr.image-id=us-east-1/ami-da0cf8b3
whirr.location-id=us-east-1
whirr.hbase.tarball.url=http://archive.apache.org/dist/hbase/hbase-0.94.1/hbase-0.94.1.tar.gz
whirr.hadoop.tarball.url=http://archive.apache.org/dist/hadoop/core/hadoop-1.0.3/hadoop-1.0.3.tar.gz
hbase-site.dfs.replication=2

От agc-master, следующие команды запустят ранее описанный кластер. Обратите внимание, что первые две строки требуют конкретной информации об учетной записи Amazon EC2. Когда запуск завершится, консоль веб-администратора Amazon EC2 покажет 5 машин m1.large.

ubuntu@ip-10-117-55-34:~$ export AWS_ACCESS_KEY_ID= # requires account specific information
ubuntu@ip-10-117-55-34:~$ export AWS_SECRET_ACCESS_KEY= # requires account specific information
ubuntu@ip-10-117-55-34:~$ ssh-keygen -t rsa -P ''
ubuntu@ip-10-117-55-34:~$ whirr-0.8.0/bin/whirr launch-cluster --config agc.properties

Развернутый кластер изображен справа, где каждая машина обслуживает свои соответствующие программные службы. В следующих разделах будет показано, как загружать и обрабатывать графические данные в кластере. Titan будет служить источником данных для пакетных аналитических работ Faunus.

Загрузка графических данных в Titan

Titan — это масштабируемая распределенная графовая база данных, которая использует существующие механизмы сохранения. Titan 0.1.0 поддерживает Apache Cassandra (AP), Apache HBase (CP) и Oracle BerkeleyDB (CA). Каждый из этих бэкэндов подчеркивает различные аспекты теоремы CAP . Для целей данного поста используется Apache HBase, и поэтому Titan является последовательным (C) и разделенным (P).

Для простоты 1 zookeeper+hadoop-namenode+hadoop-jobtracker+hbase-masterмашина будет использоваться для взаимодействия кластеров. IP-адрес можно найти в метаданных экземпляра Whirr agc-master. Причиной использования этого компьютера является то, что на нем уже установлено множество служб (например, оболочка HBase , Hadoop и т. Д.), И, следовательно, установка программного обеспечения вручную не требуется agc-master.

ubuntu@ip-10-117-55-34:~$ more .whirr/agc/instances 
us-east-1/i-3c121b41    zookeeper,hadoop-namenode,hadoop-jobtracker,hbase-master    54.242.14.83    10.12.27.208
us-east-1/i-34121b49    hadoop-datanode,hadoop-tasktracker,hbase-regionserver   184.73.57.182   10.40.23.46
us-east-1/i-38121b45    hadoop-datanode,hadoop-tasktracker,hbase-regionserver   54.242.151.125  10.12.119.135
us-east-1/i-3a121b47    hadoop-datanode,hadoop-tasktracker,hbase-regionserver   184.73.145.69   10.35.63.206
us-east-1/i-3e121b43    hadoop-datanode,hadoop-tasktracker,hbase-regionserver   50.16.174.157   10.224.3.16

Попав в машину через
ssh , Titan 0.1.0 загружается, распаковывается и
запускается консоль
Gremlin .

ubuntu@ip-10-117-55-34:~$ ssh 54.242.14.83
...ubuntu@ip-10-12-27-208:~$ wget https://github.com/downloads/thinkaurelius/titan/titan-0.1.0.zip
ubuntu@ip-10-12-27-208:~$ sudo apt-get install unzip
ubuntu@ip-10-12-27-208:~$ unzip titan-0.1.0.zip
ubuntu@ip-10-12-27-208:~$ cd titan-0.1.0/
ubuntu@ip-10-12-27-208:~/titan-0.1.0$ bin/gremlin.sh 

         \,,,/
         (o o)
-----oOOo-(_)-oOOo-----
gremlin> 

Игрушечный 1 миллион вершин / ребер загружается в Titan с помощью приведенного ниже скрипта Gremlin / Groovy (просто вырезайте и вставляйте исходный код в консоль Gremlin и подождите примерно 3 минуты). Код реализует алгоритм предпочтительного вложения . Объяснение этого алгоритма см. Во втором столбце на стр. 33 в статье Марка Ньюмана « Структура и функции сложных сетей» .

// connect Titan to HBase in batch loading mode
conf = new BaseConfiguration()
conf.setProperty('storage.backend','hbase')
conf.setProperty('storage.hostname','localhost')
conf.setProperty('storage.batch-loading','true');
g = TitanFactory.open(conf)

// preferentially attach a growing vertex set
size = 1000000; ids = [g.addVertex().id]; rand = new Random();
(1..size).each{
  v = g.addVertex();
  u = g.v(ids.get(rand.nextInt(ids.size())))
  g.addEdge(v,u,'linked');
  ids.add(u.id);
  ids.add(v.id);
  if(it % 10000 == 0) {
    g.stopTransaction(SUCCESS)
    println it
  }
}; g.shutdown()

Пакетная аналитика с Faunus

Faunus — это фреймворк для графовых вычислений на основе Hadoop . Он поддерживает эффективный глобальный анализ графов, используя последовательные операции чтения с диска (см. «Патологии больших данных» ). Faunus обеспечивает связь с Titan / HBase, Titan / Cassandra, любой базой данных Rexster, а также с текстовыми / двоичными файлами, хранящимися в HDFS . С 1 zookeeper+hadoop-namenode+hadoop-jobtracker+hbase-masterмашины Faunus 0.1-alpha загружается и распаковывается. Предоставленный titan-hbase.propertiesфайл должен быть обновлен с hbase.zookeeper.quorum=10.12.27.208вместо localhost. IP — адрес 10.12.27.208 предоставляется ~/.whirr/agc/instancesна agc-master. Наконец, консоль Gremlin запускается.

ubuntu@ip-10-12-27-208:~$ wget https://github.com/downloads/thinkaurelius/faunus/faunus-0.1-alpha.zip
ubuntu@ip-10-12-27-208:~$ unzip faunus-0.1-alpha.zip
ubuntu@ip-10-12-27-208:~$ cd faunus-0.1-alpha/
ubuntu@ip-10-12-27-208:~/faunus-0.1-alpha$ vi bin/titan-hbase.properties
ubuntu@ip-10-12-27-208:~/faunus-0.1-alpha$ bin/gremlin.sh
	 
         \,,,/
         (o o)
-----oOOo-(_)-oOOo-----
gremlin> 

Несколько примеров рабочих мест Faunus представлены ниже. Последняя работа в строке 9 генерирует
распределение в градусах .
В степени вершины определяется как число ребер , входящих в вершину. Выводимый результат указывает, сколько вершин (второй столбец) имеют конкретную степень (первый столбец). Например, 167 050 вершин имеют только 1 входящее ребро.

gremlin> g = FaunusFactory.open('bin/titan-hbase.properties')
==>faunusgraph[titanhbaseinputformat]
gremlin> g.V.count() // how many vertices in the graph?
==>1000001
gremlin> g.E.count() // how many edges in the graph?
==>1000000
gremlin> g.V.out.out.out.count() // how many length 3 paths are in the graph?
==>988780
gremlin> g.V.sideEffect('{it.degree = it.inE.count()}').degree.groupCount // what is the graph's in-degree distribution?
==>1 167050
==>10    2305
==>100   6
==>108   3
==>119   3
==>122   3
==>133   1
==>144   2
==>155   1
==>166   2
==>18    471
==>188   1
==>21    306
==>232   1
==>254   1
==>...
gremlin> 

В заключение, результат распределения в градусах взят из HDFS Hadoop (хранится в output/job-0). Затем scp используется для загрузки файла, agc-masterа затем снова для загрузки файла на локальный компьютер (например, ноутбук). Если на локальном компьютере установлен R , то файл можно построить и визуализировать (см. Последнюю диаграмму ниже). Логарифмический график демонстрирует известный результат , что алгоритм льготного вложения генерирует граф с степенным распределением степени (то есть «естественная» статистика).

ubuntu@ip-10-12-27-208:~$ hadoop fs -getmerge output/job-0 distribution.txt
ubuntu@ip-10-12-27-208:~$ head -n5 distribution.txt
1   167050
10  2305
100 6
108 3
119 3
ubuntu@ip-10-12-27-208:~$ exit
...
ubuntu@ip-10-117-55-34:~$ scp 54.242.14.83:~/distribution.txt .
ubuntu@ip-10-117-55-34:~$ exit
...
~$ scp [email protected]:~/distribution.txt .
~$ r
> t = read.table('distribution.txt')
> plot(t,log='xy',xlab='in-degree',ylab='frequency')

Вывод

Aurelius Graph Cluster используется для обработки крупномасштабных графов, где массовый масштаб обозначает граф, настолько большой, что он не помещается в пределах ресурсов одной машины. Другими словами, кластер графов Аурелия — это все о данных больших графов. В этом посте были рассмотрены две кластерные технологии: Титан и Фаунус . Они служат двум различным потребностям вычисления графа. Titan поддерживает тысячи одновременных топологически локальных взаимодействий графов в реальном времени. Faunus, с другой стороны, поддерживает длительный, топологически глобальный анализ графов. Другими словами, они обеспечивают функциональность OLTP и OLAP соответственно.

Рекомендации

Лондон, Г., « Настройка кластера Hadoop / HBase на EC2 в (О) часе », Cloudera Developer Center, октябрь 2012 г.

Ньюман, М., « Структура и функции сложных сетей », SIAM Review, том 45, страницы 167-256, 2003.

Джейкобс А., « Патологии больших данных », ACM Communications, том 7, номер 6, июль 2009 г.

Авторы

Марко А. Родригес Дэн Ларок