我的Pig正在mapreduce模式下运行。现在我在做一个连接操作。hdfs中有三个文件的复制,如何知道pig从哪个datanode加载数据?我试着用解释来展示计划。但它只显示数据是从hdfs://masternodeip:8020/data这是否意味着所需的所有数据文件仅从该主节点加载?
mf98qq941#
我试图解释hadoop中的读写过程。希望它能帮助你理解你的困惑。hdfs上的数据写入过程:客户机首先将文件分为块,例如块a、块b,然后客户机与namenode交互,请求放置这些块的位置(块a、块b)。namenode向clinet提供一个datanode列表以写入数据。然后客户机从这些列表中选择第一个datanode,并将第一个块写入datanode,datanode将该块复制到另一个datanode,一旦第二个datanode接收到复制的块,它将接收到的块确认给主datanode,主datanode将块信息更新到namenode。namenode保存有关文件及其关联块的信息。如果知道文件名,可以通过dfs浏览器查看这些块。转到namenodeweb界面,说“浏览文件系统”,然后导航到您感兴趣的文件。在页面的底部,会有一个文件中所有块的列表,以及这些块的位置。或者,可以通过命令提示符运行命令:
hadoop fsck / -files -blocks -locations
要查看特定文件的块:
hadoop fsck [path] [options] hadoop fsck /path/to/file -files -blocks
从hdfs读取数据的过程:当客户机请求读取数据(用户提供文件位置或文件名以读取数据)时,客户机首先与namenode交互并请求数据的位置。namenode返回有关特定文件的关联块和块位置的信息,然后客户机直接与datanode交互以获取块。当您通过pig、hive或map/reduce处理数据时,您的作业将转到该特定节点,并在数据所在的节点上进行处理,作业完成后,您将获得组合输出。此链接有助于理解这一点。
mbskvtky2#
打开mapreduce管理web ui(通常是http://masternode:50030/)并找到作业(您可以通过id标识它,pig记录它)。打开它,您将看到一堆Map任务,每个任务分配给集群中的特定节点)。每个map任务对应一个hdfs块。mapreduce总是尝试将任务执行与存储相应块的节点并置。
2条答案
按热度按时间mf98qq941#
我试图解释hadoop中的读写过程。希望它能帮助你理解你的困惑。
hdfs上的数据写入过程:
客户机首先将文件分为块,例如块a、块b,然后客户机与namenode交互,请求放置这些块的位置(块a、块b)。namenode向clinet提供一个datanode列表以写入数据。
然后客户机从这些列表中选择第一个datanode,并将第一个块写入datanode,datanode将该块复制到另一个datanode,一旦第二个datanode接收到复制的块,它将接收到的块确认给主datanode,主datanode将块信息更新到namenode。namenode保存有关文件及其关联块的信息。
如果知道文件名,可以通过dfs浏览器查看这些块。
转到namenodeweb界面,说“浏览文件系统”,然后导航到您感兴趣的文件。在页面的底部,会有一个文件中所有块的列表,以及这些块的位置。
或者,可以通过命令提示符运行命令:
要查看特定文件的块:
从hdfs读取数据的过程:
当客户机请求读取数据(用户提供文件位置或文件名以读取数据)时,客户机首先与namenode交互并请求数据的位置。namenode返回有关特定文件的关联块和块位置的信息,然后客户机直接与datanode交互以获取块。
当您通过pig、hive或map/reduce处理数据时,您的作业将转到该特定节点,并在数据所在的节点上进行处理,作业完成后,您将获得组合输出。
此链接有助于理解这一点。
mbskvtky2#
打开mapreduce管理web ui(通常是http://masternode:50030/)并找到作业(您可以通过id标识它,pig记录它)。打开它,您将看到一堆Map任务,每个任务分配给集群中的特定节点)。每个map任务对应一个hdfs块。mapreduce总是尝试将任务执行与存储相应块的节点并置。