大数据集群环境说明
Spark版本:2.0.2
Kafka版本:0.9.1
Linux系统:CentOS6.5
场景
做Spark Streaming开发,在Win7下使用IDE进行开发,希望在本地IDEA上远程连接服务器上的大数据集群进行调试,这里仅连服务器上的Kafka和Zookeeper服务
我这里在Windows下使用IDEA进行开发,相信本文章对Eclipse的朋友也有帮助
服务器上的大数据集群已经全部安装好了(Hadoop、Hive、HBase、Spark、Flume、Sqoop、Zookeeper、Hue等等)
这里Kafka的安装、Spark的安装、以及其他大数据服务的安装不再赘述
操作
第一步:后台启动Kafka
nohup bin/kafka-server-start.sh config/server.properties &
第二步:启动Kafka的Producer(cm02.spark.com为集群中一台服务器的主机名(映射了IP地址))
bin/kafka-console-producer.sh --broker-list cm02.spark.com:9092 --topic test
第三步:下面是一个简单的Spark Streaming Demo
import org.apache.spark.SparkConf
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}
/**
* Demo
* Spark Streaming远程连接Zookeeper读取Kafka的数据进行单词统计
* Created by CaoWeiDong on 2017-11-22.
*/
object ScalaKafkaWordCount {
def main(args: Array[String]): Unit = {
//Zookeeper连接地址
val zkQuorum = "
[cm01.spark.com:2181,cm02.spark.com:2181,cm03.spark.com:2181"](http://cm01.spark.com:2181,cm02.spark.com:2181,cm03.spark.com:2181%22/)
//Kafka连接信息(Topic Partition)
val topicMap = Map("test" -> 1)
//conf
val conf = new SparkConf()
.setAppName(ScalaKafkaWordCount.getClass.getSimpleName)
.setMaster("local[4]")
//SparkStreaming
val ssc = new StreamingContext(conf, Seconds(2))
//SparkStreaming连接Kafka
val lines = KafkaUtils.createStream(ssc, zkQuorum, "sss", topicMap)
.map(_._2)
//以空格进行切分,统计单词个数
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map(key => (key, 1L))
.reduceByKey(_ + _)
//打印
wordCounts.print()
//启动
ssc.start()
ssc.awaitTermination()
}
}
第四步:运行Demo
运行Spark-Streaming的Demo.png
第五步:准备数据
Hadoop Spark Kafka Flume
Hive HBase Flink Sqoop
Mapreduce yarn hdfs
Spark Storm Kylin Sqoop HBase Hadoop
Kafka Kylin hdfs Flume
将上面的数据贴到Kafka的Producer
为Kafka准备数据.png
第六步:IDEA下Spark Streaming的运行结果
Spark-Streaming统计Kafka生产的数据.png
最后一步:总结
其实这在Windows下IDEA下Spark Streaming通过local模式进行调试最关键的一行代码是:
val conf = new SparkConf()
.setAppName(ScalaKafkaWordCount.getClass.getSimpleName)
.setMaster("local[4]")
原来的时候我local的进程数是1,虽然运行时一直没有报错,但是Kafka生产的数据一直消费不了
后来调成4了以后就可以了,发现是因为Spark Streaming需要开启多个进程,一个进程接收数据,一个处理数据,一开始调成2不行,然后调成4就可以了