Win10 环境搭建Spark streaming 将Kafka数据作为输入源

【Hadoop】

首先搭建Hadoop平台,这里我选择的版本是2.6.4,具体部署步骤我参考了这一篇博客。

但是其中的配置文件有所更改:

G:\Spark\hadoop\hadoop-2.6.4\hadoop-2.6.4\etc\hadoop\core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
     <name>fs.defaultFS</name>
     <value>hdfs://localhost:9000</value>
  </property>
  <property>
  <name>hadoop.tmp.dir</name>
  <value>file:/hadoop/data/tmp</value>
  </property>
</configuration>

G:\Spark\hadoop\hadoop-2.6.4\hadoop-2.6.4\etc\hadoop\mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

G:\Spark\hadoop\hadoop-2.6.4\hadoop-2.6.4\etc\hadoop\hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
	<property>
		<name>fs.checkpoint.dir</name>
		<value>file:/hadoop/data/snn</value>
	</property>
	<property>
		<name>fs.checkpoint.edits.dir</name>
		<value>file:/hadoop/data/snn</value>
	</property>
    <property>    
        <name>dfs.namenode.name.dir</name>    
        <value>file:/hadoop/data/namenode</value>    
    </property>    
    <property>    
        <name>dfs.datanode.data.dir</name>    
        <value>file:/hadoop/data/datanode</value>  
    </property>
</configuration>

如果遇到启动datanode时候java.io.IOException: All specified directories are failed to load.

将G:\hadoop\data\datanode\current\VERSION中的clusterID更改成G:\hadoop\data\namenode\current\VERSION中的一致,重新启动即可。

【Scala】

这里我选择的是2.11.8版本

【Spark】

Spark我选择了2.1.0版本

由于以Kafka传过来的数据作为输入源,我这里参考了这一篇文章的方法,修改了conf/spark-env.sh中的内容,具体如下

export SPARK_DIST_CLASSPATH=$(G:\Spark\hadoop\hadoop-2.6.4\hadoop-2.6.4\bin classpath):G:\Spark\Spark\spark-2.1.0-bin-hadoop2\spark-2.1.0-bin-hadoop2.6\jars\kafka\*:G:\Spark\Spark\spark-2.1.0-bin-hadoop2\spark-2.1.0-bin-hadoop2.6\examples\jars\*:G:\Spark\KafkaLib\libs\*:G:\Kafka\kafka_2.11-1.0\libs\*

下载对应的Spark-kafka jar文件下载地址为这里,我选择下载了spark-streaming-kafka-0-8-assembly_2.11-2.1.0.jar,放在spark/jar文件夹下,通过压缩软件可以打开查看里面有kafka文件夹,并有该类。

将G:\Spark\Spark\spark-2.1.0-bin-hadoop2\spark-2.1.0-bin-hadoop2.6\python\pyspark文件夹拷贝至python库文件夹内。

至此所有spark方面的准备工作做完。

【Kafka】

本次尝试的是单机模式,即Kafka,Spark,Hadoop安装在同一台机器上。

这里Kafka选择是基于Scala2.11的kafka_2.11-1.0,zookeeper选择的是3.4.12。

开启服务并且创建topic ‘test’

准备工作完成

首先开启所有hadoop功能,接着开启kafka服务

接着参考这一篇,编写wordcount.py

from __future__ import print_function
 
import sys
 
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
 
if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Usage: kafka_wordcount.py <zk> <topic>", file=sys.stderr)
        exit(-1)
 
    sc = SparkContext(appName="PythonStreamingKafkaWordCount")
    ssc = StreamingContext(sc, 1)
 
    zkQuorum, topic = sys.argv[1:]
    kvs = KafkaUtils.createStream(ssc, zkQuorum, "spark-streaming-consumer", {topic: 1})
    lines = kvs.map(lambda x: x[1])
    counts = lines.flatMap(lambda line: line.split(" ")) \
        .map(lambda word: (word, 1)) \
        .reduceByKey(lambda a, b: a+b)
    counts.pprint()
 
    ssc.start()
    ssc.awaitTermination()

之后执行python wordcount.py localhost:2181 test,可以看见每一秒的kafka传过来的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值