Chukwa开源的数据收集和分析系统——Chukwa来处理
优采云 发布时间: 2021-08-09 22:18Chukwa开源的数据收集和分析系统——Chukwa来处理
文章系列的前三篇文章介绍了分布式存储计算系统Hadoop和Hadoop集群的构建、Zookeeper集群的构建、HBase的分布式部署。当 Hadoop 集群数量达到 1000+ 时,集群本身的信息会大大增加。 Apache 开发了一个开源的数据采集和分析系统——Chukwa 来处理来自 Hadoop 集群的数据。 Chukwa 有几个非常吸引人的特点:结构清晰,部署简单;采集的数据类型广泛,可扩展性强;它与 Hadoop 无缝集成,可以采集和组织海量数据。
1 Chukwa 简介
在 Chukwa 的官网上,Chukwa 是这样描述的: Chukwa 是一个开源的数据采集系统,用于监控*敏*感*词*分布式系统。它建立在 HDFS 和 Map/Reduce 框架之上,并继承了 Hadoop 出色的可扩展性和健壮性。在数据分析方面,楚科瓦拥有一套灵活而强大的工具,可用于监控和分析结果,以更好地利用采集到的数据结果。
为了更简单直观地展示楚克瓦,我们先来看一个假想的场景。假设我们有一个很大的规模(它总是涉及到Hadoop...)网站,网站每天生成大量的日志文件,采集和分析这些日志文件并不容易,读者可能会认为,Hadoop是挺适合做这种事情的,很多大的网站都在用,那么问题是如何采集散落在各个节点上的数据,如果采集到的数据有重复数据如何处理,如何与Hadoop集成如果自己编写代码来完成这个过程,会耗费很多精力,难免会引入bug。现在是我们楚克瓦发挥作用的时候了。 Chukwa 是一个开源软件,有很多聪明的开发者贡献了他们的智慧。它可以帮助我们实时监控各个节点上日志文件的变化,将文件内容增量写入HDFS,还可以去除数据重复、排序等,此时Hadoop从HDFS获取的文件已经是SequenceFile了。没有任何转换过程,Chukwa 帮助我们完成了中间复杂的过程。是不是很省心?这里我们只是举一个应用实例,它也可以帮助我们监控来自Socket的数据,甚至执行指定的命令获取输出数据等,具体请参考Chukwa官方文档。如果这些还不够,我们还可以定义自己的适配器来完成更高级的功能。
2 Chukwa 架构
Chukwa 旨在为分布式数据采集和大数据处理提供灵活而强大的平台。该平台不仅现在可用,而且能够与时俱进地使用更新的存储技术(如 HDFS、HBase 等)。当这些存储技术成熟时。为了保持这种灵活性,Chukwa 被设计为采集和处理分层管道,每个级别之间有一个非常清晰和狭窄的接口。下图是Chukwa架构*敏*感*词*:
主要组件有:
1.Agents:负责采集最原创的数据发送给Collectors
2. Adaptors:采集数据的直接接口和工具,一个Agent可以管理多个Adaptors采集的数据
3. Collectors:负责采集Agent发送的数据并定期写入集群
4.Map/Reduce Jobs:定时启动,负责集群内数据的分类、排序、去重、合并
5.HICC(Hadoop基础设施维护中心)负责数据展示
3 主要部件的具体设计
3.1 适配器、代理
在每条数据的生成端(基本上在集群中的每一个节点上),Chukwa使用一个Agent来采集它感兴趣的数据。每一种数据都由一个Adaptor来实现,数据的类型(数据模型)在相应的配置中指定。 Chukwa 默认为以下常用数据源提供了相应的适配器:命令行输出、日志文件和 httpSender 等,这些适配器会定期运行(例如每分钟读取 df 结果)或事件驱动执行(例如内核中的错误日志)。如果这些 Adapter 不够用,用户可以很容易地自己实现一个 Adapter 来满足他们的需求。
为了防止数据采集上的Agent出现故障,Ahukwa的Agent使用了所谓的“看门狗”机制,自动重启终止的数据采集进程,防止原创数据丢失。
另一方面,对于重复的采集 数据,它们会在 Chukwa 的数据处理过程中自动去重。这样,对于关键数据,同一个Agent可以部署在多台机器上,从而实现容错功能。
3.2 采集器
agent采集收到的数据存储在hadoop集群上。 hadoop集群擅长处理少量大文件,而处理大量小文件不是它的强项。针对这种情况,chukwa 设计了采集器的角色,将数据部分合并,然后写入集群,防止大量小文件。文件写入。
另一方面,为了防止采集器成为性能瓶颈或单点,导致故障,chukwa允许和鼓励设置多个采集器,代理从采集器列表中随机选择一个采集器来传输数据如果一个采集器失败或忙碌,只需切换到下一个采集器。这样可以实现负载均衡。实践证明,多个采集器的负载几乎是均匀的。
3.3 解复用器,存档
集群上的数据通过 map/reduce 作业进行分析。在 map/reduce 阶段,chukwa 提供了两种内置的作业类型,demux 和归档任务。
demux 作业负责数据的分类、排序和去重。在代理部分,我们提到了数据类型(DataType?)的概念。采集器写入集群的数据有自己的类型。 demux 在作业执行过程中,通过配置文件中指定的数据类型和数据处理类进行相应的数据分析工作。一般对非结构化数据进行结构化,提取其中的数据属性。因为demux的本质是map/reduce job,所以我们可以根据自己的需要开发自己的demux job,进行各种复杂的逻辑分析。 chukwa 提供的 demux 接口可以很容易地用 java 语言进行扩展。
归档作业负责合并相同类型的数据文件。一方面,它确保相同类型的数据都放在一起以供进一步分析。另一方面减少了文件数量,减轻了hadoop集群的存储压力。
3.4 数据库管理员
放置在集群上的数据可以满足数据的长期存储和大数据量的计算,但不便于展示。为此,楚科瓦做了两个努力:
1. 使用mdl语言将集群上的数据提取到mysql数据库中。对于过去一周的数据,数据完全保存。一周以上的数据按照现在数据的时间长短进行稀释。数据越长。 , 保存数据的时间间隔越长。使用mysql作为数据源显示数据。
2.使用hbase或类似技术将索引数据直接存储在集群上
直到chukwa0.4.0版本,chukwa使用第一种方法,但第二种方法更优雅,更方便。
3.5 hicc
hicc 是chukwa 的数据显示终端的名称。在显示方面,chukwa 提供了一些默认的数据显示小部件。可以使用“列表”、“曲线图”、“多曲线图”、“直方图”、“面积图”来显示一种或多种类型的数据,供用户直观的数据趋势显示。而且,在hicc显示端,对不断产生的新数据和历史数据采用robin策略,防止数据的不断增长增加服务器压力,在时间轴上可以“稀释”数据。长期数据显示
本质上hicc是jetty实现的web服务器,内部使用jsp技术和javascript技术。各种需要显示的数据类型和页面布局都可以通过简单的拖拽实现,对于更复杂的数据显示方式,可以使用sql语言来组合各种需要的数据。如果这不符合需求,不要害怕,只需手动修改其jsp代码即可。
3.6 其他数据接口
如果对原创数据有新的需求,用户也可以通过map/reduce作业或者pig语言直接访问集群上的原创数据,生成想要的结果。 Chukwa 还提供了命令行界面,可以直接访问集群上的数据。
3.7 默认数据支持
对于集群中每个节点的CPU使用率、内存使用率、硬盘使用率、整个集群的平均CPU使用率、整个集群的内存使用率、整个集群的存储使用率、数量的变化集群文件的数量,作业数量的变化等hadoop相关数据,从采集到展示的整套进程,chukwa提供了内置支持,你只需要配置一下就可以使用了。可以说是相当方便了。
由此可见,chukwa 为数据生成、采集、存储、分析、展示的整个生命周期提供了全面的支持。下图展示了 Chukwa 的完整架构:
4 Chukwa 到底是什么?
4.1 chukwa 不是什么
1. chukwa 不是一个独立的系统。在单个节点上部署chukwa系统基本上没有用。 Chukwa 是一个基于 Hadoop 构建的分布式日志处理系统。也就是说,在搭建chukwa环境之前,需要先搭建一个Hadoop环境,然后在Hadoop的基础上搭建chukwa环境。这种关系也可以从后来的chukwa推导出来,从架构图可以看出。这也是因为chukwa的假设是要处理的数据量在T级别。
2. chukwa 不是实时错误监控系统。在解决这个问题上,ganglia、nagios等系统都做得很好,这些系统对数据的敏感度可以达到二级。 chukwa 分析的是 数据处于分钟级别。它认为集群整体CPU使用率等数据,几分钟后获取就不是问题。
3. chukwa 不是一个封闭的系统。虽然chukwa自带了很多针对hadoop集群的分析项,但这并不是说它只能监控和分析hadoop。chukwa提供了大量数据的日志数据采集,一套完整的存储、分析解决方案和框架和显示。在这种类型的数据生命周期的各个阶段,chukwa 提供了近乎完美的解决方案,这也可以从其架构上看出。
4.2 什么是chukwa
上一节说了很多 chukwa 不是什么,我们来看看 chukwa 是专门用来做什么的?具体来说,chukwa致力于以下几个方面:
1. 一般来说,chukwa可以用来监控*敏*感*词*(2000多个节点,每天产生的数据量在T级)hadoop集群的整体运行情况,并分析它们的日志
2. 对于集群用户:chukwa 显示他们的作业运行了多长时间,它们占用了多少资源,有多少资源可用,作业失败的原因以及读写操作在哪个节点上退出问题.
3.集群运维工程师:chukwa展示集群硬件错误、集群性能变化、集群资源瓶颈。
4. 对于集群管理者:chukwa 显示了集群的资源消耗和集群操作的整体执行情况,可以用来辅助预算和集群资源协调。
5. 集群开发者:chukwa 展示了集群中的主要性能瓶颈和频繁出现的错误,让您可以专注于解决重要问题。
5 Chukwa 部署和配置
5.1 前期准备
Chukwa是部署在Hadoop集群上的,所以前期需要安装部署Hadoop集群,包括SSH无密码登录、JDK安装等,具体可以参考本系列其他博文“一Hadoop系列丛书:Hadoop集群构建》等。
Hadoop集群架构如下:1个Master,1个Backup(主机备用),3个Slaves(由虚拟机创建)。节点IP地址:
rango(Master) 192.168.56.1 namenode
vm1(Backup) 192.168.56.101 secondarynode
vm2(Slave1)192.168.56.102 数据节点
vm3(Slave2)192.168.56.103 数据节点
vm4(Slave3)192.168.56.104 数据节点
5.2 安装 Chukwa
从官网只能下载chukwa-incubating-src-0.5.0.tar.gz,最新版本的Chukwa可以到~eyang/chukwa-0.@下载5.0-rc0/ 版本 chukwa-incubating-0.5.0.tar.gz。
解压并重命名并移动到 /usr 目录:
tar zxvf chukwa-incubating-0.5.0.tar.gz; mv chukwa-incubating-0.5.0 /usr/chukwa
需要在每个被监控的节点上维护一份 Chukwa 的副本(采集数据信息),每个节点都会运行一个采集器。配置完成后,可以通过scp命令复制到集群的各个节点。
5.3 配置 Chukwa
5.3.1 配置环境变量
编辑 /etc/profile 并添加以下语句:
#设置chukwa路径
导出 CHUKWA_HOME=/usr/chukwa
导出 CHUKWA_CONF_DIR=/usr/chukwa/etc/chukwa
导出路径=$PATH:$CHUKWA_HOME/bin:$CHUKWA_HOME/sbin:$CHUKWA_CONF_DIR
5.3.2 配置Hadoop和HBase集群
首先将 Chukwa 文件复制到 hadoop:
mv $HADOOP_HOME/conf/log4j.properties $HADOOP_HOME/conf/log4j.properties.bak
mv $HADOOP_HOME/conf/hadoop-metrics2.properties $HADOOP_HOME/conf/hadoop-metrics2.properties.bak
cp $CHUKWA_CONF_DIR/hadoop-log4j.properties $HADOOP_HOME/conf/log4j.properties
cp $CHUKWA_CONF_DIR/hadoop-metrics2.properties $HADOOP_HOME/conf/hadoop-metrics2.properties
cp $CHUKWA_HOME/share/chukwa/chukwa-0.5.0-client.jar $HADOOP_HOME/lib
cp $CHUKWA_HOME/share/chukwa/lib/json-simple-1.1.jar $HADOOP_HOME/lib
然后启动HBase集群,设置HBase,在HBase中创建数据存储所需的表,表模式已经搭建完成,直接通过hbase shell导入即可:
bin/hbase 外壳
5.3.3 配置采集器
设置 Chukwa 的环境变量,编辑 $CHUKWA_CONF_DIR/chukwa-env.sh 文件:
导出JAVA_HOME=/usr/java/jdk1.7.0_45
#export HBASE_CONF_DIR="${HBASE_CONF_DIR}"
#export HADOOP_CONF_DIR="${HADOOP_CONF_DIR}"
#export CHUKWA_LOG_DIR=/tmp/chukwa/log
#export CHUKWA_DATA_DIR="${CHUKWA_HOME}/data"
注意:设置第一个java的home目录,然后注释掉后面四个。备注HBASE_CONF_DIR和HADOOP_CONF_DIR,因为agent只用来采集数据,所以不需要HADOOP的参与。注释掉 CHUKWA_PID_DIR 和 CHUKWA_LOG_DIR。如果没有注释,则指定位置在/tmp临时目录下,会导致PID和LOG文件无故被删除。会导致后续操作异常。注释后系统会使用默认路径,PID和LOG文件默认创建在Chukwa安装目录下。
当需要多台机器作为采集器时,需要编辑$CHUKWA_CONF_DIR/collectors文件:
192.168.56.1
192.168.56.101
192.168.56.102
192.168.56.103
192.168.56.104
$CHUKWA_CONF_DIR/initial_Adaptors 文件主要用于设置 Chukwa 监控哪些日志,以及监控的方式和频率。使用默认配置即可,如下
添加 sigar.SystemMetrics SystemMetrics 60 0
添加 SocketAdaptor HadoopMetrics 9095 0
添加 SocketAdaptor Hadoop 9096 0
添加 SocketAdaptor ChukwaMetrics 9097 0
添加 SocketAdaptor JobSummary 9098 0
$CHUKWA_CONF_DIR/chukwa-collector-conf.xml 维护着 Chukwa 的基本配置信息。我们需要使用这个文件来确定HDFS的位置:如下:
writer.hdfs.filesystem
hdfs://192.168.56.1:9000/
要转储到的 HDFS
然后可以通过以下设置指定sink数据的地址:
chukwaCollector.outputDir
/chukwa/logs/
chukwa 数据*敏*感*词*目录
chukwaCollector.http.port
8080