当前位置: 首页 > news >正文

不用付费就可以看亏亏的app关键词优化推广

不用付费就可以看亏亏的app,关键词优化推广,天门网站定制,网站结构流程图怎么做这部分的计划是这样的,首先解释JobTracker的启动过程和作业从JobClient提交到JobTracker上;然后分析TaskTracker和heartbeat;最后将整个流程debug一遍来加深映象。 在看JobTracker源代码的时候就会发现,它里边有main()方法&#x…

  这部分的计划是这样的,首先解释JobTracker的启动过程和作业从JobClient提交到JobTracker上;然后分析TaskTracker和heartbeat;最后将整个流程debug一遍来加深映象。

  在看JobTracker源代码的时候就会发现,它里边有main()方法,这就说明了它是一个独立的java进程。在hadoop根目录下的bin文件夹中的hadoop脚本中可以看到,它指定了JobTracker类。如下图所示:

  JobTracker的main()方法中最主要的是以下两条语句:

 1 public static void main(String argv[]
 2                           ) throws IOException, InterruptedException {
 3     StringUtils.startupShutdownMessage(JobTracker.class, argv, LOG);
 4     
 5     try {
 6       if(argv.length == 0) {
 7         JobTracker tracker = startTracker(new JobConf());//用来生成JobTracker对象
 8         tracker.offerService();//初始化JobTracker,并启动作业调度器
 9       }
10       else {
11         if ("-dumpConfiguration".equals(argv[0]) && argv.length == 1) {
12           dumpConfiguration(new PrintWriter(System.out));
13         }
14         else {
15           System.out.println("usage: JobTracker [-dumpConfiguration]");
16           System.exit(-1);
17         }
18       }
19     } catch (Throwable e) {
20       LOG.fatal(StringUtils.stringifyException(e));
21       System.exit(-1);
22     }
23   }

  startTracker()方法比较简单,通过几次方法调用最终生成JobTracker对象。下面重点分析offerService()方法。由于篇幅限制,只列出了最重要的部分:

 1 public void offerService() throws InterruptedException, IOException {
 2      ......
 3 
 4     // Initialize the JobTracker FileSystem within safemode
 5     setSafeModeInternal(SafeModeAction.SAFEMODE_ENTER);
 6     initializeFilesystem();
 7     setSafeModeInternal(SafeModeAction.SAFEMODE_LEAVE);
 8     
 9     // Initialize JobTracker
10     initialize();
11     
12      ......
13     taskScheduler.start();

  首先进入安全模式下(SAFEMODE_ENTER),初始化文件系统,然后退出安全模式(SAFEMODE_LEAVE)。然后初始化JobTracker。最后启动作业调度器(TaskScheduler)。默认的作业调度器是JobQueueTaskScheduler,在mapred-default.xml中配置。所以taskScheduler.start()会调用JobQueueTaskScheduler的start()方法。如下所示:

  JobQueueTaskScheduler使用FIFO来对job进行调度。下面来进入到JobQueueTaskScheduler来分析start()方法。

1 @Override
2   public synchronized void start() throws IOException {
3     super.start();
4     taskTrackerManager.addJobInProgressListener(jobQueueJobInProgressListener);
5     eagerTaskInitializationListener.setTaskTrackerManager(taskTrackerManager);
6     eagerTaskInitializationListener.start();
7     taskTrackerManager.addJobInProgressListener(
8         eagerTaskInitializationListener);
9   }

  这里用到了观察者模式,JobQueueTaskScheduler向JobTracker注册了两个JobInProgressListener:EagerTaskInitializationListener和JobQueueJobInProgressListener,分别用于作业初始化和作业排序。

  这里的taskTrackerManager实际上是JobTracker,因为JobTracker的父类就是TaskTrackerManager。在JobTracker的startTracker()方法中,将JobTracker实例传递给TaskTrackerManager。如下所示:  

1 public static JobTracker startTracker(JobConf conf, String identifier, boolean initialize) 
2   throws IOException, InterruptedException {
3     DefaultMetricsSystem.initialize("JobTracker");
4     JobTracker result = null;
5     while (true) {
6       try {
7         result = new JobTracker(conf, identifier);
8         result.taskScheduler.setTaskTrackerManager(result);
9        ......

  在eagerTaskInitializationListener.start()方法启动一个线程JobInitManager,这个线程用来监控jobInitQueue,即List<JobInProgress>。当有新的job(JobInProgress)加入到队列中时,JobInitManager线程就对其进行初始化。

 

 1 class JobInitManager implements Runnable {
 2    
 3     public void run() {
 4       JobInProgress job = null;
 5       while (true) {
 6         try {
 7           synchronized (jobInitQueue) {
 8             while (jobInitQueue.isEmpty()) {
 9               jobInitQueue.wait();
10             }
11             job = jobInitQueue.remove(0); //从队列中拿出一个job
12           }
13           threadPool.execute(new InitJob(job)); //对job进行初始化
14         } catch (InterruptedException t) {
15           LOG.info("JobInitManagerThread interrupted.");
16           break;
17         } 
18       }
19       LOG.info("Shutting down thread pool");
20       threadPool.shutdownNow();
21     }
22   }
23 
24 class InitJob implements Runnable {
25   
26     private JobInProgress job;
27     
28     public InitJob(JobInProgress job) {
29       this.job = job;
30     }
31     
32     public void run() {
33       ttm.initJob(job); //实质上调用JobTracker的initJob()方法进行初始化
34     }
35   }

 

  这里JobInitManager线程最终调用了JobTracker的initJob()方法来对job进行初始化。具体过程下篇文章中再写。

   最后画个流程图来总结一下,画的不好,将就看一下吧。

   本文基于hadoop1.2.1

   如有错误,还请指正

   参考文章:《Hadoop技术内幕 深入理解MapReduce架构设计与实现原理》 董西成

  转载请注明出处:http://www.cnblogs.com/gwgyk/p/3998753.html 

转载于:https://www.cnblogs.com/gwgyk/p/3998753.html

http://www.lbrq.cn/news/2583127.html

相关文章:

  • 一级消防工程师考试条件肇庆seo外包公司
  • 酒店网站建设流程图火星时代教育培训机构怎么样
  • wordpress 酒店seo网络排名优化技巧
  • int域名网站有哪些腾讯会议多少钱一个月
  • wordpress电影站数据下载seo赚钱吗
  • wordpress站点主页恶意点击广告软件
  • 网上购物网站建设网页优化公司
  • dedecms转换wordpressseo研究院
  • 做网站用的军事图片夸克搜索入口
  • 网站改版好吗网站如何优化排名
  • 淄博桓台网站建设方案seo在线诊断工具
  • 深圳西乡做网站茂名seo快速排名外包
  • 网站开发使用软件环境免费seo刷排名
  • 黑龙江网站备案地址友情链接出售
  • 网站导航插件日照网络推广公司
  • 开源网站推广sem竞价推广
  • 做网站需要美工吗百度站长官网
  • 竞价网站制作怎样进入12345的公众号
  • 深圳找网站建设亚马逊跨境电商个人开店
  • 网站建设百度客服电话天津网站制作系统
  • 网站费做进什么科目seo搜索排名优化公司
  • 网站建设管理分工竞价广告点击软件
  • 个人网站备案名称大全成都疫情最新情况
  • 山东网站建设推广关联词有哪些关系
  • 漯河网站建设 千弘网络信息流优化师是什么
  • 网站制作上海市关键词搜索趋势
  • 网站技术有哪些搜索热门关键词
  • 最好的网页设计网站宁波seo在线优化
  • 莱芜有需要制作网站的公司吗免费b站推广网站2022
  • 新加坡的网站域名上海关键词自动排名
  • 第15届蓝桥杯Scratch图形化国赛初/中级组2024年9月7日真题
  • 2106. 摘水果
  • 服务器中切换盘的操作指南
  • 专网内网IP攻击应急与防御方案
  • 一个网页的加载过程详解
  • Java线程安全类设计思路总结