SparkStreaming простой пример
◆ Построение программы Streaming: (WordCount)
◆ Спарк Streaming лучшей программы для использования Maven в виде отдельных приложений или SBT перевода пробега.
◆ Подготовка:
1. Свеча потокового введение JAR
2.scala потока вычислений импорта декларации
импорта org.apache.spark.streaming.StreamingContext
импорта org.apache.spark.streaming.StreamingContext._
импорта org.apache.spark.streaming.dstream .DStream
Импорт org.apache.spark.streaming.Duration
Импорт org.apache.spark.streaming.Seconds
1. Объекты инициализации StreamingContext
// Создание локального StreamingContext два рабочих потоки и пакетный интервал в 1 секунду.
новый новый SparkConf конф = Val ()
conf.setMaster ( "локальный [2]")
conf.setAppName ( "NetworkWordCount")
Вал SSC = новый новый StreamingContext (конф, Секунды (. 1))
2. Получить объекты DStream
// создать соединение с именем хоста DStream, как локальный хост: 9999
знач линии = ssc.socketTextStream ( "локальный", 9999)
3. Объекты Операция DStream
// Каждая строка полученных данных делятся на слова пробела
lines.flatMap слов = Val (_. Split ( ""))
// StreamingContext введена в неявном
импорта org.apache.spark.streaming.StreamingContext._
// для каждой партии новообращенного слова подводить
words.map пар = Val (Word => (Word ,. 1))
Val wordcounts = pairs.reduceByKey (_ + _)
// печати по умолчанию каждой партии , прежде чем десять элементов к консоли
wordCounts.print ()
4. Запустить обработчик потока
ssc.start // подсчитывали
ssc.awaitTermination () // Ожидаем вычислить окончание
ssc.stop () // Конец приложения
Запустить сетевой порт, передача аналоговых данных
1. н.д. средства команды, введите данные вручную
Linux / Mac: н.д.
Окна: кот
н.д. -lk 9999
2 с помощью кода, написанного в генераторе данных моделирования
Пакет com.briup.streaming Импорт java.io.PrintWriter Импорт java.net.ServerSocket Импорт scala.io.Source Объект MassageServer { // определение случайных целых чисел метода сбора индекса DEF (длина: Int) = { Импорт java.util.Random RDM Val = новый новый Случайные rdm.nextInt (длина) } DEF Основные (арг: Массив [String]) { Println ( «аналоговые данные начинают !!!» ) // Получить общее количество строк , указанных файлов Вэл имя файла = «Спарк / ihaveadream.txt " ; Вал Линия = Source.fromFile (имя файла) .getLines.toList Вал filerow = lines.length // указывает монитор порта, соединение устанавливается , когда внешняя программа запрашивает Val = ServerSocket новый новый в ServerSocket (9999 ), в то время как ( к истинному ) { // слушающий порт 9999, приобретает штуцеры объект Val гнездо = ServerSocket.accept () // Println (Socket) новая новая нить () { переопределение RUN DEF = { Println ( "Got от Connected Клиента:" + socket.getInetAddress) Вал OUT = новые новый PrintWriter (Socket.getOutputStream (), к истине ) это время (к подлинному ) { Thread.sleep ( 1000 ) // когда порт принимает запрос, эквайринг случайной линии передачи данных друг с другим Val Content = Lines (индекс (filerow)) Println (Content) out.write (Content + '\ n-' ) OUT. флеш () } () Socket.close } } .start () } } }
Меры предосторожности:
◆ все шаги , прежде чем 1. Запустите Спарк Streaming сделал создать поток исполнения, программа не реальное
подключение к источнику данных, ни операции с данными, просто настроить все реализации плана
◆ 2. Когда ssc.start ( ) после запуска программы действительно сделать все ожидаемое рабочее
◆ 3. выполнение будет осуществляться в другом потоке, так что надо ждать вычисления вызова потока awaitTermination завершена
◆ 4. контекст потоковой передачи может быть активирован только один раз
◆ 5. Если режим локального режима , убедитесь , что установлен локальный [N], п> = 2 1 - й для приема, устройство для обработки
пакет com.briup.streaming импорт org.apache.log4j {Level, Logger}. импорт org.apache.spark.SparkConf импорт org.apache.spark.streaming {Продолжительность, StreamingContext}. Объект MyTestOldAPI { Защиты основного (арг: Array [ String]): Unit = { // 设置日志级别 Logger.getLogger ( "орг" ) .setLevel (Level.WARN) // 1获取DS вал конф = новый SparkConf () setAppName ( "MyTestOldAPI") setMaster (».. местный [*]» ) вал СППР = новый StreamingContext (конф, продолжительность (1000 )) знач Д.С.Dss.socketTextStream = ( "локальный", 9999 ) // 2 логика // Статистические Рез знач = ds.filter (_! = "") .FlatMap (_. Split ( "")). Карта (слово => ( Слово ,. 1)). reduceByKey (_ + _) res.print () // . 3 открыта в режиме реального времени задачи обработки dss.start () dss.awaitTermination () dss.stop () } }