搜索日志实时展示项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iez0Bcep-1639467720594)(C:\Users\yfy\AppData\Roaming\Typora\typora-user-images\image-20211213083809254.png)]
项目数据写入过程:
使用create_log.sh 动态生成数据 -> 导入到 hadoop01上的flume -> hadoop03上的flume -> kafka ->
spark(汇聚数据) -> mysql ;
项目数据读取(展示)过程:
mysql -> 服务端(一个maven项目) -> 前端(echarts可视化软件进行展示)
一、数据写入环境搭建
数据源准备
1.数据源地址 :http://www.sogou.com/labs/resource/q.php
2.数据处理
模拟数据实时动态生成效果,为后续数据处理及展示提供源源不断的数据
首先在hadoop01家目录下创建一个search目录,将老师发的数据SogouQ.reduced拷贝到目录中,以下所有操作都在search目录中进行
2.1处理乱码问题
iconv -f gb18030 -t utf-8 SogouQ.reduced > sogou.csv
2.2创建create_log.sh文件
if [ $# -ne 3 ] ; then
echo "usage $0 src_file dst_file frequence"
exit
fi
while read line ;do echo $line | tr ' ' ',' >> $2 ; sleep $3 ; done < $1
2.3动态生成数据
#增加create_log.sh执行权限
chmod +x create_log.sh
#执行生成动态数据的脚本 注意在/home/hadoop/search/目录下执行#
nohup ./create_log.sh sogou.csv sogou.input 0.1 &
#查看动态生成的数据
tail -f sogou.input
nohup命令操作
#nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
#nohup命令将日志输出到nohup.out文件中
#使用fg命令可以将nohup执行的进程显示到控制台
fg
#fg命令执行后,可以使用ctrl+c 终止这个进程
1.flume安装配置
flume安装完后要配置环境变量
在 .bashrc中添加
export FLUME_HOME=/usr/local/flume
export PATH=$PATH:$FLUME_HOME/bin
source .bashrc 生效
hadoop01上的操作
创建/home/hadoop/search/flume目录,在flume目录中创建 flume-sogou.conf
将 /home/hadoop/search/sogou.input 的数据源源不断地传输到 hadoop03:4141端口
# agent name a1
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/search/sogou.input
a1.sources.r1.shell = /bin/bash -c
# sink
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = hadoop03
a1.sinks.k1.port = 4141
# channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
#
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
cd /home/hadoop/search/flume/
nohup flume-ng agent --name a1 --conf-file flume-sogou.conf &
#查看flume是否正常启动
ps aux|grep flume-sogou.conf
hadoop03
将flume的数据传输到kafka中
创建/home/hadoop/search/flume目录,在flume目录中创建flume-kafka.conf 文件
# agent name a3
a3.sources = r1
a3.sinks = k1
a3.channels = c1
# source
a3.sources.r1.type = avro
a3.sources.r1.bind = hadoop03
a3.sources.r1.port = 4141
# sink
a3.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a3.sinks.k1.kafka.bootstrap.servers = hadoop01:9092,hadoop02:9092,hadoop03:9092
a3.sinks.k1.kafka.topic = weblog
a3.sinks.k1.parseAsFlumeEvent = false
# channel
a3.channels.c1.type = memory
a3.channels.c1.capacity = 10000
a3.channels.c1.transactionCapacity = 10000
#
a3.sources.r1.channels = c1
a3.sinks.k1.channel = c1
cd /home/hadoop/search/flume/
nohup flume-ng agent --name a3 --conf-file flume-kafka.conf &
#查看flume是否正常启动
ps aux|grep flume-kafka.conf
2.kafka安装
要想kafka正常运行,首先要确定zookeeper是正常运行的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9RrSqKc2-1639467720598)(C:\Users\yfy\AppData\Roaming\Typora\typora-user-images\image-20211213113611286.png)]
查看三台机器上是否有QuorumPeerMain进程,没有就把zookeeper启动起来,上图就是zookeeper没有启动,kafka连接zookeeper不成功的例子。
在所有机器上进行环境变量配置 .bashrc文件
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source .bashrc
hadoop02
/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &
hadoop03
/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &
查看是否有数据从hadoop03上的flume传过来
kafka-console-consumer.sh --zookeeper hadoop01:2181 --topic weblog
3.spark安装配置
3.1初识spark
spark是一个基于内存的快速、通用、可扩展的大数据分析技术引擎,相比于MapReduce计算框架,它计算速度更快、编程简单、适用于实时处理场景。
观看 https://www.bilibili.com/video/BV11A411L7CK?p=1 中001-003集视频(15分钟左右),对spark有个初步了解
3.2.spark安装
将spark 2.4.0版本安装到hadoop01节点,给同学们提供了如下安装包,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cYZFpgJk-1639467720600)(C:\Users\yfy\AppData\Roaming\Typora\typora-user-images\image-20211214112821552.png)]
3.2.1.设置依赖环境
#spark2.4.0版本依赖包括 scala 2.11 ,java jdk1.8
#1.首先要安装scala 2.11
sudo apt install scala
#2.验证scala是否安装成功,执行scala命令,看输出是否显示
Welcome to Scala version 2.11.6 (OpenJDK 64-Bit Server VM, Java 1.8.0_292).
Type in expressions to have them evaluated.
Type :help for more information.
#3.按照jdk1.8,注意之前我们安装的是jdk1.7,所以要将jdk的环境变量改成1.8(这一步非常重要)
#将jdk1.8的包解压安装到/usr/lib/jvm/
#将.bashrc中的jdk环境变量切换成jdk1.8
#使用source命令生效新生成的环境变量
3.2.2.spark安装
#压缩包解压
sudo tar xzvf spark-2.4.0-bin-without-hadoop.tgz -C /usr/local/
#将解压后的目录修改为 /usr/local/spark
#将/usr/local/spark目录所属用户和用户组改为hadoop
#设置spark环境变量,也就是能让spark在任意位置执行
#文件配置
/usr/local/spark/conf 下的spark-env.sh 中增加如下内容(确保hadoop环境变量没问题,也就是任意位置可以执行hadoop命令)
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
#将如下依赖包拷贝到 /usr/local/spark/jars中
kafka-clients-0.10.2.0.jar
spark-sql-kafka-0-10_2.11-2.4.0.jar
spark-streaming-kafka-0-10_2.11-2.4.0.jar
mysql-connector-java-5.1.40-bin.jar
#设置日志级别,在/usr/local/spark/目录中执行如下命令
cp log4j.properties.template log4j.properties
#修改 log4j.properties内容中
log4j.rootCategory=INFO, console 改成 log4j.rootCategory=WARN, console
#命令执行
spark-submit --class org.apache.spark.examples.SparkPi /usr/local/spark/examples/jars/spark-examples_2.11-2.4.0.jar 100
4.mysql安装与表创建
#安装mysql的服务端,客户端
sudo apt install mysql-server mysql-client
#启动mysql服务端
sudo systemctl start mysql
#登录mysql服务器
mysql -uroot -proot
#创建数据库stat
#创建表 webCount,包含一个int类型的count字段,一个varchar类型的titleName字段,字符集CHARSET设置为utf8
s_2.11-2.4.0.jar 100
### 4.mysql安装与表创建
```shell
#安装mysql的服务端,客户端
sudo apt install mysql-server mysql-client
#启动mysql服务端
sudo systemctl start mysql
#登录mysql服务器
mysql -uroot -proot
#创建数据库stat
#创建表 webCount,包含一个int类型的count字段,一个varchar类型的titleName字段,字符集CHARSET设置为utf8