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

下載並安裝必要的軟件

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的應用

參照


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM