环境准备:

ubuntu 开发环境:

jdk 1.8

scala:2.11.0

spark 2.0

zookeeper 3.4.6

kafka  2.12-0.10.2.0

开始整合:

1 zookeeper的安装,这里我使用的zookeeper版本为3.4.6

a, 下载zookeeper安装包zookeeper-3.4.6.tar.gz

  b, 解压安装文件到/usr/local/ 这是我的安装目录,具体可根据自己的情况而定:

 sudo tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local

c, 进入/usr/local并重命名解压的文件名

      cd /usr/local
sudo mv zookeeper-3.4.6/ zookeeper
# 为当前用户加入授权
sudo chown -R hadoop ./zookeeper # 我这里的用户名为hadoop,具体情况根据自己的情况写

d,进入zookeeper安装文件夹的配置文件所在文件夹conf

   #创建存数据的文件
mkdir /home/hadoop/zookeeper
cd /zookeeper/conf
# 为zookeeper设置配置文件
cp -a zoo_sample.cfg zoo.cfg

修改配置文件

        vim zoo.cfg   

# 心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间
tickTime=2000
# 多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
initLimit=10
# leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与 leader 进行通信,那么此 follower 将被丢弃。这里应答的时间长度为5
syncLimit=5
# 用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里,这里设为之前创建的文件夹
dataDir=/home/hadoop/zookeeper
# 服务的监听端口
clientPort=2181

2 kafka的安装以及配置:我使用的版本为2.12-0.10.2.0

    a,下载kafka安装包kafka_2.12-0.10.2.0.tgz

    b, 解压安装包至指定安装目录,这里我的安装目录是/usr/local/

      sudo tar -zxvf kafka_2.12-0.10.2.0.tgz -C /usr/local/
cd /usr/local
sudo mv kafka_2.12-0.10.2.0/ kafka
sudo chwon -R hadoop ./kafka # 把当前用户授权于kafka文件

c, 修改配置文件

    cd config
# 创建kafka数据存放的地址
mkdir /home/hadoop/kafka
vim server.properties # 每一个broker在集群中的唯一表示,要求是正数。当该服务器的IP地址发生改变时,broker.id没有变化,则不会影响consumers的消息情况,这里由于是伪分布式,直接设为0即可
broker.id =0
#broker server服务端口
port =9092
# 配置zookeeper的集群的地址
zookeeper.connect=localhost:2181
# kafka数据的存放地址
log.dirs=/home/hadoop/kafka
# 其他的配置不用修改!!

  

3 为方便在以后的使用,添加环境变量到~/.bashrc中,并创建简单的启动shell

   a,配置环境变量

    vim ~/.bashrc

     # 在文件的开头添加
# Kafka
export KAFKA_HOME=/usr/local/kafka #这里是我的安装目录,实际情况,根据自己的安装目录来定
export PATH=${KAFKA_HOME}/bin:$PATH
export PATH=${KAFKA_HOME}/config:$PATH
# zookeeper
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

b,创建简单的启动shell,启动zookeeper和kafka

  vim Start-Server.sh
#!/bin/bash
# 启动 zookeeper
/usr/local/zookeeper/bin/zkServer.sh start
# 启动 kafka
/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
vim Stop-Server.sh
#!/bin/bash
# 关闭 kafka
/usr/local/kafka/bin/kafka-server-stop.sh /usr/local/kafka/config/server.properties
# 由于可能关闭kafka时有延迟,暂定1毫秒再执行关闭zookeeper的命令
sleep 1
# 关闭 zookeeper
/usr/local/zookeeper/bin/zkServer.sh stop
# 为写的脚本授权
sudo chmod 777 Start-Server.sh
sudo chmod 777 Stop-Server.sh

  

4 streaming 和 kafka 的整合使用

   a,使用maven建立kafka所用到包的依赖

  <dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-8_2.11</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>

××Buid Path相关spark下面的jar包

   b,方式一 命令行方式

      创建一个topic test

      kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
发送数据
kafka-topics.sh --list --zookeeper localhost:2181

  

方式二 创建scala程序Producer类,读取hdfs上的文件,并发送到kafka消息队列上

import java.util.Properties;
import java.lang.Runnable;
import java.net.URI;
import java.io.*; import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
/**
* 向kafka上面发送数据
* 读取hdfs上的文件,并写入本地文件,再发送到kafka消息队列上
* */
class TestKafkaProducer implements Runnable{ /**
* 对于kafka producer的相关配置文件项
**/
public static Properties getProducerCnfig() {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
return props;
} public void run(){
// 获取配置文件
Properties props = getProducerCnfig();
// 创建生产者
Producer<String, String> producer = new KafkaProducer(props);
try{
//读取保存的文件
FileInputStream fis=new FileInputStream("/home/hadoop/text.txt");
InputStreamReader isr= new InputStreamReader(fis, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = "";
String[] arrs = null;
while ((line = br.readLine())!=null) {
producer.send(new ProducerRecord<String, String>("test", line));
}
br.close();
isr.close();
fis.close();
}catch (Exception e){e.printStackTrace();}
}
}
public class Tess{
public static void main(String[] args) throws IOException{
Tess.getFIle();
new Thread(new TestKafkaProducer()).start();
System.out.println("发送结束");
}
/**
* 获取hdfs上的文件,并保存制定文件夹下
* */
public static void getFIle() throws IOException{
String uri = "hdfs://localhost:9000/test/zookeeper.properties";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf); InputStream in = null;
FileOutputStream fos = new FileOutputStream(new File("/home/hadoop/text.txt"));
try {
in = fs.open(new Path(uri));
in.skip(100);
IOUtils.copyBytes(in, fos, 4096, false);
}catch (Exception e){
e.printStackTrace();
}finally {
IOUtils.closeStream(in);
IOUtils.closeStream(fos);
}
}
}

  

 

streaming使用打印kafka上的消息,注意在运行这个程序时,需要配置args的参数,第一个为brokers 第二个为topic,

    我这在单机下,配置的args为:localhost:9092 test

package com.learn

import kafka.serializer.StringDecoder

import org.apache.spark.streaming._
import org.apache.spark.streaming.kafka._
import org.apache.spark.SparkConf object KafkaAndPrintInSpark { //判断设置的时输入参数,是否包含brokers 和 topic 至少参数的长度为2,即单机运行一个test的topic: broker=localhost:9092 topic=test
def main(args: Array[String]) {
if (args.length < 2) {
System.err.println(s"""
|Usage: DirectKafkaWordCount <brokers> <topics>
| <brokers> is a list of one or more Kafka brokers
| <topics> is a list of one or more kafka topics to consume from
|
""".stripMargin)
System.exit(1)
} //将参数args读入到数组中
val Array(brokers, topics) = args // 用2秒批间隔创建上下文
val sparkConf = new SparkConf().setMaster("local[2]").setAppName("DirectKafkaWordCount")
val ssc = new StreamingContext(sparkConf, Seconds(2)) // 创建kafka流与brokers和topic
val topicsSet = topics.split(",").toSet
val kafkaParams = Map[String, String]("metadata.broker.list" -> brokers)
val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](
ssc, kafkaParams, topicsSet) //打印获取到的数据
val lines = messages.map(_._2)
lines.print() // 开始计算
ssc.start()
ssc.awaitTermination()
}
}

  

Zookeeper+Kafka+Spark streaming单机整合开发的更多相关文章

  1. demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis

    基于Spark通用计算平台,可以很好地扩展各种计算类型的应用,尤其是Spark提供了内建的计算库支持,像Spark Streaming.Spark SQL.MLlib.GraphX,这些内建库都提供了 ...

  2. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装

    一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120 master 192.168.0.121 slave1 192.168.0.122 sla ...

  3. 日志=>flume=>kafka=>spark streaming=>hbase

    日志=>flume=>kafka=>spark streaming=>hbase 日志部分 #coding=UTF-8 import random import time ur ...

  4. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十一)定制一个arvo格式文件发送到kafka的topic,通过Structured Streaming读取kafka的数据

    将arvo格式数据发送到kafka的topic 第一步:定制avro schema: { "type": "record", "name": ...

  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十)安装hadoop2.9.0搭建HA

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  6. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(九)安装kafka_2.11-1.1.0

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  7. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(八)安装zookeeper-3.4.12

    如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...

  8. Apache Kafka + Spark Streaming Integration

    1.目标 为了构建实时应用程序,Apache Kafka  - Spark Streaming Integration是最佳组合.因此,在本文中,我们将详细了解Kafka中Spark Streamin ...

  9. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十三)kafka+spark streaming打包好的程序提交时提示虚拟内存不足(Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical memory used; 2.2 GB of 2.1 G)

    异常问题:Container is running beyond virtual memory limits. Current usage: 119.5 MB of 1 GB physical mem ...

随机推荐

  1. OneBlog开源博客-详细介绍如何实现freemarker自定义标签

    前言 OneBlog中使用到了springboot + freemarker的技术,同时项目里多个controller中都需要查询一个公有的数据集合,一般做法是直接在每个controller的方法中通 ...

  2. 阿里云centos7安装mysql8数据库

    一.安装mysql 1. mysql官网查找仓库源镜像,选择downloads https://www.mysql.com/downloads/ 2. 找到社区版 3. 选择yum仓库 4. 选择对应 ...

  3. LeetCode144 二叉树的前序遍历

    给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? /** * Defin ...

  4. at定时任务

    1)at是只执行一次,执行完后任务删除.at的守护进程atd会以后台模式运行,检查作业队列来运行.2)默认 atd每60秒巡逻一次,有作业时候,检查作业时间,如果和当前时间一样,就执行任务3)在使用a ...

  5. SpringCloud Alibaba Nacos服务注册与配置管理

    Nacos SpringCloud Alibaba Nacos是一个狗抑郁构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos:Dynamic Naming and Configurat ...

  6. 容器编排系统K8s之Prometheus监控系统+Grafana部署

    前文我们聊到了k8s的apiservice资源结合自定义apiserver扩展原生apiserver功能的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/ ...

  7. MySQL 使用sql添加和创建用户

    用户管理 SQL 命令操作 用户表:mysql.user 本质:对mysql.user 表进行增删改查 -- ============== 用户管理 ============= -- 创建用户 -- ...

  8. kali中安装漏洞靶场Vulhub

    一.什么是vulhub? Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加 ...

  9. 分别使用 Python 和 Math.Net 调用优化算法

    1. Rosenbrock 函数 在数学最优化中,Rosenbrock 函数是一个用来测试最优化算法性能的非凸函数,由Howard Harry Rosenbrock 在 1960 年提出 .也称为 R ...

  10. 【Linux】使用grep快速比较两个文件不同

    两个文件的比较,会有同学说使用diff,和vimdiff就可以快速比较,为什么还要使用grep呢? 有些时候,diff和vimdiff的时候环境不符合,这样的情况,就可以使用grep来解决这个问题. ...