Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境
[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
下载并安装必要的软件
- JDK 1.8
Download URL: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载jdk-8u102-linux-x64.tar.gz
解压到目录/opt下,把目录名改成/opt/java。
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.template
为spark-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的应用
参照
- akka document
- Elasticity (cloud computing)
- Resilient control systems
- akka 2.4.10 code samples
- akka office samples
- A simple Akka (actors) remote example
- Shutdown Patterns in AKKA 2
Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境的更多相关文章
- Spark集群 + Akka + Kafka + Scala 开发(3) : 开发一个Akka + Spark的应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...
- Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境,我们已经部署好了一个Spark的开发环境. 本文的目标是写一个Spark应用,并可以在集群中测试. ...
- Spark集群 + Akka + Kafka + Scala 开发(4) : 开发一个Kafka + Spark的应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...
- 编写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 ...
- spark集群搭建(三台虚拟机)——kafka集群搭建(4)
!!!该系列使用三台虚拟机搭建一个完整的spark集群,集群环境如下: virtualBox5.2.Ubuntu14.04.securecrt7.3.6_x64英文版(连接虚拟机) jdk1.7.0. ...
- 如何基于Jupyter notebook搭建Spark集群开发环境
摘要:本文介绍如何基于Jupyter notebook搭建Spark集群开发环境. 本文分享自华为云社区<基于Jupyter Notebook 搭建Spark集群开发环境>,作者:apr鹏 ...
- 实验室中搭建Spark集群和PyCUDA开发环境
1.安装CUDA 1.1安装前工作 1.1.1选取实验器材 实验中的每台计算机均装有双系统.选择其中一台计算机作为master节点,配置有GeForce GTX 650显卡,拥有384个CUDA核心. ...
- 将java开发的wordcount程序提交到spark集群上运行
今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...
- 十、scala、spark集群搭建
spark集群搭建: 1.上传scala-2.10.6.tgz到master 2.解压scala-2.10.6.tgz 3.配置环境变量 export SCALA_HOME=/mnt/scala-2. ...
随机推荐
- ASP.net的文件扩展名
尽管ASP.NET中采用的是事件响应模式,使程序开发人员和最终用户感觉与WinForm程序非常接近,但是它毕竟还是Web应用程序.而Web应用程序的特点,就是基于浏览器与服务器的请求与响应的执行方式. ...
- Atitit blend mode COLOR_DODGE 混合模式 “颜色减淡”模式
Atitit blend mode COLOR_DODGE 混合模式 "颜色减淡"模式 1.1. 混合模式是图像处理技术中的一个技术名词1 1.2. 目录1 1.3. 颜色减淡C ...
- Python - 001 - 类与实例间属性的理解
Python是个很灵活的语言,光看它的类和实例间属性的访问机制就可以看出这一点,不过这一点还真的不好理解,做了些测试之后我的理解是这样的: 实例在访问class属性时,先检索自己的names, 如果有 ...
- unity生成的WP8.1工程的Title本地化实现
不同于WP本身工程的实现,unity的工程在package.appxmanifest文件中已经定义了 <Resources> <Resource Language="x-g ...
- 第五章 运输层(UDP和TCP三次握手,四次挥手分析)
序言 通过这章,可以知道其实三次握手和四次挥手其实真的好简单,通过这章的学习,我相信你也会同样的认为,以后在也不需要听到别人问三次握手的过程而自己一脸懵逼了,觉得人家好屌,其实也就是他懂你不懂,仅 ...
- HashSet源码详解
序言 在写了HashMap文章后,隔了几天才继续这一系列的文章,因为要学的东西实在是太多了,写一篇要花费的时间很多,所以导致隔了几天才来写.不过希望自己坚持下去.终有一天会拨开云雾见青天的.学Hash ...
- replicate复制函数
按指定次数重复字符表达式 REPLICATE ( character_expression, integer_expression) character_expression 字符数据型的字母数字表达 ...
- Comet服务器推送与SignalR
HTTP协议是一个典型的Request/Response协议,是基于TCP/IP之上的一个应用层协议,该协议最典型的特点就是无状态且需要客户端发起Request服务端才能进行Response, ...
- poj 1950 Dessert(dfs枚举,模拟运算过程)
/* 这个代码运行的时间长主要是因为每次枚举之后都要重新计算一下和的值! 如果要快的话,应该在dfs,也就是枚举的过程中计算出前边的数值(这种方法见第二个代码),直到最后,这样不必每一次枚举都要从头再 ...
- Linux的学习--使用PuTTY
交代一下背景,在笔记本上装虚拟机,在虚拟机里装了Ubuntu系统,但用着一直感觉很卡.刚好同学有旧的不用的笔记本,就拿来装了一个Ubuntu. 想要从我的笔记本上控制Ubuntu系统,于是就找到了pu ...