Графический кластер 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 г.