Translate

середу, 19 жовтня 2016 р.

JUGLviv meetup: Месседжинг для IoT з RabbitMQ




Запрошуємо всіх на чергову зустріч JUG Lviv  у четвер 27-го жовтня о 18:30



Микола Махін, Senior Software Developer @Symphony Solutions


Микола Java розробник з 10+ років досвіду. Активно працює над опенсорс проектами https://github.com/mvmn веде технічний блог https://mvmn.wordpress.com/

Тема:

Месседжинг для IoT з RabbitMQ

Опис теми:


Міграція месседжингу в IoT-related проекті з MQTT на AMQP при переході від MVP до production.

Місце:

Компанія Sigma Software
вул. Наукова, 7Д - новий БЦ.
 Центральний вхід, 4-ий поверх,
Львів



Спонсор:



Захід безкоштовний - реєстрація обов'язкова!




пʼятницю, 19 серпня 2016 р.

JDayLviv вже скоро



3-го вересня у Львові вчетверте пройде щорічна конференція JDayLviv присвячена java та суміжним технологіям організована львівською Java User Group. Один день насичений безліччю подій. 15 спікерів з 8 країн, 3 потоки та 15 доповідей на різноманітну тематику. Ми запрошуємо не лише відомих та всіма улюблених доповідачів, а й спікерів, які вперше в Україні і можуть не тільки привезти щось нове і цікаве для слухачів, але й почерпнути багато для себе.
Цьогоріч на JDayLviv та вперше в Україні Michal Kuratczyk - Solution Architect у Pivotal, James Thomas - Developer Advocate у IBM, Rino Montiel - Head of core engineering у EyeEm:



А також вже добре відомі Олексій Зволінський, Тарас Матяшовський та Сергій Нємчинський:

Щороку JDayLviv відвідує понад 300 слухачів з усієї України, тож ви отримаєте хорошу нагоду зустрітись познайомитись з вашими колегами та поспілкуватись з ними за горнятком львівської кави. А ввечір всіх чекатиме афтепарті у Королівській Пивоварні та чудові подарунки від партнерів конференції. Тож реєструйтесь вже сьогодні.
Більше про подію читайте на нашій сторінці JDayLviv, та слідкуйте за всіма оновленнями та розповідями про наших доповідачів на ФБ



вівторок, 5 липня 2016 р.

JUGLviv meetup: SAP Hybris architecture


Dear Friends, 

We would like to invite you to the next JUG Meetup, which will occur this Thursday, July 12th, 18:00!

This time, we have a great speaker, from Sweden! 

Marko Salonen, Software Architect @Remit

Marko Salonen is developer and architect with 10 experience from different java based technologies. Last 6 years he has been focusing in e-commerce and mainly SAP Hybris with some large scale installations as architect and lead developer. He is passionate about competence sharing and enjoys working with teams. Currently he works as SAP Hybris Competence lead and partner at Remit , lives in Stockholm, Sweden with his wife and 11 months old son.

Topic of the talk:


SAP Hybris architecture


Topic description:


SAP Hybris is a large enterprise e-commerce platform. It has a Java based architecture using open technologies like Spring to build a flexible, scalable and service oriented software. Still there are challenges that need to be tackled when a large number of developers implement functionality. In this presentation Marko will talk how SAP Hybris architecture it is built to simplify the development and give some examples from earlier projects where there was challenges and how these where solved.

Venue:

Yana Mateika St, 6,
Lviv

Sponsor:

This event is supported by Remit!



The event is completely free, but requires registration


понеділок, 4 липня 2016 р.

Наші доповідачі: Michal Kuratczyk


Міхал Курачик solution architect у компанії Pivotal розробника таких відомих у світі продуктів як фреймворк Spring, хмарне рішення Cloud Foundry та інших. Тож на JDayLviv він приїде з доповіддю Continuous delivery of microservices with Cloud Foundry. Тим більше, що Міхал в основному займається впровадженням PaaS та BigData рішень для корпоративних клієнтів. Поміж тим він є співзасновником студії розробки іграшок Galante Games, доповідачем на багатьох конференціях, та просто спортивним фанатом

Онлайн Michal Kuratczyk можна знайти на FB та Twitter
Щоб послухати Міхала та багатьох інших цікавих спікерів - реєструйтесь на JDayLviv 2016


Наші доповідачі: Alexey Zvolinskiy aka Alex Fruzenshtein


Щороку в нас традиційно є одна дві доповіді по Scala. Цього разу про Scala: the next stuff you need to try буде розказувати Олексій Зволінський - java/scala розробник з Києва. Олексій засновник 10per клубу, саме ця ініціатива отримала IT Education Awards в 2015 році.

Також Олексій веде курси на Udemy, а його блог є одним з кращих в галузі та є в переліку TopJavaBlogs, на дозвіллі Олексій займається боротьбою як і інший наш доповідач Паріс Апостолопулос. Кому цікаво може слідкувати за Олексієм на FB чи Twitter.
Зареєструватись на конференцію JDayLviv можна за посиланням


Наші доповідачі: Paris Apostolopoulos


Паріс Апостолопулос родом з Греції зараз живе і працює в Лондоні. Нагороджений званнями Java Champion та JBoss Hero. В 2001 році Паріс заснував одну з перших JUG в Греції - Java Hellenic User Group. У вільний час веде свій блог на java тематику Papo’s Log записує подкасти та поміж тим займається дзюдо і є володарем коричневого поясу.

Паріс був спікером на багатьох конференціях та й працював у різних країнах тож йому довелось доволі багато подорожувати у його Flickr профілі безліч фото з усіх куточків світу.
Кому цікаво також може знайти Паріса на FB, Twitter, Instagram.
До України Паріс приїде вперше тож приєднуйтесь до JDayLviv та приходьте слухати java champion’a


Наші доповідачі: Paul Stack



Пол Стек девопс спеціаліст з Лондона, учасник багатьох конференцій. На ютюбі можна переглянути його цікаве інтервю на тему Making the software better while it runs. В своєму блозі Пол детально та змістовно описує як будувати сучасні хмарні рішення на основі сучасних рішень як то AWS, Riak, Elastic, etc. Також Пол є активним дописувачем у Twitter. Багато цікавих рішень та ідей від Пола можна знайти на його GitHub акаунті

Придбати квитки на JDayLviv 2016 можна за посиланням https://2event.com/events/579787

середу, 22 червня 2016 р.

Наші доповідачі: Kfir Bloch


Традиційно до Львова на JDayLviv приїжджають провідні спеціалісти відомої ізраїльскої компанії Wix - розробника хмарного сервісу, що дозволяє користувачам зручно та швидко створювати вебсторінки. Попередні два роки нашим доповідачем був системний архітектор Tomer Gabel цього ж року до нас з доповіддю про Scala from the Trenches навідається голова бекенд розробки Kfir Bloch. Спеціаліст з понад 17 роками досвіду зараз він намагається мігрувати Wix на NodeJS, а в позаробочий час Кфір веде свій блог http://www.kfirbloch.com/ в основному про те як приготувати кускус і томям :), виступає доповідачем на різних конференціях та Тель-Авівському джава комюніті. Частину презентацій можна знайти на гітхабі, чи подивитись на ютюбі
Бажаючі можуть знайти Кфіра на FB, Twitter чи Instagram
Придбати квитки на JDayLviv 2016 можна за посиланням https://2event.com/events/579787
Tomer Gabel & Kfir Bloch




понеділок, 6 червня 2016 р.

Не пропустіть наступний Morning@Lohika




We are glad to inform you that next Morning@Lohika will be held on June 11th. We will have great themes and awesome speakers for us, so please look through agenda and we are waiting for you!


Philipp Krenn
Elastic, Austria


Philipp is a Developer Advocate at Elastic, spreading the love and knowledge of full-text search, analytics, and real-time data. He is a frequent speaker at conferences and meetups about all things search & analytics, databases, cloud computing, and devops.

Topic: 
Databases - the choice is yours

In hardly any other area we’ve had as much change and improvement as in the field of databases. Just a few years ago everyone had “their” database that was used for each project. Today you are confronted with a variety of approaches and implementations.




Nicolas Fränkel
Hybris, Switzerland


Software Architect with 15 years experience consulting for many different customers, in a wide range of contexts (such as telecoms, banking, insurances, large retail and public sector). Usually working on Java/Java EE and Spring technologies, but with narrower interests like Software Quality, Build Processes and Rich Internet Applications. Currently working for an eCommerce solution vendor leader. Also double as a teacher in universities and higher education schools, a trainer and triples as a book author.

Topic:
Spring Boot and Kotlin, a match made in Heaven.

Despite being very new, spring boot has seen a spectacular start as an amazing kickstarter for spring-based application. You can now start your project in a matter of minutes, not days!


Деталі та реєстрація за посиланням:
http://javadaymorningatlohika.ticketforevent.com/



пʼятницю, 13 травня 2016 р.

JUGLviv meetup: Reactive Thinking in Java




Друзі, 
25-го травня, о 18:30, відбудеться наступна зустріч JUG Lviv. Цього разу до Львова завітає Java  чемпіон, керівник компанії Farata Systems - Яков Файн.Кількість місць обмежена тому поспішайте зареєструватись

Спонсорами події виступають компанії EPAM та Сiklum:




Speaker
Yakov Fain, Managing Director at Farata Systems

Yakov Fain is Java Champion and a co-founder of the IT consultancy Farata Systems, USA. He wrote a thousand blogs (http://yakovfain.com) and several books about software development. He authored and co-authored such books as "Angular 2 Development with TypeScript", "Java 24-Hour Trainer", "Enterprise Web Development". His Twitter tag is @yfain. Most of all Yakov enjoys learning and teaching software.

Topic


Reactive Thinking in Java

This presentation is about the world of asynchronous programming in Java, where everything is a stream. We'll talk about how reactive extensions change the way you design Java applications. You'll see how to consume observable streams of events and apply a variety of operators offered by the RXJava library, which requires a different way of thinking about writing code.


Venue


Торгова галерея «Опера Пасаж» 
Львів, пр. Свободи, 27, 4-й поверх,
Leopolis Hall

Реєстрація

Вхід традиційно вільний реєстрація - обовязкова

Наша група на FB





середу, 20 квітня 2016 р.

JUG UA Live Stream: Hibernate & Multithreading talks


Сьогодні, наші друзі - JUG.UA,  проводять черговий meetup в Києві.

Запрошуємо усіх бажаючих долучитися до перегляду онлайн.

Коли:
April 20, 19:00 – 23:00

Тема:

Hibernate & Multithreading talks

– Hibernate performance tuning (Igor Dmitriev)
Nowadays, almost every Enterprise application uses Hibernate and as we know, DB could be a bottleneck in the application. Furthermore incorrect uses of ORM frameworks can lead to performance problems.

– Multithreading in Java past & present (Yevgen Polukov)
In this talk I’d like to give you an overview of java.util.concurrent package and represent useful Java concurrency tools. I’ll cover the core functionality and the state-of-the-art API (Executors, Accumulators, StampedLock etc).

Зареєструватися на онлайн трансляцію можна за посиланням:

Більше деталей, на сайті JUG.UA


вівторок, 12 квітня 2016 р.

JUG Meetup: Software Engineering Culture - Improve Code Quality



Друзі, 
21-го квітня, о 18:30, відбудеться наступна зустріч JUG Lviv.

Speaker


Dmytro Patserkovskyi, Project Manager at V.I.Tech



8 years of experience with different languages and technologies. On career path met with game, desktop, mobile, enterprise and big data development. Interesting in code quality and ways of improving process of software development.





Topic

Software Engineering Culture - Improve Code Quality


It's usually not enough time for improving comfort of code writing and product monitoring. But this is an important thing for making software products with high quality. IT society even made awesome tools for making our life easier and culture of software engineering continue growing. On this talk we'll make a little dive into history of IT culture and will define services stack for making our life easier.

Venue

Hnatyuka St, 12А, at Rius hotel conference room.

Реєстрація

Традиційно, участь безкоштовна, але реєстрація обов'язкова.


понеділок, 4 квітня 2016 р.

JEEConf - May 20-21,2016


Традиційно наприкінці травня відбудеться JEEConf Хто ще не придбав квитки - поспішайте



вівторок, 22 березня 2016 р.

JUG Lviv logo re-design contest


Know how to design a logo? Read along!

JUG Lviv community has been around for a while. The first version of our logo was chosen quickly and served its purpose well. As our community progressed, we have decided to replace it by a better one.
As we are more into writing code, rather than creating beautiful designs - we need You, a creative designer, who can create a great logo!


Contest schedule:

22/03/2016 - Contest start
30/03/2016 - Submission deadline (we will not accept submissions past this date)
31/03/2016 - Winner announced!

Prizes:

Winner:

  • Free ticket to MCE conference, in Warsaw, Poland.
    On 21-23 of April Kinoteka in Warsaw is going to be flooded with over 550 of mobile experts. Developers, designers, UX experts, managers, and product owners are going to meet for the third time in the heart of Europe on MCE^3 - the biggest mobile event in Central Europe.
    For more details - visit the website: http://2016.mceconf.com/
  • A well-made sketch book
  • The new logo will be shared via JUG Lviv & JDay social media, to hundreds of people, all the credits will be given to the designer!


All the other participants will receive 15% discount on MCE tickets.



Registration

Please follow the link here, to register!


пʼятницю, 4 березня 2016 р.

Eclipse Dark Theme


Натхненний One Dark темою в Atom 
вирішив на днях поставити  якусь темну тему на Eclipse. 

Дефолтна тема від екліпса виглядає ось так
Як на мене трохи заагресивно. Маркетплейс запропонував тему під назвою Moonrise. Спробував не рекомендую.
Довелось поставити плагін Eclipse Color Themes і до нього знайти клон теми atom-one-dark який виявився хоч і схожим на оригінальний але кольори були надто яскраві тож довелось пошаманити і зробити власну тему GreenMoon яка по суті базується на відтінках зеленого кольору


Не знаю чи стане темна тема постійною для мене, але спробувати було цікаво.
також можу порадити непогану тему Gedit Original Oblivion  Найкраща з наявних хоч і трохи забагато кольорів як на мій смак


Якщо хто має якусь улюблену тему і може порадити - лишайте в коментах


середу, 2 березня 2016 р.

Java Rake: AWS Key Management System (KMS)


Key Management System - один з веб сервісів Amazon покликаний для захисту інформації, а саме енкриптання (шифрування) та декриптання (розшифрування) даних за допомогою ID ключа, що зберігається на AWS.

Детальніше : Java Rake: AWS Key Management System (KMS)

понеділок, 29 лютого 2016 р.

#JUGLviv meetup: Bigger and better e-commerce with Hybris


17-го березня відбудеться чергова зустріч JUGLviv. За підтримки компанії Remit  до нас приїде в гості Марко Салонен


Marko Salonen is developer and architect with 10 years of experience from different java based technologies. Last 6 years he has been focusing in e-commerce and mainly SAP Hybris with some large scale installations as architect and lead developer. He is passionate about competence sharing and enjoys working with teams. Currently he lives in Stockholm, Sweden with his wife and 6 month old son.



Bigger and better e-commerce with Hybris

E-commerce is a rapidly growing business and has huge requirements on the whole IT infrastructure of a company. In this talk we talk little bit about e-commerce and mainly focus on SAP Hybris that is one the largest e-commerce platforms in the world. We discuss how the java and spring based architecture can be used to easily extend functionality and to build highly scalable installations.



Дата - четвер 
17-те березня

Місце - готель Львів
Адреса - проспект В. Чорновола, 7

Початок - 19-00

Вхід вільний
Реєстрація обовязкова



неділю, 31 січня 2016 р.

Apache Spark for Newbie


Вступ (Лінивим можна пропустити)

    Врамках Big Data тренінгу я почав вивчати роботу з Apach Spark computing framework. В інтернеті є достатня кількість прикладів побудови пайплайнів на різних мовах програмування (наприклад тут), проте я ніде не зміг найти хорошого гайду чи прикладу як написати проект з "нуля" і запустити його виконання на кластері. Усі що я знаходив приклади використовували локальний (тестовий) режим мастера , таким чином ніякої дистрибуції логіки не відбувалося і відчути що таке Apache Spark в повній мірі мені не вдавалося. До дня коли я прослухав тренінг людини, що працювала з цим інструментом в продакшені, саме він вніс ясність в те як Apache Spark працює (дякую тобі Тарас Матяшовський). Отже, після того як я в цьому розібрався я вирішив залишити ці знання на просторах Java User Group для всіх кому цікаво і для самого себе, щоб не забути ;-) Також, надіюся з заголовку статті зрозуміло що тут буде йтись лише про поверхневе ознайомлення з спарком і основна мета це зробити усе правильно. Тут буде використаний Stand Alone Spark Master який не потрібно використувувати в продакшені, для цого ви може використати Hadoop Yarn.

Опис задачі

    Задача взята з документації ApacheSpark - підрахунок слів у текстовому файлі. Проте зробимо це по законам жанру:
1. Дистрибутивна бібліотека (саме та яка розлетиться по воркерах кластеру і буде робити усю роботу);
2. Spark Driver (іншими словами це і буде наш клієнт через який ми доступатимемось до мастера і де ми будемо будувати наші пайплайни);
3. Web application (Наша веб аплікація - ендпоінти які ми будемо викликати щоб виконати ту чи іншу роботу, ну і щоб Spark Application UI був доступний і ми змогли подивитись статистику виконання роботи).

    Надіюся усе зрозуміло , проте якщо й ні , то далі постараюся усе розписати як найкраще. Поїхали !

Створення архітектури проектів

    Архітектура нашого проекту буде складатися з трьох модулів, а саме :
1) Distributed JAR
2) Spark Driver
3) Web Application
Загальна, архітектура зображена нижче :

    Для збірки проектів я буду використовувати Apache Maven, і почнемо з того що створемо батьківський проект який назвемо "spark-for-newbie" і додамо туди pom.xml файл. Батьківський pom.xml файл повинен включати усі вище згадані модулі :

<modules>
        <module>distributed-library</module>
        <module>web-api</module>
        <module>spark-driver</module>
</modules>

    Тепер підключаємо до нього основні залежності :
- Залежності на наші бібліотечні модулі :
<dependency>
        <groupId>org.ar.spark.newbie</groupId>
        <artifactId>spark-client</artifactId>
        <version>${project.version}</version>
</dependency>
<dependency>
        <groupId>org.ar.spark.newbie</groupId>
        <artifactId>distributed-library</artifactId>
        <version>${project.version}</version>
</dependency>

- Також залежність на останню (на момент публікації) версію Apache Spark :
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>1.6.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Тепер створюємо наші модулі в середині батьківського проекту:

distributed-library
    Додаємо до цього проекту лише залежність на Apache Spark , так як ця бібліотека міститиме класи функцій з його пакету, що будуть виконуватись на різних воркерах нашого кластеру.
<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.10</artifactId>
      <scope>provided</scope>
</dependency>

spark-driver
    Цей проект також буде бібліотекою яку ми використаємо у наступному web-api модулі. Він міститиме Spark Conext та залежність на функції, що будуть виконувати логіку нашого обчислення, тому нам потрібні наступні залежності :
<dependency>
      <groupId>org.ar.spark.newbie</groupId>
      <artifactId>distributed-library</artifactId>
</dependency>
<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.10</artifactId>
</dependency>

web-api
    Даний модуль буде нашою основною аплікацією, він повинен містити залежність на наш Spark Driver а також на дуже цікаву бібліотеку "Java Spark", завдяки якій ми зробимо REST Endpoint всього в одну лінійку коду. Spark Java, немає нічого спілького з Big Data та Apache Spark, також вона заслуговує окремої статті щоб описати її можливості.
<dependency>
      <groupId>org.ar.spark.newbie</groupId>
      <artifactId>spark-driver</artifactId>
      <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
      <groupId>com.sparkjava</groupId>
      <artifactId>spark-core</artifactId>
      <version>2.3</version>
</dependency>

Розробка дистрибутивної бібліотеки (distributed-library)

    Для того, щоб підрахувати кількість слів у текстовому файлі ми повинні зробити наступний пайплайн :


    Отже нам треба буде написати 4 функції, 3 map і 1 reduce а також клас в який ми будемо мапити key-value рузультати і повернемо результати з воркера назад в аплікацію.

    SeparateWordLinesFunction.java - її задача отримати на вхід об'єкт типу String котрий є вичитаною лінією тексту з текстового файлу і розбити на окремі слова , тобто повернути список об'єктів String. Для цього, клас функції робитиме наступне :

public class SeparateWordLinesFunction implements FlatMapFunction<String, String> {
  @Override
  public Iterable<String> call(String s) throws Exception {
    return Arrays.asList(s.split(" "));
  }
};

    MapWordsToKeyValueFunction.java - повинна замапити кожне слово до лічіильника, який по замовчуванню буде "1", таким чином ми отримаємо key-value структуру даних. Для того, щоб тримати таку структуру буде використано об'єкт Tuple2 з пакету Scala бібліотеки Apache Spark : 

public class MapWordsToKeyValueFunction implements PairFunction<String, String, Integer> {
  @Override
  public Tuple2<String, Integer> call(String s) throws Exception {
    return new Tuple2<String, Integer>(s, 1);
  }
};

    ReduceKeyValueWordsByKey.java - reduce операція по ключу нашої структури, тут ми повинні вирішити що будемо робити з значенням і в нашому випадку ми його просумуємо :

public class ReduceKeyValueWordsByKey implements Function2<Integer, Integer, Integer> {
  @Override
  public Integer call(Integer intVal1, Integer intVal2) throws Exception {
    return intVal1 + intVal2;
  }
}

    MapKeyValueWordsToWrapperObject.java - функція що перетворить key-value структуру в більш лояльний для подальшої роботи об'єкт :

public class MapKeyValueWordsToWrapperObject implements Function<Tuple2<String,Integer>, WordResult> {
  @Override
  public WordResult call(Tuple2<String, Integer> stringIntegerTuple2) throws Exception {
    return new WordResult(stringIntegerTuple2._1, stringIntegerTuple2._2);
  }
}

   WordsResult.java - звичайний POJO об'єкт котрий містить поля для самого слова і його лічильника. Потрібно лише імплементувати інтерфейс Serializable (для надання можливості серіалізувати його при передачі по мережі) і особисто від себе я перевизначив метод toString так як буду виводи об'єкти напряму до користувача.

Розробка  Spark Driver бібліотеки (spark-driver)

    Тут ми створемо SparkContext через який отримаємо доступ до мастера і задекларуємо наш пайплайн.

    Створення  SparkContext :
Для цього необідно створити SparkConf - конфігураційних об'єкт якому ми передамо назву нашої аплікації, шлях до мастера та шлях до скомпільованого JAR файлу який Spark розповсюдить на воркери де будуть виконуватись етапи нашого пайплайну :

private String[] distributedJars = new String[]{"/<path_to_workspace>/distributed-library/target/distributed-library-1.0-SNAPSHOT.jar"};

private JavaSparkContext sparkContext;

public SparkDriver(){
    SparkConf sparkConf = new SparkConf().setAppName("SparkForNewbie")
.setJars(distributedJars).setMaster("spark://127.0.0.1:7077");
    this.sparkContext = new JavaSparkContext(sparkConf);
}

    Імплементація Pipeline :

public List<WordResult> countWordsFromFile(String filePath){
        JavaRDD<String> words = sparkContext.textFile(filePath);
        return words
            .flatMap(new SeparateWordLinesFunction())
            .mapToPair(new MapWordsToKeyValueFunction())
            .reduceByKey(new ReduceKeyValueWordsByKey())
            .map(new MapKeyValueWordsToWrapperObject())
            .collect();
}

    З імплементації пайплайну чітко видно нашу попередню схему , де я показував як він виглядатиме. Усі функції підтянуті через залежність і знаходяться в distributed-library.

Розробка Веб аплікації

    Цей модуль потрібен нам саме для взаємодії нашого проекту з кінцевим користувачем. Тут ми зробимо енд-поінт який користувач зможе викликати в браузері і запустити на виконання Spark Pipeline, проте найцікавіше в цьому модулі це використання Spark Java, за допомогою якої ми реалізуємо енд-поінт :

get("/data", (request, response) -> dataService.countWords())

    Угу, саме так, 1 рядок коду і при старті web-api Spark Java розгорне Embedded Jetty і реалізує "/data" енд-поінт.  Далі, при виклику нашого енд-поінту викликаємо сервіс який містить в собі інстанс SparkDriver класу і виконує наш пайплайн передаючи шлях до піддослідного файлу:

public class DataService {

  private static final String TEXT_FILE_PATH = "/workspace/projects/spark-for-newbie/test.txt";
  private SparkDriver sparkDriver = new SparkDriver();

  public List<WordResult> countWords(){
    return sparkDriver.countWordsFromFile(TEXT_FILE_PATH);
  }

}

    Ось і все , усі модулі нашого проекту розписані , і можна переходити до тестування.

Тестування

Запуск Apache Master (stand alone version)
    Для цього качаємо дистрибутив Apache Spark (я викачував spark-1.6.0-bin-hadoop2.6.tgz) і йдемо у папку "conf" що в середині.
Тут потрібно змінити розширення файлу "spark-env.sh.template" на "spark-env.sh", зайти в середину і додати кілька рядків для конфігурації :

export SPARK_LOCAL_IP=127.0.0.1

export SPARK_MASTER_IP=127.0.0.1
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8082

export SPARK_WORKER_MEMORY=2g
export SPARK_WORKER_CORES=2
export SPARK_WORKER_WEBUI_PORT=8083

(Опис усіх цих та інших можливих опцій присутні у цьомуж файлі)

    Тепер йдемо назад і переходимо у папку "sbin", тут виконуємо "./start-master.sh " і переходимо в браузері по шляху "http://localhost:8082/", тут має бути розгорутий ЮІ нашого мастера :


    Далі запускаємо воркер (так, так це не кластер адже все робиться на одній машині, але спарк про це не знає, він має все що необхідно для роботи у розподіленому режимі - мастер а мастер має воркер). Виконуємо "/start-slave.sh 127.0.0.1:7077" і переходимо по шляху "http://localhost:8083/" :

    Тепер у нас є все щоб запустити нашу аплікацію, йдемо в мейн метод модуля web-api та запускаємо його. В логах розгортання проекту ви повинні побачити як спарк розгорає ЮІ нашої аплікації :


    Тут буде відображатися найцікавіша інформація виконання нашого пайплайну.

    Переходимо по цьому шляху і повинні побачити :


    Щож, тепер усе готово, відкриваємо нову вкладку в браузері і переходимо на наш енд-поінт :

http://localhost:4567/data
    
    Якщо ж все було зроблено правильно ви повинні побачити результат нашого обчислення :



    P.S.

    Якщо ж у вас щось не вийшло або не спрацювало, ви можете знайти сорси мого проекту тут . Також ділюся з вами сорсами проекту Тараса, котрі я використовував в довідкових цілях коли знайомився з Apache Spark, вдачі !