[ 
https://issues.apache.org/jira/browse/HADOOP-3062?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12618896#action_12618896
 ] 

Chris Douglas commented on HADOOP-3062:
---------------------------------------

The analysis should leverage HADOOP-3719, so this issue should cover the log4j 
appender emitting the HDFS and shuffling data. There are a few open questions 
and arguable assumptions:

* Should this count bytes successfully transferred separately from failed 
transfers? Should failed transfers be logged at all?
* The header/metadata/etc. traffic is assumed to be a negligible fraction of 
the total network traffic and irrelevant to the analysis for a particular job. 
The overall network utilization is also best measured using standard monitoring 
utilities that don't require any knowledge of Hadoop. This will focus on 
tracking block traffic over HDFS (reads, writes, replications) and map output 
fetched during the shuffle, only.
* For local reads, the source and destination IP will match. This should be 
sufficient to detect and discard during analysis of network traffic, but will 
not be sufficient to account for all reads from the local disk (counters and 
job history are likely better tools for this).
* Accounting for topology (to break down by racks, etc.) is best deferred to 
the analysis. Logging changes in topology would also be helpful, though I don't 
know whether Hadoop has sufficient information to do this in the general case.
* If job information is available (in the shuffle), should it be included in 
the entry? Doing this for HDFS is non-trivial, but would be invaluable to the 
analysis. I'm not certain how to do this, yet. Of course, replications and 
rebalancing won't include this, and HDFS reads prior to job submission (and all 
other traffic from JobClient) will likely be orphaned, as well.
* Should this include start/end entries so one can infer how long the transfer 
took?
* What about DistributedCache? Can it be ignored as part of the job setup, 
which is already omitted?

In general, the format will follow:
{noformat}
<log4j schema including timestamp, etc.> source: <src IP>, destination: <dst 
IP>, bytes: <bytes>, operation: <op enum>[, taskid: <TaskID>]
{noformat}

Where {{<(src|dst) IP>}} is the IP address of the source and destination nodes, 
{{<bytes>}} is a long, and {{<op enum>}} is one of {{HDFS_READ}}, 
{{HDFS_WRITE}}, {{HDFS_COPY}}, and {{MAPRED_SHUFFLE}}. {{HDFS_REPLACE}} should 
be redundant if {{HDFS_COPY}} is recorded (I think). The rebalancing traffic 
isn't relevant to job analysis, but if one is including sufficient information 
to determine the duration of each transfer it may be interesting. The TaskID 
should be sufficient, but one could argue that including the JobID would be 
useful as a point to join on.

Thoughts?

> Need to capture the metrics for the network ios generate by dfs reads/writes 
> and map/reduce shuffling  and break them down by racks 
> ------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-3062
>                 URL: https://issues.apache.org/jira/browse/HADOOP-3062
>             Project: Hadoop Core
>          Issue Type: Improvement
>          Components: metrics
>            Reporter: Runping Qi
>
> In order to better understand the relationship between hadoop performance and 
> the network bandwidth, we need to know 
> what the aggregated traffic data in a cluster and its breakdown by racks. 
> With these data, we can determine whether the network 
> bandwidth is the bottleneck when certain jobs are running on a cluster.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to