很全面 |
谢谢楼主,讲的比较清楚,估计实践之后会有更加深入的理解 |
感觉讲的还是比较清楚了,但是有个问题还想请教一下!既然一个节点上每个TaskTracker可以产生多个java 虚拟机(JVM),用于并行处理多个map以及reduce任务,那么如果需要全局共享变量,这里使用distributedCache实现,那么每个map都在自己独立的jvm中读取这个缓存文件么,如果这个缓存文件的体积特别大,那不是意味着受内存限制,一个节点根本跑不了几个map,性能甚至比不过单机多线程,因为单机多线程是可以共享内存,那就意味着可以开很多线程啊(这里都是假设处理器足够强大) |
理解50% |
1.job的本质是什么? 在MapReduce中,一个准备提交执行的应用程序称为“作业(job)” 2.任务的本质是什么? 从一个作业划分出 得、运行于各个计算节点的工作单元称为“任务(task)” 3.文件系统的Namespace由谁来管理,Namespace的作用是什么? Namenode 管理者文件系统的Namespace 4.Namespace 镜像文件(Namespace image)和操作日志文件(edit log)文件的作用是什 么? Namenode 管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及 文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分 别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log) 5.Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化 存储这些信息,为什么? 因为这些信息会在系统启动因为这些信息会在系统启动时从数据节点重建。 6.客户端读写某个数据时,是否通过NameNode? 当需要通过客户端读/写某个 数据时,先由NameNode告诉客户端去哪个DataNode进行 具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通 信 ,并且对相关的数据块进行读/写操作。 8.一旦某个task失败了,JobTracker如何处理? 一旦某个task失败了,JobTracker就会自动重新开启这个task 9.JobClient JobClient在获取了JobTracker为Job分配的id之后,会在JobTracker的 系统目录(HDFS)下为该Job创建一个单独的目录,目录的名字即是Job的id,该目录下 会包含文件job.xml、job.jar等文件,这两个文件的作用是什么? 10.JobTracker根据什么就能得到这个Job目录? JobTracker只要根据JobId就能得到这个Job目录。 11.JobTracker提交作业之前,为什么要检查内存? 客户端提交作业之前,会根据实际的应用情况配置作业任务的内存需求,同时 JobTracker为了提高作业的吞吐量会限制作业任务的内存需求,所以在Job的提交时, JobTracker需要检查Job的内存需求是否满足JobTracker的设置。 12.每个TaskTracker产生多个java 虚拟机(JVM)的原因是什么? 每个TaskTracker可以产生多个java 虚拟机(JVM),用于并行处理多个map以及reduce任务 |