大数据开发环境搭建系列六:Kafka和flume的安装和环境搭建

1. 写在前面

最近学习推荐系统, 想做一个类似于企业上的那种推荐系统(采用的阿里天池赛的一个电商数据集, 然后基于大数据的Lambda架构, 实现离线和在线相结合的实时推荐系统), 这样可以熟悉一下真实环境中的推荐系统流程, 但是这里面需要大数据的开发环境, 所以这里的这个系列是记录自己搭建大数据开发环境的整个过程, 这里面会涉及到Hadoop集群,Spark, zookeeper, HBase, Hive, Kafka等的相关安装和配置,当然后面也会整理目前学习到的关于前面这些东西的相关理论知识和最终的那个推荐系统, 经过这一段时间的摸索学习, 希望能对大数据开发和工业上的推荐系统流程有个宏观的初识,这一块涉及到技术上的细节偏多, 所以想记录一下, 方便以后查看和回练, 开始 😉

上一篇文章完成了Hive和MySQL的安装和环境搭建, 其实大数据的开发环境基本上完成了, 今天的这篇是再安装两个有关于日志采集的两个软件,一个是Kafka,另一个是flume。 Kafka是一个分布式的基于发布或者订阅模式的消息队列,主要是应用于大数据实时处理的领域。Flume是Cloudera提供的一个高可用,高可靠,分布式的海量日志采集、聚合和传输的系统,主要的作用是读取服务器本地磁盘的数据, 将数据写入到HDFS。

由于目前我没有用过,具体的原理后面整理,这里先把这两个搭建起来。

2. Kafka的安装与搭建

依然是基于我们已经下载好的安装包,三步走:

tar zxvf kafka_2.12-1.0.0.tgz 

sudo mkdir /opt/bigdata/kafka/
sudo mv kafka_2.12-1.0.0 /opt/bigdata/kafka/kafka2.12

这里依然是环境变量的配置, 这里换了版本了,前面的环境变量那里需要改一下

# kafka config
export KAFKA_HOME=/opt/bigdata/kafka/kafka2.12

# 其他的不用动

修改配置文件夹, kafka2.12/config/server.properties里面:

broker.id=0  # 标识符, 相当于zookeeper的myid, 三台机器上不能一样
host.name=master

# 改一下日志路径
log.dirs=/opt/bigdata/kafka/kafka2.12/kafka-logs

# 改一下zookeeper连接主机
zookeeper.connect=master:2181, slave01:2181, slave02:2181

然后将kafka拷贝到其他集群上,因为这个东西是基于zookeeper的, 所以和zookeeper有点像,得每台机器上都有。

scp -r /opt/bigdata/kafka icss@slave01:/opt/bigdata
scp -r /opt/bigdata/kafka icss@slave02:/opt/bigdata

然后进入每台机器,修改他们的broker.id和host.name

ssh slave01

cd /opt/bigdata/kafka/kafka2.12/config

sudo vi server.properties   # broker.id 1 host.name slave01

# slave02同理

接下来启动kafka, 首先要先启动zookeeper集群

# 开启slave01的zookeeper
ssh slave01
cd /opt/bigdata/zookeeper/zookeeper3.4/bin
zkServer.sh start
exit
# 开始slave02的zookeeper
ssh slave02
cd /opt/bigdata/zookeeper/zookeeper3.4/bin
zkServer.sh start
exit
# 开启自己的zookeeper
cd /opt/bigdata/zookeeper/zookeeper3.4/bin
zkServer.sh start

然后用类似的方式启动kafka

ssh slave01
cd /opt/bigdata/kafka/kafka2.12
bin/kafka-server-start.sh -daemon config/server.properties
exit
# 开始slave02的zookeeper
ssh slave02
cd /opt/bigdata/kafka/kafka2.12
bin/kafka-server-start.sh -daemon config/server.properties
exit
# 开启自己的zookeeper
cd /opt/bigdata/kafka/kafka2.12
bin/kafka-server-start.sh -daemon config/server.properties  # -daemon 守护进程, 这样就没有日志了

这样就都启动起来了。 上面的这种切换方式太麻烦了,无意中get到了一种shell脚本的方式, 可以在master上同时启动或者关闭三台机器上的kafka, 当然zookeeper,还有一些其他的那种需要三台机器同时启动的也是一样的原理,下面我们就来试一下。 在icss家目录下的bin目录下新建立一个kfk_manage.sh文件, 然后在里面输入:

#!/bin/bash
case $1 in
"start"){

	for i in master slave01 slave02
	do 
		echo "**********$i***********"
		ssh $i "/opt/bigdata/kafka/kafka2.12/bin/kafka-server-start.sh -daemon /opt/bigdata/kafka/kafka2.12/config/server.properties"
	done
};;
"stop"){

	for i in master slave01 slave02
	do 
		echo "**********$i***********"
		ssh $i "/opt/bigdata/kafka/kafka2.12/bin/kafka-server-stop.sh 
	done
};;
esac

然后保存,给他一个权限 chmod 777 kfk_manage.sh, 然后先把kafka关闭,然后再启动。

kfk_manage.sh stop
kfk_manage.sh start

既然学习了shell,那就借机再练一下, 这里再搞一个同时看三台机器jps进程的一个脚本,这个在/usr/local/bin目录下,新建一个xcall.sh脚本, 在里面输入:

#!/bin/bash
params=$@

for i in master slave01 slave02
do
        echo "***********$i $params*************"
        ssh $i "$params"
done

这是为了能够在任何地方都能执行这个命令, 然后就是在这个目录下为jps建立一个软连接, 要不然不知道这里的jps命令是啥意思, 命令如下;

ln -s /opt/bigdata/java/jdk1.8/bin/jps jps

这个要在三台机器的/usr/local/bin目录下都建立才行, 这样, 就可以在master的任何地方输入

chmod 777 xcall.sh
xcall.sh jps

效果如下, 直接看三台机器上的jps进程,简直太爽了:
在这里插入图片描述
好了,现在继续回到kafka上来,现在是kafka装好了, 接下来就是简单的用一下。master上:

cd /opt/bigdata/kafka/kafka2.12/bin
# 查看一下当前的topic
kafka-topics.sh --zookeeper master:2181 --list

# 新建立一个主题
kafka-topics.sh --zookeeper master:2181 --create --topic test --partitions 2 --replication-factor 2
# 看主题详情
kafka-topics.sh --zookeeper master:2181 --describe --topic test
# 删除主题
kafka-topics.sh --zookeeper master:2181 --delete --topic test

下面就来测试一下, 在master上建立一个生产者负责发送消息

kafka-console-producer.sh --broker-list master:9092 --topic test

在slave01和slave02上建立两个消费者负责读取信息:

# salve01 
kafka-console-consumer.sh --bootstrap-server master:9092 --topic test
# slave02  不加后面的from beginning的话, 只能从当前开始取,之前的信心拿不到
kafka-console-consumer.sh ---bootstrap-server master:9092 --topic test --from-beginning

测试结果如下:

在这里插入图片描述

3. Flume的安装与搭建

走到这里会发现,这些框架的安装方式基本上的套路差不多,依然基于下载好的安装包,三步走:

tar -zxvf apache-flume-1.9.0-bin.tar.gz 

sudo mkdir /opt/bigdata/flume/
sudo mv apache-flume-1.9.0-bin /opt/bigdata/flume/flume1.9

配置一下环境变量

gedit /etc/profile

# 里面加入flume_home,然后修改path

# 生效
source /etc/profile

flume简单配置一下即可使用, 依然是进入flume1.2/conf目录,修改一下env.sh

cp flume-env.sh.template flume-env.sh
sudo gedit flume-env.sh

# 把这个注释打开修改即可
export JAVA_HOME=/opt/bigdata/java/jdk1.8

这样flume就搞定了,因为这个东西是一个传输的工具。下面用一个案例测试一下:

需求: Flume监听一个端口, 收集该端口的数据,打印到控制台。

首先,安装netcat工具:

sudo yum install -y nc

创建Flume Agent配置文件flume-netcat-logger.conf, 在flume目录下创建job文件夹并进入job文件

mkdir job
cd job/

# 创建Flume Agent配置文件flume-netcat-logger.conf
sudo gedit flume-netcat-logger.conf     # 这个gedit这个编辑器只能在本地窗口打开,远程的话用vim

# 文件中添加下面内容
# Name the components on this agent 
a1.sources = r1 
a1.sinks = k1 
a1.channels = c1

# Describe/configure the source 
a1.sources.r1.type = netcat 
a1.sources.r1.bind = localhost 
a1.sources.r1.port = 44444

# Describe the sink 
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory 
a1.channels.c1.type = memory 
a1.channels.c1.capacity = 1000 
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel 
a1.sources.r1.channels = c1 
a1.sinks.k1.channel = c1

开启flume的监听端口

cd /opt/bigdata/flume/flume1.9

bin/flume-ng agent --conf conf/ --conf-file job/flume-netcat-logger.conf --name a1 -Dflume.root.logger=INFO,console
# 或者简单一点的这个
bin/flume-ng agent -c conf/ -n a1 -f job/flume-netcat-logger.conf -Dflume.root.logger=INFO,console

这里又报了一个错误:找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty, 这里的原因据说是版本不兼容的问题,需要改个地方:

 vim bin/flume-ng

把这个地方改了(加上红框里面的内容即可):
在这里插入图片描述

使用netcat工具向本机的44444端口发送内容

nc localhost 44444

测试结果如下:

在这里插入图片描述

当然也可以实时监控单个追加文件,多个追加文件到HDFS等,这样就能把日志里的数据采集出来了。 不过flume-netcat-logger.conf里面的配置内容要改。 这些操作这里不演示了,具体可以参考其他的文章,这些东西等具体用到再研究。

好了,关于日志采集的两个工具也安装完毕, 下面再简单的整理一下master上安装anaconda环境并配置远程jupyter连接pyspark,还有redis的安装搭建过程, 有了这一套环境,就可以搞后面的推荐系统任务了, 还有最后一篇,继续Rush! 😉

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值