5 часов, чтобы открыть дверь Spark - 03. Кейс WordCount

Большие данные Spark

«Это 10-й день моего участия в первом испытании обновлений 2022 года. Подробную информацию о мероприятии см.:Вызов первого обновления 2022 г."


Всем привет, я ~

Откройте дверь Spark через 5 часов, а на третьем часу я возьму вас на классический случай ввода больших данных — WordCount.

Хватит болтать, пошли!

Описание темы

WordCount, как следует из названия, подсчитывает количество вхождений разных слов в файле, что часто используется при анализе журналов.

Один из проектов, которым я занимался, когда изучал Hadoop, состоял в том, чтобы проанализировать отношения между персонажами в романах Цзинь Юна Первым шагом было подсчет количества появлений каждого персонажа.

анализ случая

Если вы используете Java для выполнения этого требования, я думаю, что у всех найдутся идеи.

  • Сегментация слов: Разделите длинные предложения на слова. Если это стандартный текст, его можно разделить пробелами. Для нестандартного текста вы можете использоватьjiebaСегментация слов, заинтересованные студенты могут узнать об этом на Baidu.
  • Подсчет групп: одно и то же слово представляет собой группу, подсчитайте количество вхождений и сохраните ее на карте.
  • Сохранить результаты: записать результаты в файл.

Реализация кейса

1. Локальная реализация

Открыть предыдущий разделWordCount.scalaфайл, отредактируйте следующий код, в каждой строке есть комментарии, студенты, не знакомые со Scala, не должны беспокоиться о проблемах синтаксиса, наша цель — Spark.

WordCount {
  def main(args: Array[String]): Unit = {
    // 创建 Spark 运行配置对象
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
    // 创建 Spark 上下文环境对象(连接对象)
    val sc  = new SparkContext(sparkConf)
    // 读取文件,返回一个RDD
    var input=sc.textFile("src/main/java/test.txt");
    // 分词
    var lines=input.flatMap(line=>line.split(" "))
    // 分组计数
    var count=lines.map(word=>(word,1)).reduceByKey{(x,y)=>x+y}
    // 写入文件
    count.saveAsTextFile("src/main/java/output");
    //关闭 Spark 连接
    sc.stop()
  }
}

Обратите внимание на путь, по которому хранится файл, чтобы убедиться, что файл можно прочитать.

выходной результат

2. Отправить на сервер

Упакуйте его в пакет jar, загрузите его на сервер и не забудьте изменить его на путь к файлу в службе.

#启动master
./sbin/start-master.sh
#启动worker 
./bin/spark-class org.apache.spark.deploy.worker.Worker spark://VM-24-10-centos:7077
#提交作业
./bin/spark-submit  --master spark://VM-24-10-centos:7077 --class WordCount /data/opt/spark/file/spark-wordcount-1.0-SNAPSHOT.jar

выходной результат

В конце концов

Хорошо, мы закончили классический вводный кейс, вам не кажется, что Spark не так уж и сложен.

Однако я не знаю, есть ли у студентов следующие вопросы:

  • Как Spark объединяет счетчики внутри себя?
  • Каковы отношения между Работником и Мастером?
  • Что такое РДД?

Если есть, пожалуйста, настаивайте на том, чтобы вбить его. Мы ответим на ваши сомнения в ближайшие два дня и заполним яму — программирование ядра Spark.