PigLatin问题

时间:2015-06-01 21:00:09

标签: hadoop apache-pig

My Pig正在MapReduce模式下运行。现在我正在进行连接操作。 HDFS中有三个文件的复制,我怎么知道哪个DataNode可以从中加载数据?

我试图用explain来显示计划。 但它只显示数据是从hdfs:// masterNodeIP:8020 / data加载的 这是否意味着所有数据文件只需从此masterNode加载?

2 个答案:

答案 0 :(得分:0)

打开MapReduce管理web ui(通常为http://masterNode:50030/)并找到作业(您可以通过id识别它,猪记录它)。打开它,你会看到一堆地图任务,每个任务都分配给你群集中的特定节点。每个映射任务对应一个HDFS块。 MapReduce总是尝试将任务执行并置到存储相应块的节点。

答案 1 :(得分:0)

我试图解释Hadoop中的读写过程。希望它能帮助你理解你的困惑。

HDFS上的数据写入过程:

客户端机器首先将文件拆分为块说块A,块B然后客户机与NameNode交互以询问放置这些块的位置(块A块B).NameNode给clinet写一个数据节点列表数据。

然后客户端从这些列表中选择第一个datanode并将第一个块写入datanode,datanode将块复制到另一个datanode,一旦第二个datanode接收到复制块,它就会将块接收到的确认报告给主datanode和主datanode更新块信息到NameNode。 NameNode保留有关文件及其相关块的信息。

您可以通过DFS浏览器查看块,如果您知道文件名。

转到您的namenode网络界面,说"浏览文件系统"并导航到您感兴趣的文件。在页面底部,将有一个文件中所有块的列表,以及每个块所在的位置。

或者,您可以通过命令提示符运行命令:

hadoop fsck / -files -blocks -locations

要查看特定文件的块:

hadoop fsck [path] [options]
hadoop fsck /path/to/file -files -blocks

来自HDFS的数据读取过程:

当客户端发出读取数据的请求(用户提供文件位置或文件名以读取数据)时,客户端首先与NameNode交互并询问数据的位置。 NameNode返回有关该特定文件的关联块和块位置的信息,然后客户端直接与datanode交互以获取该块。

当您通过pig,hive或Map / Reduce处理数据时,您的作业将转到该特定节点,并在您的数据所在的节点上进行处理,并在完成作业后获得组合输出。

link有助于理解这一点。