Статьи

Высокопроизводительные вычислительные кластеры (HPCC) и Cassandra на OS X

Наша новая материнская компания LexisNexis обладает одной из крупнейших в мире баз данных публичных записей:

«… Наша обширная коллекция из более чем 46 миллиардов записей из более чем 10 000 различных источников, включая публичные, частные, регулируемые и производные данные. Вы получаете исчерпывающую информацию о примерно 269 млн. Человек и 277 млн. Уникальных предприятий ».

http://www.lexisnexis.com/en-us/products/public-records.page

И они управляли, анализировали и искали эту базу данных в течение десятилетий. За это время они создали целый ряд технологий «больших данных». В совокупности LexisNexis называет эти технологии своей платформой высокопроизводительных вычислительных кластеров (HPCC).

HPCC полностью с открытым исходным кодом:

Естественно, мы работаем через объединение HPCC с нашим стеком управления и анализа данных в реальном времени. Потенциал действительно захватывающий. В частности, HPCC имеет сложные библиотеки машинного обучения и статистики и механизм запросов (Roxie), способный обслуживать эту статистику.

Не важно, HPCC может использовать Cassandra в качестве механизма хранения данных! (FTW!)

Платформа HPCC технически не поддерживается на Mac, но вот что я сделал для ее запуска:

HPCC Установить

  • Клонировать репозиторий github и его подмодули (git submodule update –init –recursive)
  • Вытащите мои патчи ( https://github.com/hpcc-systems/HPCC-Platform/pull/7166 )
  • Установите зависимости используя brew
    1
    2
    3
    4
    5
    6
    brew install icu4c
    brew install boost
    brew install libarchive
    brew install bison27
    brew install openldap
    brew install nodejs
  • Создайте каталог для сборки и оттуда запустите cmake:
    1
    2
    3
    export CC=/usr/bin/clang
    export CXX=/usr/bin/clang++
    cmake ../ -DICU_LIBRARIES=/usr/local/opt/icu4c/lib/libicuuc.dylib -DICU_INCLUDE_DIR=/usr/local/opt/icu4c/include -DLIBARCHIVE_INCLUDE_DIR=/usr/local/opt/libarchive/include -DLIBARCHIVE_LIBRARIES=/usr/local/opt/libarchive/lib/libarchive.dylib -DBOOST_REGEX_LIBRARIES=/usr/local/opt/boost/lib -DBOOST_REGEX_INCLUDE_DIR=/usr/local/opt/boost/include  -DUSE_OPENLDAP=true -DOPENLDAP_INCLUDE_DIR=/usr/local/opt/openldap/include -DOPENLDAP_LIBRARIES=/usr/local/opt/openldap/lib/libldap_r.dylib -DCLIENTTOOLS_ONLY=false -DPLATFORM=true
  • Затем скомпилируйте и установите с помощью (sudo make install)
  • После этого вам нужно немного поработать с разрешениями:
    1
    2
    3
    chmod -R a+rwx /opt/HPCCSystems/
    chmod -R a+rwx /var/lock/HPCCSystems
    chmod -R a+rwx /var/log/HPCCSystems
  • Теперь, как правило, вы запускаете hpcc-init для настройки системы, но этот скрипт не работает в OS X, поэтому я использовал linux для генерации работающих файлов конфигурации и разместил их в репозитории здесь: https://github.com/boneill42 / hpcc_on_mac
  • Клонируйте этот репозиторий и замените / var / lib / HPCCSystems содержимым var_lib_hpccsystems.zip
    1
    2
    3
    sudo rm -fr /var/lib/HPCCSystems
    sudo unzip var_lib_hpccsystems.zip -d /var/lib
    chmod -R a+rwx /var/lib/HPCCSystems
  • Затем из каталога, содержащего файлы XML в этом хранилище, вы можете запустить:
    • daserver : (запускает сервер Dali, который является механизмом сохранения для HPCC)
    • esp : (Запускает сервер ESP, который является веб-сервисом и уровнем пользовательского интерфейса для HPCC)
    • eclccserver : (запускает сервер компиляции ECL, который берет ECL и компилирует его в C, а затем в dynmic библиотеку)
    • roxie (запускает сервер Roxie, который способен отвечать на запросы)
  • Начните каждый из них, тогда вы должны быть готовы запустить ECL. Затем перейдите по адресу http: // localhost: 8010 в браузере. Вы готовы запустить ECL!

Запуск ECL

Как и Pig с Hadoop, HPCC использует DSL под названием ECL. Более подробную информацию о ECL можно найти здесь: http://hpccsystems.com/download/docs/learning-ecl

  • В качестве простого теста дыма перейдите в свой репозиторий платформы HPCC и перейдите по адресу: ./testing/regress/ecl.
  • Затем выполните следующее:
  • 1
    ecl run hello.ecl --target roxie --server=localhost:8010
  • Вы должны увидеть следующее:
    1
    2
    3
    <dataset name="Result 1">
    <row><result_1>Hello world</result_1></row>
    </dataset>

Кассандра Плагин

Когда HPCC запущен и работает, мы готовы повеселиться с Cassandra. HPCC имеет плагины. Эти плагины находятся в / opt / HPCC / plugins. Мне пришлось скопировать эти библиотеки в / opt / HPCCSystems / lib, чтобы HPCC распознал их.

Вернитесь в каталог testing / regress / ecl и посмотрите на cassandra-simple.ecl. Фрагмент приведен ниже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
childrec := RECORD
   string name,
   integer4 value { default(99999) },
   boolean boolval { default(true) },
   real8 r8 {default(99.99)},
   real4 r4 {default(999.99)},
   DATA d {default (D'999999')},
   DECIMAL10_2 ddd {default(9.99)},
   UTF8 u1 {default(U'9999 ß')},
   UNICODE u2 {default(U'9999 ßßßß')},
   STRING a,
   SET OF STRING set1,
   SET OF INTEGER4 list1,
   LINKCOUNTED DICTIONARY(maprec) map1{linkcounted};
END;
 
init := DATASET([{'name1', 1, true, 1.2, 3.4, D'aa55aa55', 1234567.89, U'Straße', U'Straße','Ascii',['one','two','two','three'],[5,4,4,3],[{'a'=>'apple'},{'b'=>'banana'}]},
                 {'name2', 2, false, 5.6, 7.8, D'00', -1234567.89, U'là', U'là','Ascii', [],[],[]}], childrec);
 
load(dataset(childrec) values) := EMBED(cassandra : user('boneill'),keyspace('test'),batch('unlogged'))
  INSERT INTO tbl1 (name, value, boolval, r8, r4,d,ddd,u1,u2,a,set1,list1,map1) values (?,?,?,?,?,?,?,?,?,?,?,?,?);
ENDEMBED;

В этом примере мы определяем childrec как RECORD с набором полей. Затем мы создаем DATASET типа childrec. Затем мы определяем метод, который принимает набор данных типа childrec и запускает команду вставки Cassandra для каждой записи в наборе данных.

Запуск Кассандры локально. (скачайте Cassandra, разархивируйте его, затем запустите bin / cassandra -f (чтобы сохранить его на переднем плане))

Как только Cassandra включится, просто запустите ECL, как вы сделали программу hello.

1
ecl run cassandra-simple.ecl --target roxie --server=localhost:8010

Затем вы можете перейти к cqlsh и проверить, что все данные вернулись в Cassandra:

01
02
03
04
05
06
07
08
09
10
11
12
13
➜  cassandra  bin/cqlsh
Connected to Test Cluster at localhost:9160.
[cqlsh 4.1.1 | Cassandra 2.0.7 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
Use HELP for help.
cqlsh> select * from test.tbl1 limit 5;
 
 name      | a | boolval | d              | ddd  | list1 | map1 | r4     | r8     | set1 | u1     | u2        | value
-----------+---+---------+----------------+------+-------+------+--------+--------+------+
  name1575 |   |    True | 0x393939393939 | 9.99 |  null | null | 1576.6 |   1575 | null | 9999 ß | 9999 ßßßß |  1575
  name3859 |   |    True | 0x393939393939 | 9.99 |  null | null | 3862.9 |   3859 | null | 9999 ß | 9999 ßßßß |  3859
 name11043 |   |    True | 0x393939393939 | 9.99 |  null | null |  11054 |  11043 | null | 9999 ß | 9999 ßßßß | 11043
  name3215 |   |    True | 0x393939393939 | 9.99 |  null | null | 3218.2 |   3215 | null | 9999 ß | 9999 ßßßß |  3215
  name7608 |   |   False | 0x393939393939 | 9.99 |  null | null | 7615.6 | 7608.1 | null | 9999 ß | 9999 ßßßß |  7608

Хорошо, это должно дать немного вкуса ECL и HPCC. Это мощная платформа.

Как всегда, дайте мне знать, если у вас возникнут проблемы.