Статьи

Ruby 101 и сбор данных с помощью Iron.io и Treasure Data

Автор Джон Хэмминк, главный евангелист по данным о сокровищах.

Здесь, в Treasure Data, мы стремимся предоставить вам все инструменты, необходимые для сбора данных — начиная с основ, с использованием языка программирования или среды по вашему выбору, а также самой службы данных Treasure и интеграции с любым количеством сторонних инструментов. (Если вы хотите, чтобы мы затронули какую-либо технологию или тему, оставьте примечание в комментариях ниже.)

В этом посте рассматриваются основы сбора данных в Ruby и способы сбора данных из нескольких параллельно выполняемых задач Iron.orker.

Ранее мы обсуждали, как собирать данные из одного приложения, работающего на Python , а также создавать визуализации с этими данными.

IronWorker от Iron.io позволяет запускать несколько задач параллельно или по расписанию. В этом упражнении мы рассмотрим, что нужно для создания простого приложения для ведения журналов, на этот раз в Ruby, настроим его как работника Iron.io , запустим несколько задач параллельно, зарегистрируем вывод в Treasure Data и начнем выполнять запросы.

Эта статья не предназначена для того, чтобы быть законченным решением, просто чтобы показать вам, что возможно, когда вы комбинируете Iron.io и Treasure Data, а также самые простые возможные шаги для этого.

Мы предполагаем, что вы знаете основы программирования на Ruby, чтобы начать работу над этим. Если нет, не волнуйтесь! (Для ознакомления с основами настройки среды Ruby перейдите сюда ; чтобы узнать об управлении несколькими средами Ruby, перейдите сюда ; и, наконец, чтобы начать работу с консолью Treasure Data, перейдите сюда или проверьте наш предыдущий пост ). В этой статье предполагается среда ‘nix’, поэтому некоторые этапы в средах Windows могут немного отличаться.

Кодируй свою задачу по Ruby

Создайте каталог с именем / SendLog и откройте текстовый редактор. Вы можете получить свой API-ключ здесь . Введите следующее и сохраните его как SendLog.rb

require 'td'
#Initialization
TreasureData::Logger.open('iron_1',
                 :apikey=> <your_treasure_data_write_API_key>,
                 :auto_create_table=> true)
# Example:  login event
TD.event.post('login', {uid:'123'})

# Example 2:  follow event
TD.event.post('follow', {uid:'123', from: 'TreasureData', to: 'Rijksband'})

#Example 3: pay event
TD.event.post('pay', {uid: '123', item_name: 'Myth of Sisyphus', category: 'myth', price: '18', count: 3})
TreasureData::Logger.logger.flush()

Этот скрипт при запуске будет выполнять ровно четыре вещи:

  1. Создайте базу данных на Treasure Data под названием iron_1;
  2. Создайте таблицу с именем login и добавьте в нее одну запись. Обратите внимание, что к любым пользовательским значениям по умолчанию всегда добавляются два значения: v , которое представляет собой карту пар ключевых значений, содержащих метку времени и любые пользовательские значения; и время , которое является меткой времени. Пользовательское значение в этом случае — uid .
  3. Создайте таблицу с именем follow и добавьте в нее одну запись, на этот раз с тремя пользовательскими значениями: uid, from и to .
  4. Наконец, создайте таблицу с именем pay с одной записью и добавьте в нее пять пользовательских значений: uid, item_name, category, price и count .

Запуск вашей задачи Ruby локально

Если вы не установили рубиновые самоцветы , вам следует это сделать . Также вам захочется установить пакет.

Откройте текстовый редактор в вашем текущем каталоге / SendLog и создайте файл с именем Gemfile :

source 'https://rubygems.org'
gem 'td', "~> 0.11.1"
gem 'iron_worker_ng'

Затем выполните следующую команду (также в том же каталоге):
$ bundle install

Теперь запустите скрипт на Ruby один раз:
$ ruby ​​SendLog.rb

Наконец, войдите в консоль Treasure Data и после подключения к базе данных iron_1 выполните и выполните каждый из следующих запросов :

  • ВЫБЕРИТЕ uid ОТ логина
  • ВЫБРАТЬ * ОТ РЕГИСТРАЦИИ ПО ВРЕМЕНИ
  • ВЫБЕРИТЕ * ОТ
  • ВЫБЕРИТЕ время из (ВЫБРАТЬ * из следующего) как суб-ПОРЯДОК ВРЕМЕНИ
  • ВЫБЕРИТЕ uid, категорию, цену, количество, item_name ОТ платежа
  • ВЫБЕРИТЕ количество (1) от оплаты

Получили ли вы ожидаемый результат для каждого выполненного запроса? Что ты видел? Вы столкнулись с какими-либо ошибками? (Обратите внимание, что консоль Treasure Data ограничивает вывод до 100 записей.)

Вы можете столкнуться с ошибками. Иногда, простой способ обнаружить любые ошибки или ошибки, которые вы могли допустить в своем собственном коде и / или консольных командах, — это перечитать ваш код и примеры в обратном направлении.

Поскольку вы запустили скрипт только один раз, у вас должна быть только одна запись в каждой таблице.

Настройка вашего Iron.io Worker

Теперь вы запустили свою задачу один раз, но вы хотите увидеть, как она работает при запуске ее в нескольких экземплярах в облаке. Введите Iron.io!

Вам нужно будет сделать несколько предварительных шагов, чтобы запустить экземпляр Iron.io.

  1. Перейти к Iron.io . Зарегистрируйтесь и войдите в систему.
  2. Перейдите на https://hud.iron.io/dashboard и нажмите «Новый проект». Назовите его «SendLog».
  3. Нажмите кнопку «Рабочий» рядом с проектом «SendLog».
  4. Вы должны смотреть на вкладку «Начало работы». Выполните шаг 1 (загрузите Iron.json в свой каталог / SendLog и запустите $ sudo gem install iron_worker_ng ).
  5. В том же каталоге / SendLog, где сейчас находятся ваши Gemfile, Iron.json и SendLog.rb , создайте четвертый файл: SendLog.worker . Откройте текстовый редактор и введите следующее:
    runtime "ruby"
    gem 'td', "~> 0.11.1"
    exec "SendLog.rb"
    remote

Загрузка, постановка в очередь и запуск единственного экземпляра вашего работника

Следующий шаг — это то, что требуется для запуска вашего сценария Ruby — вашего упакованного работника — в облаке.

    1. Запустите следующее из командной строки:
      $ iron_worker upload SendLog; железная_рабочая очередь SendLog — -priority 2 — -wait

(примечание: пропустите пространство между тире)

  1. После завершения процесса вы должны увидеть следующий вывод из консоли:


——> Создание клиентского
проекта ‘SendLog’ с id = ‘554a8f2475e6cc00060000b6 ′
——> Создание пакета кода
Найденный рабочий файл с путем =’ SendLog.worker ‘
Добавление зависимости от ruby ​​gem с name =’ td ‘и version =’ ~> 0.11.1 ′
Обнаружен exec с путем = ‘SendLog.rb’ и args = ‘{}’
Имя пакета кода — ‘SendLog’
——> Загрузка и сборка пакета кода ‘SendLog’
Удаленный работник сборки
Пакет кода, загруженный с id = ‘554a910d0f9128000700a686 ′ и ревизией = ’13’
Проверить ‘https://hud.iron.io/tq/projects/554a8f2475e6cc00060000b6/code/554a910d0f9128000700a686’ для получения более подробной информации
-> Создание клиента
Project ‘SendLog’ с идентификатором =’
554a8f2475e6cc00060000b6′ -> задача Queuing
Пакет кода «SendLog» поставлен в очередь с id = ‘554a9d6d6b3a88000b00f4c1 ′
Check’ https://hud.iron.io/tq/projects/554a8f2475e6cc00060000b6/jobs/554a9d6d6b3a88000b00f4c1 ’b6f6 для получения справочной информации для получения дополнительной информации
еще больше
I, [2015-05-06T23: 02: 11.705509 # 18] INFO -: создание таблицы iron_1.login для данных сокровищ
I, [2015-05-06T23: 02: 12.364480 # 18] INFO -: создание таблицы iron_1.follow on Данные сокровищ
I, [2015-05-06T23: 02: 12.714396 # 18] ИНФОРМАЦИЯ -: Создание таблицы iron_1.pay по данным сокровищ

Он работал правильно? Вы получили какие-либо ошибки? Если вы проверите свои таблицы в консоли Treasure Data, то увидите, что каждая из них теперь содержит две записи.

Запуск нескольких экземпляров вашего работника

Теперь, когда ваша работа на Iron.io завершена, можно легко запланировать несколько экземпляров рабочего.

    1. На вкладке «Запланированные задачи» щелкните значок календаря в правом верхнем углу списка задач.
      Примечание. Ваш список задач может быть пустым.
    2. В появившемся диалоговом окне «Добавить новую запланированную задачу» в раскрывающемся списке выберите задание «SendLog», а также параметры «Стоп», «Параметры запуска», «Приоритет» (задания p2 обычно запускаются немедленно) и кластер. Mem3 будет более выделенным кластером. (Не беспокойтесь о полезной нагрузке на этом этапе.) Когда вы будете готовы, нажмите «Запланировать задачу».

 

  1. Для параллельного запуска многих задач запланируйте несколько задач с перекрывающимся временем выполнения.

Пока это происходит — и после его завершения — попробуйте выполнить те же самые запросы из раздела «Запуск задачи Ruby локально». Теперь вы должны увидеть базы данных, заполненные множеством записей, с дополнительным добавлением по мере запуска дополнительных задач.

This is only a taste of what’s possible to do with Iron.io and, by no means a complete example. There are many instances where logging messages from an Iron.io worker could be useful: For instance, perhaps you want to send a diagnostic message if something goes wrong on a job (and some error code is executed), or you want to log the timestamp when a job is complete.

What are some scenarios or use cases you’d like to see? Hit us up in the comments. 

 

 

John Hammink is Chief Evangelist for Treasure Data. An 18-year veteran of the technology and startup scene, he enjoys travel to unusual places, as well as creating digital art and world music.