[comment]: # Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境

目标

  • 配置一个spark standalone集群 + akka + kafka + scala的开发环境。
  • 创建一个基于spark的scala工程,并在spark standalone的集群环境中运行。
  • 创建一个基于spark+akka的scala工程,并在spark standalone的集群环境中运行。
  • 创建一个基于spark+kafka的scala工程,并在spark standalone的集群环境中运行。

集群框架图

本图主要是说明各个组件可以发布到不同的逻辑机器上。

G

Spark Cluster + AKKA + KAFKA

akka_client

AKKA Client


akka_server

AKKA Server
(Spark)


akka_client->akka_server


spark_master

Spark Master


akka_server->spark_master


spark_slave1

Spark Slave


spark_master->spark_slave1


spark_slave2

Spark Slave


spark_master->spark_slave2


spark_slave3

Spark Slave


spark_master->spark_slave3


kafka_producer1

Kafka Producer


kafka_cluster

Kafka Cluster


kafka_producer1->kafka_cluster


kafka_producer2

Kafka Producer


kafka_producer2->kafka_cluster


kafka_producer3

Kafka Producer


kafka_producer3->kafka_cluster


kafka_consumer1

Kafka consumer
(Spark)


kafka_cluster->kafka_consumer1


kafka_consumer2

Kafka consumer
(Spark)


kafka_cluster->kafka_consumer2


kafka_consumer3

Kafka consumer
(Spark)


kafka_cluster->kafka_consumer3


kafka_consumer1->spark_master


kafka_consumer2->spark_master


kafka_consumer3->spark_master

> 本文主要是为了配置一个用于开发和测试的环境,所以将所有组件都部署到了一台机器上。

预装的软件配置

Software Version Location Comment
CentOS 7.2.1511
JDK Oracle JDK 1.8 x64 /opt/java
Spark 2.0.0 /opt/spark
Akka 2.4.10 /opt/akka
Kafka 0.8.2.1 /opt/kafka
Scala 2.11.8 /opt/scala
sbt 0.13.12 开发环境

配置环境变量

  • 编辑 ~/.bash_profile

    加上下面的语句:
export JAVA_HOME=/opt/java
export SCALA_HOME=/opt/scala
export SPARK_HOME=/opt/spark
export KAFKA_HOME=/opt/kafka
export AKKA_HOME=/opt/akka
export PATH=$PATH:$JAVA_HOME/bin:$SPARK_HOME/bin:$SCALA_HOME/bin:$KAFKA_HOME/bin
  • 应用配置

    使上面的配置起效。
source ~/.bash_profile

下载并安装必要的软件

tar --directory /opt -xzf jdk-8u102-linux-x64.tar.gz
mv /opt/jdk-8u102 /opt/java
  • Spark 2.0.0

Download URL: http://spark.apache.org/downloads.html

下载spark-2.0.0-bin-hadoop2.7.tgz

解压到目录/opt下,把目录名改成/opt/spark

wget http://d3kbcqa49mib13.cloudfront.net/spark-2.0.0-bin-hadoop2.7.tgz
tar --directory /opt -xzf spark-2.0.0-bin-hadoop2.7.tgz
mv /opt/spark-2.0.0-bin-hadoop2.7 /opt/spark
  • Scala

Download URL: http://www.scala-lang.org/download/

下载scala-2.11.8.tgz

解压到目录/opt下,把目录名改成/opt/scala

wget http://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
tar --directory /opt -xzf scala-2.11.8.tgz
mv /opt/scala-2.11.8 /opt/scala
  • AKKA

    Download URL: http://akka.io/downloads/

    下载Standalone Distribution: akka_2.11-2.4.10.zip

    解压到目录/opt下,把目录名改成/opt/akka
wget http://downloads.typesafe.com/akka/akka_2.11-2.4.10.zip
upzip -q akka_2.11-2.4.10.zip -d /opt
mv /opt/akka_2.11-2.4.10 /opt/akka
  • KAFKA

由于我们将会使用Spark内置的Stream KAFKA功能,这个功能现在绑定了KAFKA 8.x.

如果你不用这个功能开发,而是写一个Kafka的Comsumer,可以下载最新的版本。

Download URL: http://kafka.apache.org/downloads.html

下载: kafka_2.11-0.8.2.1.tgz

解压到目录/opt下,把目录名改成/opt/kafka

wget http://mirrors.cnnic.cn/apache/kafka/0.10.0.1/kafka_2.11-0.8.2.1.tgz
tar --directory /opt kafka_2.11-0.8.2.1.tgz
mv /opt/kafka_2.11-0.8.2.1 /opt/kafka
  • sbt

    sbt包用于开发环境,在测试环境和生产环境可以不要。

    可以使用yum安装。
curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo
sudo yum install sbt

配置软件

  • 复制AKKA的类库到spark里,这样spark应用就可以使用AKKA的类库。

    因为有两个spark配置需要设定class path,我们分别针对它们建两个目录。

    一个是$SPARK_HOME/extraClassPath/driver

    另外一个是$SPARK_HOME/extraClassPath/executor

    复制/opt/akka/lib/akka/akka和/opt/akka/lib/akka/config-到这两个目录里。

注意:不要复制所有的akka文件,akka类库中的某些文件的版本可能会和spark的有冲突,

在运行apark应用时,会出现java.lang.ExceptionInInitializerError。

mkdir -p $SPARK_HOME/extraClassPath/driver
cp -n /opt/akka/lib/akka/akka* $SPARK_HOME/extraClassPath/driver/
cp -n /opt/akka/lib/akka/config-* $SPARK_HOME/extraClassPath/driver/ mkdir -p $SPARK_HOME/extraClassPath/executor
cp -n /opt/akka/lib/akka/akka* $SPARK_HOME/extraClassPath/executor/
cp -n /opt/akka/lib/akka/config-* $SPARK_HOME/extraClassPath/executor/
  • 在spark的配置文件spark-defaults.conf中,指定classPath

    进入到$SPARK_HOME/conf目录中,看有没有文件spark-defaults.conf

    如果没有复制spark-defaults.conf.templatespark-defaults.conf

    编辑spark-defaults.conf,加入下面两行。
spark.driver.extraClassPath        /opt/spark/extraClassPath/driver/*
spark.executor.extraClassPath /opt/spark/extraClassPath/executor/*
cp -n $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
echo "spark.driver.extraClassPath /opt/spark/extraClassPath/driver/*" >> $SPARK_HOME/conf/spark-defaults.conf
echo "spark.executor.extraClassPath /opt/spark/extraClassPath/executor/*" >> $SPARK_HOME/conf/spark-defaults.conf
  • 复制KAFKA的类库到spark里。
mkdir -p $SPARK_HOME/extraClassPath/driver
cp -n $KAFKA_HOME/libs/kafka_2.11-0.8.2.1.jar $SPARK_HOME/extraClassPath/driver/
cp -n $KAFKA_HOME/libs/kafka-clients-0.8.2.1.jar $SPARK_HOME/extraClassPath/driver/
cp -n $KAFKA_HOME/libs/metrics-core-2.2.0.jar $SPARK_HOME/extraClassPath/driver/ mkdir -p $SPARK_HOME/extraClassPath/executor
cp -n $KAFKA_HOME/libs/kafka_2.11-0.8.2.1.jar $SPARK_HOME/extraClassPath/executor/
cp -n $KAFKA_HOME/libs/kafka-clients-0.8.2.1.jar $SPARK_HOME/extraClassPath/executor/
cp -n $KAFKA_HOME/libs/metrics-core-2.2.0.jar $SPARK_HOME/extraClassPath/executor/

验证安装的结果

测试spark部署情况

运行下面的命令:

$SPARK_HOME/bin/run-example SparkPi 10

正常的情况下,会有一大堆输出,看看有没有:

Pi is roughly 3.14

  • 启动spark集群master server
$SPARK_HOME/sbin/start-master.sh

master服务,默认会使用7077这个端口。可以通过其日志文件查看实际的端口号。

  • 启动spark集群slave server
$SPARK_HOME/sbin/start-slave.sh spark://$(hostname):7077

后面的参数是master URL.

  • 在集群环境中,运行spark的sample
$SPARK_HOME/bin/run-example --master spark://$(hostname):7077 SparkPi 10

后面的参数是master URL.

正常的情况下,会有一大堆输出,看看有没有:

7077

Pi is roughly 3.14

  • 关闭spark的master服务
$SPARK_HOME/sbin/stop-master.sh
  • 关闭spark的slave服务
$SPARK_HOME/sbin/stop-slave.sh

测试Kafka的部署情况

  • 启动kafka服务器
# Start zookeeper server
gnome-terminal -x sh -c '$KAFKA_HOME/bin/zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties; bash' # Wait zookeeper server is started.
sleep 5s # Start kafka server
gnome-terminal -x sh -c '$KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties; bash' # Wait kafka server is started.
sleep 5s

注:使用Ctrl+C可以中断服务。

  • 创建一个topic
# Create a topic
$KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test # List topics
$KAFKA_HOME/bin/kafka-topics.sh --list --zookeeper localhost:2181
  • 发一个Message
# Send a message
echo This is a message | $KAFKA_HOME/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
  • 启动一个consumer来接受消息。

    新起一个终端。正常情况下可以收到This is a message

    不行的话,再发一遍消息。
# Start a consumer
$KAFKA_HOME/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

测试Scala的部署情况

这个比较简单,运行:

echo sys.exit | $SCALA_HOME/bin/scala

可以看到Scala的版本号。检查是否正确。

下面请看

至此,我们已经部署好了一个spark集群+akka+scala的开发环境。下一步请看:

Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用

Spark集群 + Akka + Kafka + Scala 开发(3) : 开发一个Akka + Spark的应用

Spark集群 + Akka + Kafka + Scala 开发(4) : 开发一个Kafka + Spark的应用

参照

Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境的更多相关文章

  1. Spark集群 + Akka + Kafka + Scala 开发(3) : 开发一个Akka + Spark的应用

    前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...

  2. Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用

    前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境,我们已经部署好了一个Spark的开发环境. 本文的目标是写一个Spark应用,并可以在集群中测试. ...

  3. Spark集群 + Akka + Kafka + Scala 开发(4) : 开发一个Kafka + Spark的应用

    前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...

  4. 编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]

    编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6 ...

  5. spark集群搭建(三台虚拟机)——kafka集群搭建(4)

    !!!该系列使用三台虚拟机搭建一个完整的spark集群,集群环境如下: virtualBox5.2.Ubuntu14.04.securecrt7.3.6_x64英文版(连接虚拟机) jdk1.7.0. ...

  6. 如何基于Jupyter notebook搭建Spark集群开发环境

    摘要:本文介绍如何基于Jupyter notebook搭建Spark集群开发环境. 本文分享自华为云社区<基于Jupyter Notebook 搭建Spark集群开发环境>,作者:apr鹏 ...

  7. 实验室中搭建Spark集群和PyCUDA开发环境

    1.安装CUDA 1.1安装前工作 1.1.1选取实验器材 实验中的每台计算机均装有双系统.选择其中一台计算机作为master节点,配置有GeForce GTX 650显卡,拥有384个CUDA核心. ...

  8. 将java开发的wordcount程序提交到spark集群上运行

    今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...

  9. 十、scala、spark集群搭建

    spark集群搭建: 1.上传scala-2.10.6.tgz到master 2.解压scala-2.10.6.tgz 3.配置环境变量 export SCALA_HOME=/mnt/scala-2. ...

随机推荐

  1. Atiit 如何手写词法解析器

    Atiit 如何手写词法解析器 1.1. 通过编程直接从正则->nfa->dfa->表驱动词法解析一条龙自动生成.那是用程序自动生成是需要这样的,自己手写完全不必要这么复杂1 1.2 ...

  2. iOS开发——高级语法篇&继承、实现、依赖、关联、聚合、组合的联系与区别

    继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者 ...

  3. 关于Ubuntu运行级别、开机启动脚本的说明

    关于Ubuntu运行级别.开机启动脚本的说明 目录简介 1.1介绍Ubuntu下面的自启动脚本目录 1.2 Linux操作系统运行级别的概念 1.3关于操作系统自启脚本的启动顺序 1.4    Lin ...

  4. MemCache分布式缓存的一个bug

    Memcached分布式缓存策略不是由服务器端至支持的,多台服务器之间并不知道彼此的存在.分布式的实现是由客户端代码(Memcached.ClientLibrary)通过缓存key-server映射来 ...

  5. timus_1007_bfs

    图像编码 题目描述: 有这样一副图,它有黑白像素,黑像素的坐标在1-10之间.有很多种方法来编码这个图.例如下面的图: 一种表示方法是只描述黑像素,并按x坐标的增序描述,如果x相同,则按y的增序描述, ...

  6. Spring MVC 学习总结(六)——Spring+Spring MVC+MyBatis框架集成

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  7. Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用

    在Prefuse上摸打滚爬了一段时间,发现其和蔼可亲,容易上手.但是每每在打开gephi,导入数据再运行时,总还是在心里暗自赞叹gephi的绚烂之极,无与匹敌,当然,gephi也有自己的缺陷,但是ge ...

  8. windows环境下跑hadoop自带的wordcount遇到的问题

    hadoop环境自己之前也接触过,搭建的是一个伪分布的环境,主从节点都在我自己的机子上,即127.0.0.1,当初记得步骤很多很麻烦的样子(可能自己用ubuntu还不够熟练),包括myeclipse. ...

  9. 使用 CSS3 动画实现的 3D 图片过渡特效

    这是一个基于 CSS3 动画实现的图片过渡效果,共有 Flip.Rotation.Multi-flip.Cube.Unfold 等6种效果,它们将证明 CSS3 Transform 和 Transit ...

  10. html/css基础篇——link和@inport详解以及脚本执行顺序探讨

    先说一说两者之间的异同 两者都可以引用外部CSS的方式,现在主流浏览器两者都支持(ps:@import是CSS2.1提出的),但是存在一定的区别: 1.link是XHTML标签,除了加载CSS外,还可 ...