Linux磁盘性能监控

2020年10月14日 22点49分 没有评论

1. iostat,里面的 iowait 太高通常就出问题了。通常偏离正常值太多,而且和故障出现关联就可以怀疑了。和已知的性能极值接近,且其 mem/cpu 占用较低。“瓶颈”是:性能不满足于需求,且处于最弱一环。如果按照这个定义来说,脱离需求谈瓶颈没啥意义。iostat里看%util磁盘使用率,值越低表示磁盘活动越闲,当值非常大,达到90以上时,建议不要操作了,应该等一等,不然会很卡。

2. 看r/w 速度(这个和是ssd还是hdd有关),util,如果cpu 小于70~80,util 大于20~30,峰值可以到100,基本上就可以确定磁盘瓶颈了。可以用iotop看谁在写磁盘,lsof看在写什么文件,blktrace看到具体io操作。

3.当服务器系统性能突然低于平均应有的情况,问题可能来自在执行的进程、内存的使用率、磁盘的性能、网络流量和CPU 的压力。在预算短缺的今天,理解如何优化系统性能比以往任何时候都重要。 要实现它的前提是,你必须充分了解自己的计算机和网络,从而找到真正的瓶颈所在。

工作过程是:首先查看整个系统的状态,然后是检查特定的子系统。 Linux服务器进行性能监控有几种方法,每种方法都各有其优缺点。

使用SNMP等标准工具
标准及非标准工具能执行一个或多个收集、合并及传输阶段,如rstatd或SNMP工具,然而标准的rstat后台程序提供的信息是有限的,速度慢而且效率低。

内核模块
几个系统监控工程利用内核模块来存取监控数据。一般情况下,这是很有效的收集系统数据的方法。然而这种方法存在的问题是,当主内核源内有其它改变时,必须保持代码一致性。一个内核模块可能与用户想使用的其它内核模块相冲突。此外,在使用监控系统之前,用户必须获得或申请模块。

/proc虚拟文件系统
/proc虚拟文件系统是一个较快的、高效率执行系统监控的方法。使用/proc的主要缺点是必须保持代码分析与/proc 文件格式改变的同步。事实表明,Linux内核的改变比/proc 文件格式的改变要更频繁,所以,用/proc虚拟文件系统比用内核模块存在的问题要少。 /proc文件系统特点 Linux 系统向管理员提供了非常好的方法,使他们可以在系统运行时更改内核,而不需要重新引导内核系统。这是通过 /proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。不用重新启动而去看 CMOS ,就可以知道系统信息。这就是 /proc 的妙处之一。每个Linux系统根据软硬件不同/proc 虚拟文件系统的内容也有些差异。/proc 虚拟文件系统有三个很重要的目录:net,scsi和sys。Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。

分类: 科技 标签:

阿里云又给自己找了个新台阶

2020年10月13日 15点16分 没有评论

原文链接:https://zhuanlan.zhihu.com/p/258858881

前几天和几个企业家朋友聊天,聊到一个话题,疫情的冲击把2020弄的波澜起伏,但有没有给我们留下一些东西?答案是肯定的,全中国人民和所有行业,都被强制「地推」了一把数字化变革。从健康码到视频会议,从直播带货到办公协同软件,这些原本要再走不少年才能被如此广泛应用的东西,一下子被提速了。大家聊到了一个趋势,那就是「深层数字化」已经获得第一推动力。所谓的「深层」,就是指横向看每一个行业无论新旧,纵向每一个公司无论大小,他们以数字化提升效率,都将是下一个十年的必然。而最近这件事上,阿里云的一系列动作很值得聊聊。

「深层数字化」的时代说来就来 中国互联网发展20多年,但客观的说,数字化这件事,一直停留于浅层阶段。虽然在C端大量用户迅速形成了数字化的生活习惯,社交网络、信息消费、电子商务、水银泻地一般的变成了社会新常态。但在B端,这些年一直数字化的进展是很有限的,至少是非常不均衡。由于各个行业,甚至各个企业实际情况、需求、数字化场景经验的差异。并不容易找到C端那种普遍需求之上的普遍产品。再加上各个行业和企业认知程度的不同,数字化渗透的速度一直是缓慢而艰难,数字化「扫盲」、「脱贫」还有很多产业和企业没完成。这自然吸引不了更多优质创业者参与,也吸引不了资本的大力加持,怎么看都是个是个「滴水穿石」的慢功夫。但疫情是只「黑天鹅」。突然在一段时间内,让所有行业和企业被迫、强制性地体验了一次深层数字化之旅,数字化的广度(所有企业所有人)和数字化的深度(数字化的业务流和工作流,而不只是销售的数字化),都会一次大突破。

今年云栖大会,阿里巴巴集团董事会主席兼首席执行官张勇就特别分享了三个故事,都与疫情催生、助推行业数字化拐点相关。杭州的疫情防控健康信息码从第一个版本上线,到在超200个城市落地,耗时仅15天;达摩院的AI诊断技术可在20秒内对新冠疑似案例CT影响作出判读,准确率达99%;钉钉不仅在国内服务于企业员工,还成了教育领域的数字化基础架构。变革最大的阻力,就是认知的不统一。这下好了,数字化被在「深度」和「广度」同时强迫体验,确实有可能是会让更多的人和组织看到效率提升,进而数字化「上瘾」。因为一般来说,to c的产品好 3-5倍的体验才能迎来爆发,但 to B效率提升30-50% 就会被普遍采用了。今年众多资本和巨头开始重点看消费和 to B领域,核心的原因就是因为「深层数字化」的时代迅速到来,旧世界要开始重新迭代一次了。

「大爆发」还缺些什么?「风口」这个概念过去总是被误解,大家看媒体上怎么说就觉得哪个是风口。其实真正的趋势是可以推导分析的,不是只看一些现象的反向总结。 疫情只是一个加速,浅层与深层数字化的「分水岭」来首先来自于基础设施的变化。我们应该看到,经过20多年发展,数字化这件事,在基础设施层面,以及技术层面已经越来越成熟。既包括云计算 IaaS 层面上的存储、网络、芯片、云操作系统,PaaS 层面的容器、数据库,还包括很多周边技术如 5G、IoT 物联网、AI 人工智能、移动化能力等。是多个层面、多个维度的技术共同叠加。另一个变化是「大玩家」的力量。C 端飞速数字化本身也推动了一大批科技公司去自己构建基础设施,现在他们都开始对外「溢出」能力了。这些能力的溢出只是去多抢一块市场意义不大,巨头进场真正的意义是改变原有的「市场线性发展轨迹」,去做一些创业公司做不了的事情,解决不了的问题。这也是「深层数字化」趋势一个重要的指标。要爆发,要提升渗透率的发展斜率,就要解决三个关键要素——成本、易用性、个性化。还是拿着这方面做的最坚决的阿里来看,比如阿里云就是最早提出「去IOE」(IBM小型机、Oracle数据库、EMC存储)的云厂商。只有后来者才能打破原有行业的成熟成本和价格体系,把数字化的初始门槛降下来。这些针对成本的问题,确实很难被创业公司推动解决,阿里也是过去十几年的海量投入,结合自己的其他业务的能量积累,才能推动这一步。不过我觉得阿里这样的巨头,更大的贡献还是要来自于对「商业计算环境」的推动。当整个数字化时代从薄薄的一层个人计算延伸至包含一切的商业计算;从主机时代跃迁至分布式时代,算力从线下迁移至线上变成云,只是通过投入,解决基础设施便宜可用这一个层面是不够的。必须要屁股坐到更广更深的产业里,去解决「痛点问题」。

比如阿里云上半年提出的「云钉一体」,就是一个很值得关注的战略。「云钉一体」的意思,其实就是让这个已经有了众多用户,深入到众多行业的软件,升级为一个「商业操作系统」,而依托阿里云提供的超级简单的开发环境,用户自己设置应用和系统流程。打个比方就是原来的「云」都是给专业人用的,就像装了一个DOS系统,开发复杂、应用界面很难用。而钉钉现在提供了 Windows 界面,阿里云又建立了一套新的开发环境,这样更多的人可以在上面更好的「自我定制」解决数字化的问题。这可以把易用性和个性化都大幅提升上去。以往开发商业体系的应用,全权交由程序员,由此确实带来一系列麻烦。程序员不懂业务流程,每个企业、每个行业的经验不具备可复制性,企业场景复杂繁多,开发出的程序可能不适用于企业实际场景。即便是大公司成熟的商业应用,别人花钱买了用起来也会遇到不匹配的情景,要不就要「削足适履」,要不就要搞定制开发,这样企业数字化进程当然就慢的很,也不够爽。近年来随着低代码/零代码等技术的更新,阿里云和钉钉一起,显然在解决业务人员不懂程序,程序员不懂业务的数字化困境。在此基础上,企业很容易开发构建起自己的应用程序,不再需要买一套系统「削足适履」,硬套逻辑。

其实钉钉本身原始能力上就有不少关键应用。钉钉囊括了 ERP(企业资源计划)、CRM(客户关系管理)、OA(人力)等 SaaS 层面的核心能力,现在结合阿里云的商业计算和新开发环境之后,关键应用+平台的能力,开始有了真正走向「操作系统」的感觉。「云钉一体」的本质就是面向大中小型企业、政府、甚至是个人,提供一整套数字化的「基础平台+小程序开发体系」,用户可以更应符合自己情况的方式,通过深层数字化去解放效率。阿里云+钉钉的结合,有没有让你想到 PC 时代的 Wintel 联盟(Windows 操作系统+Intel 芯片硬件),当年他们联手推动了个人计算的普及。这本质上也是越来越好用的操作系统和越来越强的计算力,一起推动大生态才能实现的。

云的 2.0。不得不说,「阿里概念制造公司」最近火力很猛,「云钉一体」大家还没吃透,今年云栖大会阿里云智能总裁张建锋就又抛出了「云端一体」的战略。阿里云在过去十年用自研的「飞天操作系统」,去解决以往传统 IT 时代基础设施资源云化过程中的复杂性问题。通俗说就是随着小型机、大型机等 IT 单机设备越来越多,计算环境越来越复杂,「飞天操作系统」通过分布式计算能力解决了服务器与服务器之间资源、数据调度、管控的问题。当然今天他认为仅依靠「飞天操作系统」还不够,IoT 时代涉及端的形态更多,从芯片到 PC、手机,云如要更好地匹配 IoT 时代的计算环境,需要对云进行再升级。「云端一体」带来的最大变革,即过去在硬件上的算力可以全部迁移到云端,每个人在云端都可以拥有自己的个人电脑,而不再依赖于 CPU、GPU 等硬件指标。而且,以往端侧从各种硬件组件的采购到软件、中间件的适配,像搭积木一样,过程、环节繁琐,成本昂贵。现在通过在云端布置一切软硬件能力,再把一整套IoT平台能力赋能给端侧,基于云计算,构建出新型的端形态。这应该是IoT时代与传统PC时代最大的差异,这种计算的变革是自上而下推动的。

在我看来,所谓「云钉一体」与「云端一体」本质上就是阿里云的 .0版本,这件事定义了阿里云接下来一个阶段的核心目标,那就是从商业计算的中台基础设施,变成一套商业领域的「数字原生操作系统」——基于云计算,又有协同、移动、数据智能、IoT 一体化能力。 「云钉一体」更聚焦商业操作系统本体,相比之下,「云端一体」,更聚焦于基于大量 IoT 的计算新环境。这是一个更深远的商业计算环境的布局。显然,阿里在长期趋势上的坚决行动,「因为相信所以看见」,还是那个味道,2020又给自己找到了个新台阶。如果说 10 年前,阿里云创立时候给自己找的台阶,是向上通往「我相信」的,那么现在阿里云这个更复杂,跨度更大的台阶应该是向下的。这需要把「自己因为相信所以看见」的阿里云,变成为更多人和组织,去建立「因为好用所以能实现」的商业计算操作系统。这件事超级复杂,但很值得期待。毕竟「深层数字化」的下一个十年,谁真正解决这些「真问题、大问题、难问题」,时代当然也就会给予谁匹配的嘉奖。

分类: 足球 标签:

关于电影

2020年3月25日 8点30分 没有评论

看到网上很好的一段电影解说词。

到底什么是好电影?我一直在思考。
是雾里看花感性的美,还是思维缜密理性的真,
是洞悉人性坚守的善,还是百转千回无言的爱?
可能都是,也可能都不是。
电影或许只是我们内心的映射。
不同的时间,不同的地点,不同的氛围,
我们对电影的感受都会有所不同。
如果觉得哪部电影作品好,
可能只是我们正好在对的时间遇见了,感觉也正好对了。
这和爱情其实差不多。
毕竟你看过的事物,你思考的问题以及你所做的决定,
才造就了现在的你,也造就了你的喜好。
你是你,我是我。
如果我们感觉对了,
不能说明我们都是对的,
但至少可以证明
我们是同一类人。
反之也一样。
所以,感谢喜欢我的人,让我更加坚定,
也感谢不喜欢我的人,让我更加清醒。

分类: 生活 标签:

Perl Jifty研究01

2020年2月15日 0点52分 评论已被关闭

准备写一个基于文本的报价系统,计划用Jifty开发框架。今天晚上完成了开发环境的搭建,在之前装httpd+CGI的CentOS中,做了一些调整。记录如下:
1. CentOS7.2的网络配置在/etc/sysconfig/network-scripts/下的”ifcfg-“开头的系列文件中。只要是以”ifcfg-“开头的,配置都会被系统读出。这个和之前的版本是不一样(即便加上后缀.bak之类也会配置IP)。使用”ip addr list”查看新的IP是否设置成功。
2. CentOS7.2停止开机自动启动服务,使用”systemctl disable httpd-service”取消httpd开机自动重启。“systemctl –type=service”查看所有开机自动运行的服务列表。“systemctl list-units”显示所有当前服务,”systemctl list-unit-files”显示系统所有服务(包括未启动的)。这个和之前的chkconfig配置也不一样。

考RHCE都是十五年前的事情了,这些年对Linux系统的深入研究少了,还得认真补充学习。

使用CPAN安装Jifty, 总是遇到CPAN的网络速度慢或网络无法访问问题。于是想办法把CPAN设置为国内镜像站点后解决。修改CPAN的配置文件MyConfig.pm中urllist对应的链接信息,按照http://www.cpan.org/SITES.html所列出的站点改为国内镜像。 具体步骤如下。

# vim ./cpan/CPAN/MyConfig.pm
'urllist' => [q[http://mirrors.163.com/cpan/], 
              q[ftp://mirrors.ustc.edu.cn/CPAN/], 
              q[http://mirror.lzu.edu.cn/CPAN/]],

然后就可以通过CPAN顺利安装Jifty了。

查看安装的Perl模块有两个方法:

#perldoc -t perllocal | grep Jifty
Fri Feb 14 23:17:01 2020: "Module" Jifty::DBI

第二种方式是使用以下脚本

#!/usr/bin/perl
use strict;
use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();
foreach  (@modules) {
        my  $ver = $inst->version($_) || "???";
        printf("%-22s -Version- %-22s\n", $_, $ver);
}
exit;
分类: Perl 标签:

数据存储框架14

2019年12月19日 16点03分 没有评论

多年来以客户服务为中心,良好的服务为公司赢来更为广阔的市场。好的服务像“鸭子浮水”,人们看到鸭子在水面上悠闲地游来游去,但其实在水面之下,鸭子的脚掌在快速拨动,不断变换方向和速度。水面下的部分,就是我们技术服务要做的重要工作。

公司的核心价值之一是“以客户为中心”,服务就是对“以客户为中心”的最佳诠释和体现。对于客户而言,服务是他们对公司最直接的感知。因此,客户一旦遇到什么问题,服务团队总是第一时间赶到现场,并感同身受地帮助客户解决问题,并客户觉得公司是值得信赖的。我们的服务是有温度的。

好的服务讲究“润物细无声”。优质的服务,不是轰轰烈烈的,而是默默站在客户背后,时刻保障客户设备安全和稳定运行,日积月累,让客户感受很舒服,使客户产生信赖,并逐渐成为客户可靠的伙伴。

一、人员和组织保障
公司的部门和员工众多,每个部门的考核不同,不同员工的思维方式也不同。要形成合力,需要大家有统一的价值观,这就是“以客户为中心”。那么如果让这个价值观落地并深入人心呢?需要有针对性的制度和工具。

比如客户满意度调查。每完成一次服务,都有专人对客户进行回访,对现场技术工程师的技术能力、服务态度和规范进行考察。经过综合统计,获得客户满意度结果,使之成为员工考核的重要指标。

技术团队的人员和组织,是面向客户设置的。越靠近客户的一端,人员和组织的专属性就越强。这点类似于边缘/云计算?这样一来,每个技术服务人员都可以聚焦自己的客户,对客户的情况更熟悉; 对于客户而言,可以在遇到问题时,直接找到自己专属的服务人员。在人员和组织方面,设置有研发团队、区域客户服务平提和本地服务团队的三层服务架构,从而为客户不同程度问题的解决提供了保障。

二、主动预防
“看网讲网”。客户的专属服务人员,会定期去考察客户的系统,为客户进行讲解,并对风险进行评估,制定预案。同时,还会为客户设备进行定期的巡检,起到未雨绸缪的作用。

针对数据迁移或业务切换这类高风险的操作,提前做好关键点控制,并将事件分为不同的等级。每次处理前,设计好实施方案,并在内部开展讨论,然后在客户同意、获得技术和管理双方面授权的前提下,才开始进场实施,从而确保安全性。

重保。当客户面临一些重大事件,比如召开重大会议时,会安排提前和客户沟通,并提供重大事件的保障,如现场值守。还提供远程管理服务,7×24小时服务等。

三、应急响应
除了主动防御和规定动作,还为客户提供了应急响应服务。比如,针对客户的突发事件,设置一整套问题申报和处理流程,可以把相应资源调动起来,为客户解决问题。当客户的系统发生重大故障时,迅速成立应急指挥中心,把预设的各项资源调动起来,及时为客户解决问题。

针对VIP客户,直接把响应提升到更高级别,从而加速问题的解决。

四、流程和制度
讲究流程的遵从性。“从问题到解决”,如果问题没有解决,就会不断升级,直到触发“管理升级”。这是公司赋予一线管理者的全力,可以强力牵引公司的资源去解决问题。到了管理升级层面,随着公司高层介入,各类资源就位和拉通,问题快速闭环,这相当于制度层面的保障。

服务流程体系是一套求助系统

服务流程体系是一套求助系统。不可能所有的事情都能做,因此一定要善于求助,找到合适的人将问题解决。服务流程体系是一个资源求助和调配的系统。“什么是流程?流程是人人有事做,事事有人做。”。技术服务人员会遇到哪些场景,应该去找谁,流程都规定得十分详细;只要按照流程去做,就能迅速调集相关资源。

“做为一名一线的主管,我愿意为客户服务,公司通过相关制度考核我的工作,同时公司又给了我工具和权力,让我可以调配资源为客户服务,这样责任和权利就对等了,公司的服务也因此有了坚强的保障”。

从企业活下去的根本来看,企业要有利润。但利润只能从客户那里来。企业的生存本身是靠满足客户需求,提供客户所需的产品和服务,并获得合理的回报来支撑。员工要给工资,股东要给回报,天底下唯一能给钱的,只有客户。我们不为客户服务,还能为谁服务?客户是我们生存的唯一理由。

分类: 大数据 标签:

数据存储框架13

2019年12月18日 10点15分 没有评论

产业升级带来的需求爆发和技术质变,使得智能视频呈现出强大的生机。

使命感的企业,认为只有将自身的进步建立在整个社会和人的进步之中,才能真正实现企业的理想和价值。人类即将进入万物感知、万物互联和万物智联的社会。万物感知是入口,万物互联是基础,万物智联是结果。

智能手机是我们目前用来感知万物的常用工具,是和世界联接的纽带,是用户体验入口和应用载体,可以随心所欲和无处不在感知万事万物。智能视频行业也讲师未来万物感知的核心之一。人有五官,而获取数据80%来自眼睛。

视频是机器之眼,其视觉能力与智能手机在4G时代就成为连接人与人、人与社会关键一环。4G改变生活,5G改变社会。未来要感知智能社会,每一个环节都将智能化,行业的变革和重塑正在发生。智能视频做为感知入口和数据采集终端,其市场竞争将非常激烈。

目前,安防亦然成为一种业务形态,其边界业务和应用场景宽泛、交融。要赋能千行百业,智能视频也应无处不在和无所不能,以此来充分满足用户智能化的需求。当前智能视频行业的痛点是:智能普及率低、智能效能低、复杂场景难以胜任、数据壁垒等等。

数字化转型,将成为未来社会的发展核心,是产业升级的必经之路。智能视频是实现数据转型的重要锚点,是产业数字化升级的核心驱动力,也是提高生产管理效率的数字化和智能化的关键技术。

智能视频,需要从物理世界投射到数字世界,也要求把数字世界叠加渲染进物理世界,形成虚实协同的数字孪生。对物理世界进行数字化建模,需要智能视频的感知。智能视频就是数字世界的眼睛,传递视界即为世界。

“优势挡不住趋势”,这句话对行业变化和发展有重要的意义。将来智能视频的远景:
– 从零散稀疏走向无处不在
– 从后知后觉走向先人一步
– 从辅助系统走向生产系统
– 从单一感知走向多维融合
– 从事倍功半走向功能倍增
– 从各自为政走向有效协同

话述: 产品能从专业AI芯片升级、开放的操作系统升级、丰富的应用生态体系升级三大维度。做为多维数据的汇聚与智能分析平台,产品从新生态、新架构和新内核全新予以定义,从线下服务升级到线下+线上的全生态体系,从”边云协同”升级到基于vPaSS2.0的”端边云”全协同,从传统的”存检算”升级到基于某AI芯片/处理器的智能的存算检模式”。

这是一篇介绍“边云协同”的文章,很有参考价值。

分类: 大数据 标签:

数据存储框架12

2019年12月13日 10点16分 没有评论

上午发现三节点集群中的node555没有启动,可能是系统盘出了问题。修复后让node555启动进入系统,此时在Web界面中刷新并没有看到node555上线。在node555中执行jps,发现没有列出datanode。结合昨天的实验内容,在node555上手动启动datanode后,Web界面中可以看到node555上线。注意之前node555被配置为SecondNameNode,此次并未列出(可能也需要手动启动)。

# jps
10053 Jps (未列出DataNode)
# cd /usr/hadoop-2.10.0/sbin/
# ./hadoop-daemon.sh start datanode
starting datanode, logging to /usr/hadoop-2.10.0/
logs/hadoop-root-datanode-node555.out
# jps
10092 DataNode (列出DataNode)
10205 Jps

通过调整权限很快解决了web不能上传文件的问题,参考了HDFS的Shell文档,将测试目录的权限开到最大。以下操作在NameNode的node333中进行。无法上传到20191212目录的原因是其它用户没有写权限

# hdfs dfs -ls /
Found 1 items
drwxr-xr-x   - root supergroup   0 2019-12-12 02:01 /20191212

如Web上传到此目录,将提示Couldn’t upload the file
3

新创建一个20191213目录,分配写权限。注意,在创建时“20191213”和”/20191213″是完全不同的。如果不带”/”,将在”/”目录下生成一个/user/root/20191213目录。

# hdfs dfs -mkdir -p /20191213
# hdfs dfs -ls /20191213                                                                    
# hdfs dfs -ls /
Found 2 items
drwxr-xr-x  - root supergroup  0 2019-12-12 02:01 /20191212
drwxr-xr-x  - root supergroup  0 2019-12-12 21:38 /20191213
# hdfs dfs -chmod -R 777 /20191213
# hdfs dfs -ls /
Found 2 items
drwxr-xr-x  - root supergroup  0 2019-12-12 02:01 /20191212
drwxrwxrwx  - root supergroup  0 2019-12-12 21:38 /20191213

然后就可以上传文件到20191213了:
1

查看文件详细信息时,可以看到文本文件的head和tail部分(和Linux的head/tail一样)。
2

分类: 大数据 标签:

数据存储框架11

2019年12月12日 16点16分 没有评论

今天下午完成了扩容的测试。两个数据节点node444和node555除了系统盘(80G/SSD)外,每节点还有3块1T硬盘。测试内容为将node444上的三块1T硬盘容量加入到Hadoop资源池之中,然后上传存入一些文件。参考文档[1][2]。具体过程如下。

1.在数据节点node444上,将三块1TSATA硬盘(/dev/sdb,/dev/sdc和/dev/sdd)分区、格式化和挂载到node444的本地目录。

# fdisk /dev/sdb (创建一个主分区sdb1)
# fdisk /dev/sdc (创建一个主分区sdc1)
# fdisk /dev/sdd (创建一个主分区sdd1)
# mkfs.ext4 /dev/sdb1
# mkfs.ext4 /dev/sdc1
# mkfs.ext4 /dev/sdd1
# mkdir -p /data/stor_a
# mkdir -p /data/stor_b
# mkdir -p /data/stor_c
# mount /dev/sdb1 /data/stor_a
# mount /dev/sdc1 /data/stor_b
# mount /dev/sdd1 /data/stor_c
# vim /etc/fstab (开机自动挂载)
  /dev/sdb1   /data/stor_a    ext4    defaults    0 0
  /dev/sdc1   /data/stor_b    ext4    defaults    0 0
  /dev/sdd1   /data/stor_c    ext4    defaults    0 0

2. 在数据节点node444上,在hdfs-site.xml写入配置路径。其中“/opt/hadoop_tmp/dfs/data”是在core-site.xml中设定的路径,/data/stor_a是新增硬盘容量对应的挂载目录。

# vim /usr/hadoop-2.10.0/etc/hadoop/hdfs-site.xml     
 <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>
                        file:/opt/hadoop_tmp/dfs/data/,
                        file:/data/stor_a,
                        file:/data/stor_b,
                        file:/data/stor_c
                </value>
        </property>

3. 在数据节点node444上,重启datanode服务

# cd /usr/hadoop-2.10.0/sbin
# ./hadoop-daemon.sh stop datanode
stopping datanode
# jps
11276 Jps (可以观察到没有列出datanode)
# ./hadoop-daemon.sh start datanode                                                      
starting datanode, logging to /usr/hadoop-2.10.0/logs/hadoop-root-datanode-node444.out

4. 在任一节点上查看增加后的容量,可以看到node444的容量为2.73T,集群的总容量也发生了变化,即三块1T的容量已经加到资源池中。

# hadoop dfsadmin -report
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

Configured Capacity: 3054216757248 (2.78 TB)
Present Capacity: 2897777172480 (2.64 TB)
DFS Remaining: 2897528950784 (2.64 TB)
DFS Used: 248221696 (236.72 MB)
DFS Used%: 0.01%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Pending deletion blocks: 0

-------------------------------------------------
Live datanodes (2):

Name: 172.16.20.40:50010 (node444)
Hostname: node444
Decommission Status : Normal
Configured Capacity: 3003662340096 (2.73 TB)
DFS Used: 124162048 (118.41 MB)
Non DFS Used: 3104387072 (2.89 GB)
DFS Remaining: 2850352889856 (2.59 TB)
DFS Used%: 0.00%
DFS Remaining%: 94.90%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Thu Dec 12 03:24:21 EST 2019
Last Block Report: Thu Dec 12 03:13:42 EST 2019

中间遇到并已经解决的问题:
– 在扩容的数据节点上必须重启datanode,否则无法生效。
– 在写配置文件hdfs-site.xml时忘写一个< /property>,排查花了一些时间。

关于上传文件,在NameNode的node333上使用命令行可以完成对应任务。我把node333中的jdk安装包和pdsh压缩包放到hadoop中,如下。

[root@node333 ~]# ls
anaconda-ks.cfg  hadoop-2.10.0.tar.gz  jdk-7u45-linux-x64.rpm  pdsh-2.26  pdsh-2.26.tar.bz2
[root@node333 ~]# hdfs dfs -put jdk-7u45-linux-x64.rpm /20191212
[root@node333 ~]# hdfs dfs -put pdsh-2.26.tar.bz2 hdfs://node333:9000/20191212
[root@node333 ~]# hdfs dfs -ls /20191212
Found 2 items
-rw-r--r--   2 root supergroup  122585894 2019-12-12 01:58 /20191212/jdk-7u45-linux-x64.rpm
-rw-r--r--   2 root supergroup     490732 2019-12-12 02:01 /20191212/pdsh-2.26.tar.bz2

上传后在Web界面中可以看到文件目录和列表。
2019-12-12 17-02-56屏幕截图

遗留的问题:
– 在Web界面中无法上传文件,估计是权限配置的问题,暂时没有找到解决方法。网上有文章[3]提到“By Default HDFS Web UI is read only, and files or directories can’t be created/modified.”
– 参考[2]和[4]修改hdfs-site.xml尝试让节点下线,发现指定下线节点并未出现Decommission状态。原因需要进一步调查。

分类: 大数据 标签:

数据存储框架10

2019年12月10日 15点42分 没有评论

今天装好了一个三节点的Hadoop。参考这两篇文章[1][2]。中文参考文档虽然详细,但是有些错误。记录我的安装步骤如下。

1.三个节点服务器安装CentOS7.2最小版,配置各节点无密码ssh登录(参考前几天的文章)。

2.在每个节点上安装JDK。在Oracle.com官网上注册,然后下载jdk-7u45-linux-x64.rpm,在每个节点上安装JDK并执行以下命令,用rpm安装后java的路径为“/usr/java/jdk1.7.0_45”。以node333为例:

# rpm -ivh jdk-7u45-linux-x64.rpm
# vim /etc/profile (修改配置文件,增加以下行)
    export JRE_HOME=/usr/java/jdk1.7.0_45/jre
    export JAVA_HOME=/usr/java/jdk1.7.0_45/
    export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
# source /etc/profile (使配置文件生效)
# java -version (检查安装是否成功)
    java version "1.7.0_45"
    Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
    Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

3.在节点node333,下载hadoop-2.10.0.tar.gz并解压到/usr下

# ls /usr/hadoop-2.10.0/

4.在节点node333,参考文档[2]配置hadoop。首先配置core-site.xml文件(注意将原文件备件),此次试验将node333设置为集群的namenode。

# cd /usr/hadoop-2.10.0/etc/hadoop
# vim core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://node333:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/hadoop_tmp</value>
        </property>
        <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>
</configuration>

其次配置hdfs-site.xml文件(文件路径都在/usr/hadoop-2.10.0/etc/hadoop),设置副本数为“2”(默认为3?)。

# vim hdfs-site.xml
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
</configuration>

接着配置mapred-site.xml文件,目录中没有这个文件,需要先根据模板生成。将node555设置为SecondaryNameNode。

# cp mapred-site.xml.template mapred-site.xml
# vim mapred-site.xml
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>node555:50090</value>
        </property>
</configuration>

然后配置yarn-site.xml,YARN即Yet Another Resource Negotiator的缩写,是一个资源管理系统。将node444设置为resourcemanager。

<configuration>
<!-- Site specific YARN configuration properties -->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>node444</value>
        </property>
</configuration>

接着配置slaves文件,将各节点主机名加入:

# vim slaves
    node333
    node444
    node555 

在hadoop-env.sh中配置JAVA_HOME的路径

# vim hadoop-env.sh (修改对应行)
    export JAVA_HOME=/usr/java/jdk1.7.0_45/

最后再次配置/etc/profile 加入HADOOP_HOME执行路径:

# vim /etc/profile
    export JRE_HOME=/usr/java/jdk1.7.0_45/jre
    export JAVA_HOME=/usr/java/jdk1.7.0_45/
    export HADOOP_HOME=/usr/hadoop-2.10.0/
    export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# source /etc/profile

所有配置完成。

5.在node333上检查已经安装成功,可以显示正确的hadoop版本信息。

# hadoop version
Hadoop 2.10.0
Subversion ssh://git.corp.linkedin.com:29418/hadoop/hadoop.git -r
e2f1f118e465e787d8567dfa6e2f3b72a0eb9194
Compiled by jhung on 2019-10-22T19:10Z
Compiled with protoc 2.5.0
From source with checksum 7b2d8877c5ce8c9a2cca5c7e81aa4026
This command was run using /usr/hadoop-2.10.0/share/hadoop/common/hadoop-common-2.10.0.jar

6.在node333上,将hadoop文件目录和profile文件复制到其它节点(node444和node555)

# scp -r hadoop-2.10.0 root@node444:/usr/
# scp -r hadoop-2.10.0 root@node555:/usr/
# scp profile root@node444:/etc/ 
# scp profile root@node555:/etc/

我在之前的测试中,早早在各节点中解压了hadoop目录,没有同步配置文件,导致node333启动hadoop服务后没有找到数据节点。有些大意了。

在node444和node555上分别执行以下命令,使路径生效。

# source /etc/profile

7.启动hadoop。在node333(已设置为Name Node)上做初始化。

# hadoop namenode -format

2019-12-10 14-35-46屏幕截图

启动hdfs,在hadoop下的sbin下:

# ./start-dfs.sh

2019-12-10 14-44-05屏幕截图
在各节点上执行jps可以看到如下结果:

[root@node333 ~]# jps
7735 Jps
2618 NameNode

[root@node444 ~]# jps
2418 Jps
2207 DataNode

[root@node555 ~]# jps
10192 SecondaryNameNode
10086 DataNode
10526 Jps

8.在浏览器中访问集群,可以看到各节点状态。
11

DataNode列表
222

遗留问题,每个节点还有三块硬盘。这些未挂载未格式化的硬盘容量未体现在集群中,下一步解决。

分类: 大数据 标签:

数据存储框架09

2019年12月6日 14点59分 没有评论

一直以来都想找可以管理多台服务器的工具,今天研究了psdh,感觉比较方便。以下是通过Ubuntu的笔记本管理三台CentOS7.2的具体过程。配置成功的关键是就保证ssh无密码登录。参考了这两篇文章[1][2]

1.安装pdsh
我开始时以为需要被管理的CentOS也要装pdsh,后来证明是不用装的。在管理用的笔记本Ubuntu中使用

$sudo apt-get install pdsh

2.在Ubuntu的/etc/hosts中加入各节点名

172.16.20.30    node333
172.16.20.40    node444
172.16.20.50    node555

3.在Ubuntu上生成公钥,此时可用phillip。

$sudo ssh-keygen -t rsa

4.将公钥复制到被管理的CentOS服务器上。之前用Ubuntu的用户phillip+sudo会返回失败,必须先切换为Ubuntu的root用户,才能执行。在Ubuntu中执行以下命令:

$sudo -i
#ssh-copy-id root@node333
#ssh-copy-id root@node444
#ssh-copy-id root@node555

5.测试将所有服务器的时间于ntp同步,显示主机名。

$ sudo pdsh -w ssh:root@node[333,444,555] hostname
node444: node444
node555: node555
node333: node333
$ sudo pdsh -w ssh:root@node[333,444,555] ntpdate ntp1.aliyun.com
node555:  6 Dec 01:58:06 ntpdate[10235]: adjust time server 120.25.115.20 offset 0.013388 sec
node444:  6 Dec 01:58:06 ntpdate[2338]: adjust time server 120.25.115.20 offset -0.003958 sec
node333:  6 Dec 01:58:16 ntpdate[2405]: adjust time server 120.25.115.20 offset 0.001803 sec

在各个节点之前实现无密码ssh登录的方法和步骤:
1. 在节点(以node333为例),首先修改/etc/hosts,将其它节点主机名加入hosts

# vim /etc/host
172.16.20.30    node333
172.16.20.40    node444
172.16.20.50    node555

2. 在节点(以node333为例)上执行以下命令

# ssh-keygen -t rsa -f id_dsa (在.ssh目录下生成id_dsa和id_dsa.pub)
# cd .ssh
# cat ip_dsa.pub >> authorized_keys

3. 将生成的密匙id_dsa.pub复制到其它节点(node444和node555),

# scp .ssh/id_dsa.pub root@node444
# ssh root@node444
# cat id_dsa.pub .ssh/authorized_keys (导入复制过来的ssh_key)

这样node444和node555就可以无需密码登录node333了。依次在所有节点操作即可。

tmux很强大,使用了几天后才发现上下翻页只需要Ctrl+b,然后PgUp和PgDn就可以了。tmux的缓冲区命令用于vim或less等场景。

分类: 大数据 标签: ,