ag真人Linux运维不会这些,亡羊补牢

2019-09-11 16:04栏目:公司领导
TAG:

hadoop中mapreduce的常用类(1)

写这个文章的时候才意识到新旧API是同时存在于1.1.2的hadoop中的。以前还一直纳闷儿为什么有时候是jobClient提交任务,有时是Job...不管API是否更新,下面这些类也还是存在于API中的,经过自己跟踪源码,发现原理还是这些。只不过进行了重新组织,进行了一些封装,使得扩展性更好。所以还是把这些东西从记事本贴进来吧。

关于这些类的介绍以及使用,有的是在自己debug中看到的,多数为纯翻译API的注释,但是翻译的过程受益良多。

GenericOptionsParser

parseGeneralOptions(Options opts, Configuration conf, String[] args)解析命令行参数

GenericOptionsParser是为hadoop框架解析命令行参数的工具类。它能够辨认标准的命令行参数,使app能够轻松指定namenode,jobtracker,以及额外的配置资源或信息等。它支持的功能有:

-conf 指定配置文件;

-D 指定配置信息;

-fs 指定namenode

-jt 指定jobtracker

-files 指定需要copy到MR集群的文件,以逗号分隔

-libjars指定需要copy到MR集群的classpath的jar包,以逗号分隔

-archives指定需要copy到MR集群的压缩文件,以逗号分隔,会自动解压缩

  1. String[] otherArgs = new GenericOptionsParser(job, args)

  2. .getRemainingArgs();

  3. if (otherArgs.length != 2) {

  4. System.err.println("Usage: wordcount ");

  5. System.exit(2);

  6. }

ToolRunner

用来跑实现Tool接口的工具。它与GenericOptionsParser合作来解析命令行参数,只在此次运行中更改configuration的参数。

Tool

处理命令行参数的接口。Tool是MR的任何tool/app的标准。这些实现应该代理对标准命令行参数的处理。下面是典型实现:

public class MyApp extends Configured implements Tool {              public int run(String[] args) throws Exception {   // 即将被ToolRunner执行的Configuration   Configuration conf = getConf();               // 使用conf建立JobConf   JobConf job = new JobConf(conf, MyApp.class);           // 执行客户端参数   Path in = new Path(args[1]);   Path out = new Path(args[2]);               // 指定job相关的参数        job.setJobName("my-app");   job.setInputPath(in);   job.setOutputPath(out);   job.setMapperClass(MyApp.MyMapper.class);   job.setReducerClass(MyApp.MyReducer.class);   *   // 提交job,然后监视进度直到job完成   JobClient.runJob(job);   }              public static void main(String[] args) throws Exception {   // 让ToolRunner 处理命令行参数    int res = ToolRunner.run(new Configuration(), new Sort(), //这里封装了GenericOptionsParser解析args               System.exit(res);   }   }   

MultipleOutputFormat

自定义输出文件名称或者说名称格式。在jobconf中setOutputFormat(MultipleOutputFormat的子类)就行了。而不是那种part-r-00000啥的了。。。并且可以分配结果到多个文件中。

MultipleOutputFormat继承了FileOutputFormat, 允许将输出数据写进不同的输出文件中。有三种应用场景:

a. 最少有一个reducer的mapreduce任务。这个reducer想要根据实际的key将输出写进不同的文件中。假设一个key编码了实际的key和为实际的key指定的位置

b. 只有map的任务。这个任务想要把输入文件或者输入内容的部分名称设为输出文件名。

c. 只有map的任务。这个任务为输出命名时,需要依赖keys和输入文件名。 

//这里是根据key生成多个文件的地方,可以看到还有value,name等参数   @Override   protected String generateFileNameForKeyValue(Text key,   IntWritable value, String name) {   char c = key.toString().toLowerCase().charAt(0);   if (c >= 'a' && c <= 'z') {   return c + ".txt";   }   return "result.txt";   }   

DistributedCache

在集群中快速分发大的只读文件。DistributedCache是MR用来缓存app需要的诸如text,archive,jar等的文件的。app通过jobconf中的url来指定需要缓存的文件。它会假定指定的这个文件已经在url指定的对应位置上了。在job在node上执行之前,DistributedCache会copy必要的文件到这个slave node。它的功效就是为每个job只copy一次,而且copy到指定位置,能够自动解压缩。

DistributedCache可以用来分发简单的只读文件,或者一些复杂的例如archive,jar文件等。archive文件会自动解压缩,而jar文件会被自动放置到任务的classpath中(lib)。分发压缩archive时,可以指定解压名称如:dict.zip#dict。这样就会解压到dict中,否则默认是dict.zip中。

文件是有执行权限的。用户可以选择在任务的工作目录下建立指向DistributedCache的软链接。

DistributedCache.createSymlink(conf);     DistributedCache.addCacheFile(new Path("hdfs://host:port/absolute-path#link-name").toUri(), conf);      

DistributedCache.createSymlink(Configuration)方法让DistributedCache 在当前工作目录下创建到缓存文件的符号链接。则在task的当前工作目录会有link-name的链接,相当于快捷方法,链接到expr.txt文件,在setup方法使用的情况则要简单许多。或者通过设置配置文件属性mapred.create.symlink为yes。 分布式缓存会截取URI的片段作为链接的名字。 例如,URI是 hdfs://namenode:port/lib.so.1#lib.so, 则在task当前工作目录会有名为lib.so的链接, 它会链接分布式缓存中的lib.so.1


ag真人 1


) 写这个文章的时候才意识到新旧API是同时存在于1.1.2的hadoop中的。以前还一直纳闷儿为什么有时候是jobClient提交任...

IT故障管理:亡羊补牢,不如未雨绸缪

随着BYOD、云计算、大数据等新一代IT技术的发展,企业信息化应用变得更加得心应手,但IT运维管理的压力似乎并没有减轻,反而面临更大的挑战。对于IT运维主管来说,一场IT重大事故的发生,不仅会让部门员工士气低落,更容易让上层领导怀疑IT部门的领导力和执行力。因此,针对IT故障管理,更多希望改善自身状况的IT部门,开始选择主动性的事前管理模式,而非被动式的亡羊补牢。

英雄难过“故障关”

IT在很多时候都会充当幕后英雄的角色,可如今的职场生存环境,对心脏不强健的运维主管来说则是一个噩梦。

一方面,作为公司的最高管理者,他们希望IT的能力越来越强大,变成无形的力量,因为IT能消除公司内部的摩擦,并且削减每笔交易的成本。另一方面,你永远不要相信他们可以做到绝对的平衡,如果重大的系统故障给整体收益带来了影响,公司就会强调这个原因,强调公司发展受到了IT的拖累。

那么,IT故障是否能够彻底消除呢?答案是否定的。任何系统都有出现故障的时候,它可能发生在IT资产生命周期的任何一个时段,包括了硬件、软件和不可抗的自然因素。为此,企业必须要为自身定义一个可以接受的故障管理目标,将IT基础设施故障对业务的影响减到最小,并防止与这些错误相关的事故再度发生。

如果单从故障管理的目标来看,人们力求找到引发事故的根源,然后才着手改善或纠正该情况。“这种做法固然无错,但却没有行走在IT运维管理最佳的流程上。

对此,北塔软件表示:“故障管理的流程具有被动和主动两个方面。被动方面是作为对一个或多个事故的反应而解决问题,而主动的“故障管理”是指在事故发生前确定并解决问题和已知错误。所以说,即使你现在‘救火’的事情再忙、再多,也应当去思考,并且马上行动起来,因为这种工作状态非但不能给IT部门带来改变,反而陷入一个恶性循环当中。

“两步走”实现未雨绸缪

如今,企业的IT架构被多种新兴技术改造,并与业务深度融为一体。这带来了极度复杂的管理机制和故障发生机率,迫使IT部门不能满足于传统的故障识别及修复工作,而需要走在问题的前面。

未雨绸缪的益处世人皆知,但又要从何入手呢?针对这个问题,北塔软件建议用户采用如下两个步骤实现“质变”:

◆ 第一步:基础设施监控“泛化”

之前,由于网络的庞大和后续累加,你可能无法知道IT系统中每个关键应用承载设备在哪里,甚至不知道这些设备连接的应用在哪个端口上。这时的IT运维管理就等于“盲人摸象”,连最基本的“救火”都无法实现。所以,在这个阶段,便需要利用具备手动或自动发现功能的运维工具,迅速搜索整个网络内的所有节点,实现整个网络的真实物理拓扑图,实时反映出整个网络的运行状态。

需要注意的是,在云计算或虚拟化运行环境中,传统的运维工具已经无力支撑这个目标。此时,用户可以采用北塔BTIM等具备自动感知虚拟和物理环境的新一代运维平台,将虚拟交换机和虚拟机以“实体连接”的形式存在于监控场景中,自动追踪数据和虚拟机漂移后的性能指标。

◆ 第二步:业务管理“透明化”

一套业务系统的可用性,取决于每个基础设施对象之间的配合和稳定,但之前的基础监控数据对于整套业务系统又能起到什么帮助呢?

在完成全网监控的目标后,用户可以利用北塔BTIM自动对监控数据从业务角度归类整合,让所有业务关键参数醒目地投射到业务架构上,实时反映业务运行情况。业务视图的构建,可以对外向业务部门,对内给自身管理都提供透明化管理,能够非常清晰地反应出业务系统的健康指标。而透明化的监控业务系统运行起来之后,能够事前发现可能引起系统宕机故障,或者访问质量无法保障的问题,把可能发生故障的隐患消除在萌芽状态。

IT运维要给创新“留时间”

主动运维、事前运维,这些具体工作实际上都在围绕着“预防性检查(PM)”展开,旨在提高系统的可用性、稳定性。而IT部门的价值若想进一步体现,就不能总围绕“救火员”的角色。因此,未雨绸缪的最终目的还是解放人力。

对此,北塔软件表示:“追求IT创新不仅需要灵感,更要时间。用户还可以利用北塔BTIM中的‘业务仿真、自动巡检’等功能替代人力操作,主动找出可能会影响系统可用性和性能降低的原因。在这个平台上,看似是一张简单的业务管理门户图,但却可以紧密联合并改善IT与业务部门之间的关系,在沟通中激发IT创新的灵感。”

随着BYOD、云计算、大数据等新一代IT技术的发展,企业信息化应用变得更加得心应手,但IT运维管理...

Linux运维不会这些,不要做工程师......,linux工程师


1、Linux系统基础

这个不用说了,是基础中的基础,连这个都不会就别干了,参考书籍,没必须全部掌握,但基本命令总得会吧。

2、网络服务

服务有很多种,每间公司都会用到不同的,但基础的服务肯定要掌握,如FTP, DNS,SAMBA, 邮件。

这几个大概学一下就行,LAMP和LNMP是必须要熟练,达妹所指的不是光光会搭建,而是要很熟悉里面的相当配置才行,因为公司最关键的绝对是WEB服务器,所以nginx和apache要熟悉,特别是nginx一定要很熟悉才行,至少有些公司还会用tomcat,这个也最好学一下。

其实网络服务方面不用太担心,一般公司的环境都已经搭建好,就算有新服务器或让你整改,公司会有相应的文档让你参照来弄,不会让你乱来的,但至少相关的配置一定要学熟,而且肯定是编译安装多,那些模块要熟悉一下他的作用,特别是PHP那些模块。 

这面2点只是基础,也是必要条件,不能说是工具,以下才是真正的要掌握的工具。

3、shell脚本和另一个脚本语言

shell是运维人员必须具备的,不懂这个连入职都不行,至少也要写出一些系统管理脚本,最简单也得写个监控CPU,内存比率的脚本吧,这是最最最基本了,别以为会写那些猜数字和计算什么数的,这些没什么作用,只作学习意义,写系统脚本才是最有意义,而另一个脚本语言是可选的,一般是3P,即Python, perl和php,php就不需要考虑了,除非你要做开发,达妹个人建议学python会比较好,难实现自动化运维,perl是文本处理很强大,反正这两个学一个就行了。

4、sed和awk工具

必须要掌握,在掌握这两个工具同时,还要掌握正则表达式,这个就痛苦了,正则是最难学的表达式,但结合到sed和awk中会很强大,在处理文本内容和过滤WEB内容时十分有用,不过在学shell的同时一般会经常结合用到的,所以学第3点就会顺便学第4点。

5、文本处理命令,sort , tr , cut, paste, uniq, tee等,必学,也是结合第3点时一并学习的。

6、数据库

首选MySQL,别问我为什么不学sqlserver和Oracle,因为linux用得最多绝对是mysql,增删改查必学,特别要学熟查,其它方面可能不太需要,因为运维人员使用最多还是查,哪些优化和开发语句不会让你弄的。

7、防火墙

不学不行,防火墙也算是个难点,说难不难,说易不易,最重要弄懂规则,如果学过CCNA的朋友可能会比较好学,因为iptables也有NAT表,原理是一样的,而FILTER表用得最多,反正不学就肯定不合格。

8、监控工具

十分十分重要,个人建议,最好学这3个,cacti,nagios,zibbix,企业用得最多应该是nagios和 zibbix,反正都学吧,但nagios会有点难,因为会涉及到用脚本写自动监控,那个地方很难。

9、集群和热备

这个很重要,肯定要懂的,但到了公司就不会让你去弄,因为新手基本不让你碰,集群工具有很多,最好学是LVS,这是必学,最好也学学nginx集群,反向代理,还有热备,这个就更多工具能实现了,像我公司是自己开发热备工具的,mysql热备也要学,就是主从复制,这个别告诉我容易,其实不容易的,要学懂整个流程一点也不容易,只照着做根本没意思。

10、数据备份

不学不行,工具有很多,但至少要把RAID的原理弄懂,特别是企业最常用的1+0或0+1,自己做实验也要弄出来,备份工具有很多,如tar, dump, rsync等,最好多了解一下。

 

说到这10点已经够你受了,应该可以入门了,因为有些技术会比较难学,例如apache和nginx中还有些很重要的技术,如系统调优和服务优化,还有程序优化,这些在没接触工作前很难学习到的,所以先把这10点学了吧,估计要学熟至少3个月不止,就脚本那部分已经让你很吃力了,达妹建议是先学熟shell,等工作后再学另一门脚本语言,这样会比较好。

以上就是踏入linux运维工程师需要掌握的工具,其实还有很多工具要掌握的,但你在学习环境中是很难学到,最后小微再提醒一下,这里所指的工具相当于技能,而不是像windows或ubuntu那些图形化工具,那些工具没用的,还有,学linux就别装图形界面,这样虚拟机就不用吃太多内存,而且绝对不建议在真机上装linux,根本达不到学习效果。

Linux云计算1月免费课程火热开启,5天免费**运维干货内容免费听,点击文末“阅读原文”**即可免费听运维课**速速来抢~~~~

**PS:记得查收小编送你的免费大礼包呦~**

福利 | 一万多套PPT模板等你免费来拿!无条件领取!


**免费送 | 1000多套简历模板免费拿,附赠简历制作教程!**

免费领 | 《Shell脚本 100例》电子书免费拿,运维必备干货~

▼▼点击【阅读原文】,免费听5天Linux运维干货分享课,火热开讲中,速来抢!

版权声明:本文由ag真人发布于公司领导,转载请注明出处:ag真人Linux运维不会这些,亡羊补牢