某公司运维第一次电话面试

问题一:你的特长是什么,你最擅长什么?


问题二:介绍下redis,redis是个什么东西?


问题三:介绍下redis的master、slave架构。


问题四:说下选举协议(因为我前面说到了故障恢复),如果master挂掉怎么办?


问题五:这个协议有什么缺陷?


问题六:之前说到自动故障恢复,都有哪些故障?


问题七:redis的吞吐量是多少(读写性能)?


问题八:hadoop的mapreduce是怎样一个过程?(简历上写着了解一些hadoop技术。。。)map是怎么切分数据的?(这个问题不懂是什么意思)


问题九:master单点失效问题,yarn是什么,最新版是怎么解决单点失效问题的?


为什么要YARN:由于MRv1在扩展性、可靠性、资源利用率和多框架等方面的不足,Apache开始尝试对MapReduc进行升级改造,于是诞生了更加先进的下一代MapReduce框架。由于MRv2将资源管理模块构建成了一个独立的通用系统YARN,这使得MRv2的核心从计算框架MapReduce转移为资源管理系统YARN。

yarn把原来MapReduce的JobTracker的资源管理和作业管理两个功能分别提出来,资源管理变成统一的资源管理平台ResourceManager,作业管理变成ApplicationMaster(用户提交的每个作业都对应一个AM)。YARN的工作流程分为以下几个步骤:

步骤一:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动AM的命令、用户程序等。

步骤二:ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求他在这个Container中启动应用程序的AM。

步骤三:AM首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后他将为各个任务申请资源,并监控他的运行状态,直到运行结束,即重复步骤4~7。

步骤四:AM采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

步骤五:一旦AM申请到资源后,便与对应的NodeManager通信,要求他启动任务。

步骤六:NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

步骤七:各个任务通过某个RPC协议向AM汇报自己的状态和进度,以让AM随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可以随时通过RPC向AM查询应用程序的当前运行状态。

步骤八:应用程序运行完成后,AM向ResourceManager注销并关闭自己。


MapReduce工作流程




Jobclient的runJob方法是用于新建JobClient实例并调用其submitJob方法的便捷方式(步骤一)。提交作业后,runJob每秒轮询作业的进度,如果发现

上次报告后有改变,便把进度报告到控制台。作业完成后,如果成功,就显示作业计数器。如果失败,导致作业失败的错误被记录到控制台。

步骤二:submitJob方法向jobtracker请求一个新的作业ID(通过调用jobtracker的getNewJobId方法获取)。检查作业的输出说明。例如,如果没有指定输出目录或者输出目录已经存在,作业就不提交,错误返回给MapReduce程序。计算作业的输入分片。如果分片无法计算,比如因为输入路径不存在,作业就不提交,错误返回给Mapreduce程序。

步骤三:将运行作业所需要的资源(包括作业JAR文件、配置文件和计算所得的输入分片)复制到一个以作业ID命名的目录下jobtracker的文件系统中。作业JAR的副本较多(由mapred.submit.replication属性控制,默认值为10),因此在运行作业的任务时,集群中有很多个副本可供tasktracker访问。

步骤四:告知jobtracker作业准备执行(通过调用jobtracker的submitjob方法实现)。

步骤五:作业初始化。当jobtracker接收到对其submitjob方法的调用后,会把此调用放入一个内部队列中,交由作业调度器(job scheduler)进行调度,并对其进行初始化。初始化包括创建一个表示正在运行作业的对象----封装任务和记录信息,以便跟踪任务的状态和进程。

步骤六:为了创建任务运行列表,作业调度器首先从共享文件系统中获取jobclient已计算好的输入分片信息。然后为每个分片创建一个map任务。创建的reduce任务的数量由jobconf的mapred.reduce.task属性决定,它是用setNumReduceTasks方法来设置的,然后调度器创建相应数量的要运行的reduce任务。任务在此时被指定ID。

步骤七:任务的分配。tasktracker运行一个简单的循环来定期发送“心跳”给jobtracker,告知jobtracker,tasktracker是否还存活,同时也充当两者之间的消息通道。作为“心跳”的一部分,tasktracker会指明他是否已经准备好运行新的任务,如果是,JT会为他分配一个任务,并使用“心跳”的返回值与TT进行通信。

步骤八:任务的执行。TT已经被分配了一个任务,然后第一步:通过从共享文件系统把作业的JAR文件复制到TT所在的文件系统,从而实现作业的JAR文件本地化。同时,TT将应用程序所需要的全部文件从分布式缓存复制到本地磁盘。第二步:TT为任务新建一个本地工作目录,并把JAR文件中的内容解压到这个文件夹下。第三步:TT新建一个TaskRunner实例来运行该任务。

步骤九和十:TR启动一个新的JVM来运行每个任务,以便用户定义的map和reduce函数的任何软件问题都不会影响到TT(例如导致崩溃或挂起等)。但在不同的任务之间重用JVM还是可能的。


问题十:链表和数组的区别?


问题十一:进程间通信的方式?


问题十二:给你200亿的数据,每条数据1K-1M不等,每条数据有唯一64位的id,内存有16G。设计一个系统,怎样有效的利用内存找到其中的某一条数据?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值