- О курсе. Основы языка программирования Java. Примеры использования технологий BigData. Типы данных в Java. Работа со строками и числами. Структура JVM
- Структура памяти. Сборщик мусора. Строки. Интернирование строк. Методы. Числа. Библиотека коллекций в Java. Юнит тестирование JUnit. Альтернативная библиотека коллекций в Java: Apache Commons Collections & Google Guava. Примеры. https://docs.google.com/presentation/d/1Td-9ajaiMqHK_dGIjq2enU0MZdtbDoB7s-46NyuGtq4/edit?usp=sharing
- Потоки в Java. Класс Thread, интерфейс Runnable. Ключевое слово synchronized. Пулы потоков.
- https://github.com/ivtipm/BigDataLanguages/tree/main/Java/Threads
- Сборщик Maven. Ввод и вывод в Java. Классы: InputStream, Outputstream, Scanner, BufferedReader. Исключения. Stream API
- Stream API.
- Понятие потока (stream). Терминальные и промежуточные потоки, их методы. Специальные потоки. Генераторы. Параллельная обработка данных в потоках (multithreading). https://github.com/ivtipm/BigDataLanguages/blob/main/Java/Streams/readme.md
- Работа с базами данных в Java. Введение в язык Scala – ООП и переменные, Scala Shell, коллекции в Scala
- Примеры Pattern matching; ScalikeJDBC - библиотека для работы с реляционными БД в Scala; SCOPT - библиотека по разбору командной строки
- Apache Spark, запуск и форматы данных: plain text storage, sequence files, parquet, orc, avro.
- Работы с вводом-выводом. Задачи на Stream API
Скачайте заголовки новостей\постов как минимум со 100 страниц новостного сайта, телеграм-канала, сообщества социальной сети и т.п. Можно использовать новости с сайта zabgu.ru (вероятно он изменится в феврале-марте 2024 года).
- Компилируйте и запускайте программу в консоли.
- Передавайте количество страниц для скачивания, файл для сохранения заголовков через аргументы командной строки
- В комментариях укажите команду компиляции и запуска
- Дополнительные баллы за
- скачивание метаданных (дата, теги, количество просмотров, лайков, реакций и т.п.)
- скачивание текста статьи или новости
- скачивание картинок
- передачу данных в программу через аргументы командной строки (количество страниц или новостей для скачивания, имя файла для сохранения новостей и т.п.)
- Сохраняйте данные в CSV файл
- Предусмотрите возможность задать интервал (возможно случайный) между запросами страницы.
- Документируйте код, пишите пояснения.
Подсказки
- Как скачать веб-страницу: https://github.com/ivtipm/BigDataLanguages/blob/main/Java/requests.md https://mkyong.com/java/java-how-to-download-web-page-from-internet/
- сервер может не выдавать страницы если не указан UserAgent.
- указывайте большое время ожидания (timeout) для чтобы иметь больше гарантий на получение страницы целиком
- если есть опасность блокировки множественных запросов, то делайте перерыв между запросами
Что-то с регулярными выражениями, StringBuilder, Formatter
- Слайды: https://docs.google.com/presentation/d/1pmOlWlulw2prFhPjn73f3SE6KCyYtW2jYux-aKugVcA/edit#slide=id.g1b63e56b075_0_77
- Примеры работы с регулярными выражениями: https://github.com/ivtipm/BigDataLanguages/blob/main/Java/strings.md
Дополните программу из предыдущего задания:
- Скачивайте тексты новостей
- Проанализируйте скаченные тексты:
- найдите упоминания людей, названий вузов, факультетов или ищите другие сущности
- подсчитайте частоты упоминаемых имён
Подсказки
- https://regex101.com -- для экспериментов с регулярными выражениями
Списки, множества и словари
Многопоточность с синхронизацией. https://github.com/ivtipm/BigDataLanguages/blob/main/Java/Threads/readme.md
Создайте многопоточную версию программы из задания 1.
Используйте пул потоков.
Используйте потоки, в первую очередь, для оптимизации узких мест.
Действуйте так, чтобы избежать блокировки на ресурсе, откуда скачиваете новости.
- JDBC. Основные классы. Запросы на выборку, получение и изменение данных.
- https://github.com/ivtipm/BigDataLanguages/tree/main/Java/DataBase
Модифицируйте программу из прошлого задания. Записывайте данные в БД на выбор: SQLite, Postgres, MySql, свой вариант, в том числе noSql БД.
Бонус: Создайте общую таблицу для группы на общей БД. Адрес и данные для доступа есть у старосты или преподавателя (upd 31 mar: порт обновился). Сделайте таблицу такой, чтобы она подошла всем, кто скачивает новости.
Бонус: Создайте отдельных пользователей с правами доступа только к таблице.
Бонус: Добавьте в свою программу возможность сохранять данные в эту БД или экспортируйте в неё уже скаченные данные
Создайте вариант программы из предыдущих заданий, который использует Stream API для скачивания и обработки данных.
Scala.особенности и отличия от Java переменные, значения, система типов. Option. Either. Коллекции. Методы и функции. анонимные функции. Каррирование. Частичные функции. Обобщённые функции. классы, объекты; интерфейсы и трейты.
- Установите компилятор Scala. Попробуйте запустить примеры кода из лекции.
- Установите Apache Spark.
- Выполните задачи из строк 11, 19 и 23 задачника. Пишите функции. Пишите тесты. Разбивайте код на модули.
Напишите программу, которая подсчитывает количество появлений каждого IP адреса и логина в файле лога (см. дискорд). Используйте коллекции. Результат выводите в другой файл. Имя входного и выходного параметра задавайте через параметры командной строки.
Можно предложить свой вариант задания
Apache Spark. Настройка и работа c REPL.
- https://ivtipm.github.io/BigDataLanguages/Spark/slides/Spark.html
- https://github.com/ivtipm/BigDataLanguages/blob/main/Spark/Spark.md
- Войдите на сервер, где установлен Spark
- Проверьте версию Spark
- Убедитесь, что задана переменная окружения SPARK_HOME
- Убедитесь, что spark shell работает
- Запустите тестовую программу из отдельного файла
- Запустите Apache Zeppelin; подключитесь к оболочке через браузер
- Сделайте короткую шапаргалку с основами работы в терминале
- Перемещение по директориям, операции с файлами и папаками
- Информация о аппаратном обеспечении
- Монитор процессов
- tmux
- grep
- wget
- Запустите кластер [в докер контейнерах]
Resilient Distributed Dataset
Допишите ноутбук zeppelin_notebook.zpln
, решающий задачу классификации. Дополните коментариями.
https://github.com/ivtipm/BigDataLanguages/tree/main/Spark
- Программирование на Java. Потоки (stream) и потоки (thread) на Java. (35 баллов)
- Программирование на Scala. (35 баллов)
2 вопроса: теория + практика (20 + 10 баллов)