MapReduce:计算Job运行时的CPU与内存平均利用率

本文详细介绍了如何在Linux环境下安装配置Nagios和Cacti,并通过NPC插件实现两者之间的整合,以便更好地进行系统监控和图表展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

的视频课程

Nagios+Cacti模块——Nagios+Cacti 搭建及整合(一)
2013-07-21 14:13:47
标签: ndo2db
版权声明:原创作品,谢绝转载!否则将追究法律责任。

注意:这里默认关闭了Selinux(生产环境也是关的)以及关闭了iptables。如有开启的需要,请根据网络酌情添加相关内容

遇到问题:公司服务器需实现监控及报警等功能

解决问题:使用nagios+cacti

准备环境:

为以后的配置搭建安装环境

yum install –y http* mysql-devel mysql-server php-* net-snmp-* gd gd-devel perl-libwww-perl

一:Nagios环境的搭建

注:所有的tar包都放置在/soft下。

1.安装nagios

1
2
3
4
5
6
7
cd /soft
tar zxf nagios-cn- 3.3 . 2 .tar.gz
cd nagios-cn- 3.2 . 3
./configure --prefix=/ var /www/html/nagios
make all
useradd nagios
make install && make install-init&& make install-commandmode && make install-config &&make install-webconf


2.增加nagios登陆认证文件,

htpasswd -c /var/www/html/nagios/etc/htpasswd.users control

3. 安装插件:

1
2
3
4
5
cd /soft
tar -zvxf nagios-plugins- 1.4 . 16 .tar.gz
cd nagios-plugins- 1.4 . 16
./configure --prefix=/ var /www/html/nagios/ make&&makeinstall
make && make install

4.将运行Apache的用户添加到nagios组里,这样Apache才有权限读取文件

usermod -G nagios apache    ##将apache用户加到nagios组。

5.阶段测试

1
2
3
4
chown nagios.nagios / var /www/html/nagios/  -R
service httpd start
chkconfig httpd on
/etc/init.d/nagios start


二:cacti环境的搭建

1.rrdtool的安装,这里需要安装的是:rrdtool,rrdtool-devel.rrdtool-perl,rrdtool-php,下载完成后,本地yum安装

yum -y install rrdtool*

yum -y installperl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker (此步骤没有,会导致perl Makefile 无法运行)

service mysqld start

2.配置snmp

vim /etc/snmp/snmpd.conf

#    修改3项  127.0.0.1 、 all、启用项 (下图是修改后的图)

启动snmp服务:

service snmpd start

3.安装cacti

wget http://www.cacti.net/downloads

cd /soft

tar zxvf cacti-0.8.7h.tar.gz

mv cacti-0.8.7h /var/www/html/cacti

4.创建cacti数据库

#注意导入cacti.sql时该文件的路径

1
2
3
4
5
6
7
8
mysql
mysql> create database cacti;
mysql> grant all privileges on cacti.* to cacti@localhost identified by 'cacti' with grant option;
mysql> grant all privileges on cacti.* to cacti@ 127.0 . 0.1 identified by 'cacti' with grant option;
mysql> use cacti;
mysql> source / var /www/html/cacti/cacti.sql;
mysql> flush privileges;
mysql> \q  然后回车退出即可

6.配置cacti以连接数据库 ,分别编辑两个.php文件,以适应环境,修改内容相同。

vim /var/www/html/cacti/include/config.php

vim /var/www/html/cacti/include/global.php  

$database_default = "cacti";       //默认数据库名

$database_hostname =  "localhost";         //主机名

$database_username =  "cacti";              //登陆数据库用户名

$database_password = "cacti";              //登陆数据库密码

$database_port = "3306";

修改cacti的系统时间

cacti默认是以美国的时间为准的,监测的时候要纠正到我朝的时区

vi /var/www/html/cacti/include/global.php 文件,在里面加入一行

date_default_timezone_set(‘Asia/Chongqing’);


useradd -r -M cacti

chown -R cacti /var/www/html/cacti/poller.php

chown -R cacti /var/www/html/cacti/rra

chown -R cacti /var/www/html/cacti/log

7.在cacti用户下创建计划任务以画图

su cacti

bash-4.1$ crontab –e

*/2 * * * * php /var/www/html/cacti/poller.php > /dev/null 2>&1


exit  

解决php的It is not safe to rely on the system’stimezone settings的问题

3Vim /etc/php.ini 添加如下信息:

4date.timezone= “Asia/Chongqing”

8.确保服务器的selinux是不不关闭状态,使用setenforce 0 关闭,getenforce查看状态,或者修改配置文件/etc/selinux/config中“SELINUX=disable”,然后从web页面启动cacti,安装,并查看图形化界面,cacti界面的初始登录帐号:

在浏览器中输入: http://ip/cacti

User:admin

Passwd:admin

登录后,系统会强制要求修改密码操作的

三:整合Nagios与Cacti

1.下载并安装ndoutils

1
2
3
4
5
cd /soft
tar zxvf ndoutils- 1 .4b9.tar.gz
cd ndoutils- 1 .4b9
./configure --prefix=/ var /www/html/nagios/--enable-mysql --disable-pgsql -- with -mysql-inc=/usr/ include /mysql -- with -mysql-lib=/usr/lib/mysql
make

2.准备配置文件

1
2
3
4
5
6
7
8
9
10
cp -vsrc/{ndomod-3x.o,ndo2db-3x,file2sock,log2ndo} / var /www/html/nagios/bin
cd db
./installdb -ucacti -pcacti -hlocalhost -dcacti
cd ..
cp -vconfig/{ndo2db.cfg-sample,ndomod.cfg-sample} / var /www/html/nagios/etc
mv / var /www/html/nagios/etc/ndo2db.cfg-sample/ var /www/html/nagios/etc/ndo2db.cfg
mv / var /www/html/nagios/etc/ndomod.cfg-sample/ var /www/html/nagios/etc/ndomod.cfg
chmod 644 / var /www/html/nagios/etc/ndo*
chown nagios:nagios / var /www/html/nagios/etc/*
chown nagios:nagios / var /www/html/nagios/bin/*

3.修改nagios.cfg配置文件以适应当前环境

vim /var/www/html/nagios/etc/nagios.cfg

# 在文件中添加: 添加以下一行(注意下面只能是一行,否则nagios启动报错)broker_module=/var/www/html/nagios/bin/ndomod-3x.o config_file=/var/www/html/nagios/etc/ndomod.cfg

中间用空格

5# 检查

6     event_broker_options=-1     ## 为Nagios开启event broker,默认无需修改

4.修改ndo2db.cfg以适应当前环境

vim /var/www/html/nagios/etc/ndo2db.cfg

7 # 确保下列内容为唯一项

socket_type=tcp

db_servertype=mysql

db_host=127.0.0.1

db_port=3306

db_name=cacti

db_prefix=npc_

db_user=cacti

db_pass=cacti

5.修改ndomod.cfg以适应当前环境

vim /var/www/html/nagios/etc/ndomod.cfg

16# 确保下列项的唯一内容为

  output_type=tcpsocket

  output=127.0.0.1

#output=/var/www/html/nagios//var/ndo.sock

buffer_file=/var/www/html/nagios/var/ndomod.tmp

6.为ndo2db添加启动进程

cp /soft/ndoutils-1.4b9/daemon-init  /etc/init.d/ndo2db

vim /etc/init.d/ndo2db

19# 检查里面的路径确保不会出现“//",并将Ndo2dbBin修改成下面的值:

             Ndo2dbBin=/var/www/html/nagios/bin/ndo2db-3x

           Ndo2dbCfgFile=/var/www/html/nagios/etc/ndo2db.cfg

           Ndo2dbVarDir=/var/www/html/nagios/var

chmod +x /etc/init.d/ndo2db  

7.启动守护进程与nagios

/var/www/html/nagios/bin/ndo2db-3x -c/var/www/html/nagios/etc/ndo2db.cfg

【注意这里如果启动报错,则是因为未安装mysql-devel导致,故提前安装】

tail -20 /var/log/messages    ## 查看其中是否有错误出现。如无报错请继续

service nagios start

四:安装npc,以在Cacti中展现Nagios

1.先安装cacti扩展模块

1
2
3
4
5
6
7
wge thttp: //www.cacti.net/downloads/pia/cacti-plugin-0.8.7h-PA-v3.0.tar.gz
cd /soft
tar xvf cacti-plugin- 0.8 .7h-PA-v3. 0 .tar.gz
cp -R cacti-plugin-arch/* / var /www/html/cacti/
cd / var /www/html/cacti/
mysql -ucacti -pcacti cacti < pa.sql
patch -p1 -N <cacti-plugin- 0.8 .7h-PA-v3. 0 .diff

patch成功后的界面如下图

## 为cacti配置文件打补丁的时候注意在为include/config.php打补丁的时候有可能它将include/config.php.dist给打补丁了,我们只需要手动加入下面的内容即可。

vim include/config.php

# 修改(或新加入)为

 $url_path = "/cacti/";

如有错误,请查看apache日志  /var/log/httpd/error_log

从web进入cacti,启用cactiplugin扩展

打开插件管理功能:

打开“Console----> User Management----> admin”然后在“Realm Permissions”

项卡中勾选“Plugin Management”,然后点击Save 进行保存!  

此时我们会在控制台---> Configuration 选项卡下多了一个Plugin Management 选项卡,到此cacti 架构扩展完成!!


2.安装npc

1
2
3
4
cd /soft
tar zxvf npc- 2.0 . 4 .tar.gz
mv npc / var /www/html/cacti/plugins/
vim / var /www/html/cacti/ include /config.php

加入:

        $plugins[] = 'npc';


3.修改配置文件以让npc读取到新的数据。

vim /var/www/html/nagios/etc/ndo2db.cfg

    db_prefix=npc_

4 写一个php的测试页面

vi /var/www/html/test.php

完成之后,在网页测试http://ip/test.php

从Web进入Cacti,确保正确使用npc选项。(一定记得要启用npc,否则下面更新mysql的表结构,会报没有表)


5.  修改mysql中的表结构:

1
2
3
4
5
6
7
8
9
10
mysql
use cacti;
alter table npc_eventhandlers add long_outputTEXT NOT NULL default '' after output;
alter table npc_hostchecks add long_outputTEXT NOT NULL default '' after output;
alter table npc_hoststatus add long_outputTEXT NOT NULL default '' after output;
alter table npc_notifications add long_outputTEXT NOT NULL default '' after output;
alter table npc_servicechecks add long_outputTEXT NOT NULL default '' after output;
alter table npc_servicestatus add long_outputTEXT NOT NULL default '' after output;
alter table npc_statehistory add long_outputTEXT NOT NULL default '' after output;
alter table npc_systemcommands addlong_output TEXT NOT NULL default '' after output;

6.重启ndo2db进程,重新加载配置文件重启nagios服务。

1
2
service ndo2db restart
     service nagios restart


7.在Web上配置NPC以使之正常读取工作。

在Settings->npc中 ,勾上Remote Commands

然后在console----settings-----NPC填入以下

Nagios Command File Path= /var/www/html/nagios/var/rw/nagiosNaNd

Nagios URL=你的地址(http://localhost/nagios/)

接下来刷新npc就可以看到数据啦:

由于之前新建了htpasswd的用户,需给该用户查查nagios的一些状态信息

/var/www/html/nagios/etc/cgi.cfg 所有nagiosadmin后面都加上你添加的新用户,如:


错误汇集:

1. 启动ndo2db报错

解决:  yum -y install mysql-devel

2. 报错, perl Makefile.pl

解决: yum -y  install perl-ExtUtils-CBuilderperl-ExtUtils-MakeMaker

3. mail 命令没有,无法使用mail命令发送邮件

 yum -y install mailx

完成之后的效果:http://ip/nagios   可以访问到nagios

http://ip/cacti/  访问到cacti ,也可以从cacti界面的npc点到nagios



本文出自 “濛sir的积累” 博客,谢绝转载!

文章评论

 
2014-08-12 10:35:16
到web安装cacti的时候,一直报500的错误。 求助。

2014-08-12 10:41:57
回复 w616054: [1楼]

已经找到原因了,原来是php-mysql没装。

2014-08-15 16:01:50
回复 w616054: [2楼]

ok

2014-09-24 18:11:13
Error: Failed to load module '/usr/local/nagios/bin/ndomod-3x.o'. 什么问题??

2015-04-13 11:47:54
强大啊兄弟,是了你的第二篇文章怎么没有看到啊?

2015-05-27 14:54:41
整合后npc那块,nagios status显示off,怎么解决?

2015-10-29 13:18:57
/var/www/html/nagios/bin/ndo2db-3x -c /var/www/html/nagios/etc/ndo2db.cfg
Failed to obtain lock on file /var/www/html/nagios/--enable-mysql/var/ndo2db.lock: No such file or directory
: No such file or directory
请问这个怎么解决呢

 
WOTA全球架构与运维技术峰会,2017直升¥3600!7折优惠中!立减1100元!
WOTA全球架构与运维技术峰会,2017直升¥3600!7折优惠中!立减1100元!
昵  称:
登录  快速注册
验证码:

点击图片可刷新验证码请点击后输入验证码博客过2级,无需填写验证码

内  容:

同时赞一个

分享至一键收藏,随时查看,分享好友!
# MapReduce计算慢的深度分析及优化方案 ## 一、核心性能瓶颈分析 ### 1. Shuffle阶段瓶颈 - **数据倾斜**:少数Reducer处理大量数据(80/20现象) - **网络IO**:跨节点传输数据量大(平均Shuffle数据量=输入数据×膨胀系数) - **磁盘IO**:中间结果溢写频繁(默认阈值100MB) ### 2. Map阶段低效 - **GC间长**:平均GC间超过任务间的15% - **CPU利用率低**:平均低于50%的集群利用率 - **数据本地性差**:>30%的任务需要跨节点读数据 ### 3. Reduce阶段问题 - **启动过早**:Map完成前就开始拉取数据(mapreduce.reduce.slowstart.completed.maps默认0.05) - **内存不足**:频繁触发spill到磁盘(reduce.shuffle.input.buffer.percent默认0.7) ## 二、关键优化技术 ### 1. 数据倾斜解决方案 ```java // 采样+二次分发方案 Job job = Job.getInstance(conf); // 先运行采样job确定Key分布 Sampler<Text, Text> sampler = new RandomSampler<>(0.1, 10000); InputSampler.writePartitionFile(job, sampler); // 主Job使用定制分区 job.setPartitionerClass(TotalOrderPartitioner.class); ``` ### 2. Shuffle优化参数 ```xml <!-- yarn-site.xml --> <property> <name>mapreduce.reduce.memory.mb</name> <value>4096</value> <!-- 建议为Container内存的70% --> </property> <property> <name>mapreduce.task.io.sort.mb</name> <value>512</value> <!-- 不超过JVM堆的50% --> </property> ``` ### 3. 计算模式优化 | 模式 | 适用场景 | 配置示例 | |------|----------|----------| | Map-only | 无聚合需求 | setNumReduceTasks(0) | | Combiner | 可本地聚合 | job.setCombinerClass(MyReducer.class) | | In-Mapper | 小数据聚合 | 在map()中维护HashMap | ## 三、性能对比指标 优化前 | 优化后 | 提升幅度 ---|---|--- Shuffle数据量10GB | Shuffle数据量2GB | 5x Reducer执行间300s | Reducer执行间60s | 5x 任务长600s | 任务长180s | 3.3x ## 四、高级优化方案 ### 1. 基于Tez的DAG优化 ```java // 构建DAG执行计划 DAG dag = new DAG("WordCount"); Vertex mapVertex = new Vertex("map", MapProcessor.class); Vertex reduceVertex = new Vertex("reduce", ReduceProcessor.class); dag.addVertex(mapVertex).addVertex(reduceVertex); dag.addEdge(new Edge(mapVertex, reduceVertex)); ``` ### 2. 列式存储优化 ```sql -- ORC文件格式+谓词下推 CREATE TABLE optimized_table ( user_id STRING, cnt INT ) STORED AS ORC tblproperties ("orc.compress"="SNAPPY"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值