kafka pyspark(集群zookeeper)


准备:首先cmd 在运行中安装pyspark  pip install pyspark



spark-streaming得数据的几种途径:

               socker: 网络中

               queue: sc散列的数据

               flume: 通过 flume得数据,sinks

               kafka: 通过kafka得数据有两种:一种是Receiver DStream(定义一个消费),一种是Direct DStream(直接消费)

下面我们用python做一个Direct DStream做一个 实时wordcound

下边是shishi.py文件中的代码

import sys
from pyspark import SparkConf
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
import time

def writeResultToFile(rdd):
    with open("dswordcound/{0}".format(time.time()),'wb+') as f:
        for i in rdd.collect():
            f.write(str(i).encode())
            f.write('\n'.encode())

#当当前模块以main方式导入就执行否则不执行
if __name__ == '__main__':
    #判断使用时控制台是否传入3个参数,不是就结束程序
    if len(sys.argv) != 3:
        print("Usage: direct_kafka_wordcount.py <broker_list> <topic>", file=sys.stderr)
        sys.exit(-1)
        # 从第二个参数分别获取 2 3 参数赋值给 brokers, topic
    brokers, topic = sys.argv[1:]

    # 自定义sparkConf
    conf = SparkConf()
    # 创建sparkContext 建立 driver 和 work的会话
    sc = SparkContext(master='local[4]', appName="my streaming wordcount")
    # 创建sparkStreaming
    ssc = StreamingContext(sc, 5)
    # 使用KafkaUtils的静态方法创建kafka直连流 DStream
    kk = KafkaUtils.createDirectStream(ssc, [topic], {"metadata.broker.list": brokers})


    lines=kk.map(lambda x : x[1])
    words=lines.flatMap(lambda x:x.split(' '))
    pairs=words.map(lambda x:(x,1))
    wordcounts=pairs.reduceByKey(lambda x,y:x+y)
    #上面的都叫转化transformation 下边的是行为action
    wordcounts.foreachRDD(writeResultToFile)

    #完成之后客户端不能停,启动并等待完成
    ssc.start()
    ssc.awaitTermination()

先在/home/hadoop/文件下新建一个目录


然后启动zookeeper ( ./bin/zookeeper-server-start.sh config/zk.properties)   


在启动flume(./bin/flume-ng agent -c conf -f conf/aa.conf -n a1 -Dflume.root.logger=info,console)(flume的端口号改h成python2:9092)


在启动一个broker(./bin/kafka-server-start.sh conf/kafka1.properties)

接着启动一个消费者(./bin/kafka-console-consumer.sh --bootstrap-server python2:9092 --topic cctv1)

接着把我们编写的程序放过来,用文件上传到hadoop上


在改下

spark-submit shishi.py python2:9092 cctv1

发现又报错了


第二种方式比较麻烦,我们来使用第一种方式


看一下5秒钟复制一次


这时候我们新建一个文件vi test1





猜你喜欢

转载自blog.csdn.net/baiyan_er/article/details/80139973