正如tez的github页面所说,tez非常简单,其核心只有两个组件:
-
数据处理流水线引擎,
-
数据处理应用程序的主程序,可以将上面描述的任意数据处理"任务"组合成一个任务- dag
我的第一个问题是,如何将存在于tez-examples.jar中的现有mapreduce作业(如wordcount)转换为task-DAG?在哪里?或者他们没有…?
我的第二个也是更重要的问题是关于这部分的
tez中的每个'task'都有以下内容:
- 输入从。
- 处理器处理它们
- 收集处理过的键/值对的输出。
谁负责在tez任务之间分割输入数据?是用户提供的代码,还是Yarn(资源管理器),甚至是tez本身?
对于输出阶段也是如此。提前感谢
关于将MapReduce作业转换为Tez dag的第一个问题:
任何MapReduce作业都可以被认为是一个具有2个顶点(阶段)的DAG。第一个顶点是Map阶段,它通过Shuffle边缘连接到下游顶点Reduce。
在Tez上运行MR作业有两种方式:
- 一种方法是直接使用Tez api编写原生的2阶段DAG。这就是目前在tez-examples中出现的情况。
- 第二种是使用MapReduce api本身并使用yarn-tez模式。在这个场景中,有一个层拦截MR作业提交,它不使用MR,而是将MR作业转换为2阶段的Tez DAG,并在Tez运行时执行DAG。
对于您的数据处理相关问题:
用户提供理解要读取的数据和如何分割数据的逻辑。然后Tez接收每个数据分割,并负责为给定任务分配一个或一组分割。
Tez框架然后控制数据的生成和移动,即在中间步骤之间生成数据的位置以及如何在两个顶点/阶段之间移动数据。但是,它不控制底层的数据内容/结构、分区或序列化逻辑,这些都是由用户插件提供的。以上只是一个具有额外复杂性的高级视图。通过将特定问题发布到开发列表(http://tez.apache.org/mail-lists.html),您将获得更详细的答案