org.apache.hadoop.mapreduce.CounterGroup Java Examples
The following examples show how to use
org.apache.hadoop.mapreduce.CounterGroup.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: JobCounterInfo.java From big-c with Apache License 2.0 | 6 votes |
public JobCounterInfo(AppContext ctx, Job job) { getCounters(ctx, job); counterGroup = new ArrayList<CounterGroupInfo>(); this.id = MRApps.toString(job.getID()); if (total != null) { for (CounterGroup g : total) { if (g != null) { CounterGroup mg = map == null ? null : map.getGroup(g.getName()); CounterGroup rg = reduce == null ? null : reduce .getGroup(g.getName()); CounterGroupInfo cginfo = new CounterGroupInfo(g.getName(), g, mg, rg); counterGroup.add(cginfo); } } } }
Example #2
Source File: JoinPhaseJob.java From incubator-pinot with Apache License 2.0 | 6 votes |
private void dumpSummary(Job job, List<String> sourceNames) throws IOException { System.out.println("Join Input Matrix."); CounterGroup group = job.getCounters().getGroup("DynamicCounter"); for (String source : sourceNames) { System.out.print(String.format("%25s\t", source)); } if (group != null) { Iterator<Counter> iterator = group.iterator(); while (iterator.hasNext()) { Counter counter = iterator.next(); String displayName = counter.getDisplayName(); String[] split = displayName.replace("[", "").replace("[", "").split(","); for (String str : split) { if (str.trim().equals("1")) { System.out.print(String.format("%25s\t", "1")); } else { System.out.print(String.format("%25s\t", "-")); } } } } }
Example #3
Source File: BlurInputFormatTest.java From incubator-retired-blur with Apache License 2.0 | 6 votes |
private void assertMapTask(int i, Counters counters) { for (CounterGroup counterGroup : counters) { String name = counterGroup.getName(); boolean jobCounterGroup = false; if (name.equals("org.apache.hadoop.mapreduce.JobCounter")) { jobCounterGroup = true; } else if (name.equals("org.apache.hadoop.mapred.JobInProgress$Counter")) { jobCounterGroup = true; } if (jobCounterGroup) { for (Counter counter : counterGroup) { if (counter.getName().equals("TOTAL_LAUNCHED_MAPS")) { assertEquals(1, counter.getValue()); return; } } } } fail(); }
Example #4
Source File: MRJobLauncher.java From incubator-gobblin with Apache License 2.0 | 6 votes |
/** * Create a {@link org.apache.gobblin.metrics.GobblinMetrics} instance for this job run from the Hadoop counters. */ @VisibleForTesting void countersToMetrics(GobblinMetrics metrics) throws IOException { Optional<Counters> counters = Optional.fromNullable(this.job.getCounters()); if (counters.isPresent()) { // Write job-level counters CounterGroup jobCounterGroup = counters.get().getGroup(MetricGroup.JOB.name()); for (Counter jobCounter : jobCounterGroup) { metrics.getCounter(jobCounter.getName()).inc(jobCounter.getValue()); } // Write task-level counters CounterGroup taskCounterGroup = counters.get().getGroup(MetricGroup.TASK.name()); for (Counter taskCounter : taskCounterGroup) { metrics.getCounter(taskCounter.getName()).inc(taskCounter.getValue()); } } }
Example #5
Source File: HadoopMapReduceCounters.java From ignite with Apache License 2.0 | 6 votes |
/** {@inheritDoc} */ @Override public Iterator<CounterGroup> iterator() { final Iterator<String> iter = getGroupNames().iterator(); return new Iterator<CounterGroup>() { @Override public boolean hasNext() { return iter.hasNext(); } @Override public CounterGroup next() { if (!hasNext()) throw new NoSuchElementException(); return new HadoopMapReduceCounterGroup(HadoopMapReduceCounters.this, iter.next()); } @Override public void remove() { throw new UnsupportedOperationException("not implemented"); } }; }
Example #6
Source File: EventWriter.java From big-c with Apache License 2.0 | 6 votes |
static JhCounters toAvro(Counters counters, String name) { JhCounters result = new JhCounters(); result.name = new Utf8(name); result.groups = new ArrayList<JhCounterGroup>(0); if (counters == null) return result; for (CounterGroup group : counters) { JhCounterGroup g = new JhCounterGroup(); g.name = new Utf8(group.getName()); g.displayName = new Utf8(group.getDisplayName()); g.counts = new ArrayList<JhCounter>(group.size()); for (Counter counter : group) { JhCounter c = new JhCounter(); c.name = new Utf8(counter.getName()); c.displayName = new Utf8(counter.getDisplayName()); c.value = counter.getValue(); g.counts.add(c); } result.groups.add(g); } return result; }
Example #7
Source File: JobHistoryEventHandler.java From big-c with Apache License 2.0 | 6 votes |
@Private public JsonNode countersToJSON(Counters counters) { ObjectMapper mapper = new ObjectMapper(); ArrayNode nodes = mapper.createArrayNode(); if (counters != null) { for (CounterGroup counterGroup : counters) { ObjectNode groupNode = nodes.addObject(); groupNode.put("NAME", counterGroup.getName()); groupNode.put("DISPLAY_NAME", counterGroup.getDisplayName()); ArrayNode countersNode = groupNode.putArray("COUNTERS"); for (Counter counter : counterGroup) { ObjectNode counterNode = countersNode.addObject(); counterNode.put("NAME", counter.getName()); counterNode.put("DISPLAY_NAME", counter.getDisplayName()); counterNode.put("VALUE", counter.getValue()); } } } return nodes; }
Example #8
Source File: JobTaskAttemptCounterInfo.java From big-c with Apache License 2.0 | 6 votes |
public JobTaskAttemptCounterInfo(TaskAttempt taskattempt) { this.id = MRApps.toString(taskattempt.getID()); total = taskattempt.getCounters(); taskAttemptCounterGroup = new ArrayList<TaskCounterGroupInfo>(); if (total != null) { for (CounterGroup g : total) { if (g != null) { TaskCounterGroupInfo cginfo = new TaskCounterGroupInfo(g.getName(), g); if (cginfo != null) { taskAttemptCounterGroup.add(cginfo); } } } } }
Example #9
Source File: EventWriter.java From hadoop with Apache License 2.0 | 6 votes |
static JhCounters toAvro(Counters counters, String name) { JhCounters result = new JhCounters(); result.name = new Utf8(name); result.groups = new ArrayList<JhCounterGroup>(0); if (counters == null) return result; for (CounterGroup group : counters) { JhCounterGroup g = new JhCounterGroup(); g.name = new Utf8(group.getName()); g.displayName = new Utf8(group.getDisplayName()); g.counts = new ArrayList<JhCounter>(group.size()); for (Counter counter : group) { JhCounter c = new JhCounter(); c.name = new Utf8(counter.getName()); c.displayName = new Utf8(counter.getDisplayName()); c.value = counter.getValue(); g.counts.add(c); } result.groups.add(g); } return result; }
Example #10
Source File: JobHistoryEventHandler.java From hadoop with Apache License 2.0 | 6 votes |
@Private public JsonNode countersToJSON(Counters counters) { ObjectMapper mapper = new ObjectMapper(); ArrayNode nodes = mapper.createArrayNode(); if (counters != null) { for (CounterGroup counterGroup : counters) { ObjectNode groupNode = nodes.addObject(); groupNode.put("NAME", counterGroup.getName()); groupNode.put("DISPLAY_NAME", counterGroup.getDisplayName()); ArrayNode countersNode = groupNode.putArray("COUNTERS"); for (Counter counter : counterGroup) { ObjectNode counterNode = countersNode.addObject(); counterNode.put("NAME", counter.getName()); counterNode.put("DISPLAY_NAME", counter.getDisplayName()); counterNode.put("VALUE", counter.getValue()); } } } return nodes; }
Example #11
Source File: JobCounterInfo.java From hadoop with Apache License 2.0 | 6 votes |
public JobCounterInfo(AppContext ctx, Job job) { getCounters(ctx, job); counterGroup = new ArrayList<CounterGroupInfo>(); this.id = MRApps.toString(job.getID()); if (total != null) { for (CounterGroup g : total) { if (g != null) { CounterGroup mg = map == null ? null : map.getGroup(g.getName()); CounterGroup rg = reduce == null ? null : reduce .getGroup(g.getName()); CounterGroupInfo cginfo = new CounterGroupInfo(g.getName(), g, mg, rg); counterGroup.add(cginfo); } } } }
Example #12
Source File: JobMetrics.java From circus-train with Apache License 2.0 | 6 votes |
public JobMetrics(Job job, String bytesReplicatedKey) { Builder<String, Long> builder = ImmutableMap.builder(); if (job != null) { Counters counters; try { counters = job.getCounters(); } catch (IOException e) { throw new CircusTrainException("Unable to get counters from job.", e); } if (counters != null) { for (CounterGroup group : counters) { for (Counter counter : group) { builder.put(DotJoiner.join(group.getName(), counter.getName()), counter.getValue()); } } } } metrics = builder.build(); Long bytesReplicatedValue = metrics.get(bytesReplicatedKey); if (bytesReplicatedValue != null) { bytesReplicated = bytesReplicatedValue; } else { bytesReplicated = 0L; } }
Example #13
Source File: CounterDump.java From datawave with Apache License 2.0 | 6 votes |
public String toString() { StringBuilder builder = new StringBuilder(); while (source.hasNext()) { Entry<String,Counters> nextCntr = source.next(); builder.append("\n").append(nextCntr.getKey()).append("\n----------------------\n"); Counters counters = nextCntr.getValue(); for (String groupName : counters.getGroupNames()) { CounterGroup group = counters.getGroup(groupName); Iterator<Counter> cntrItr = group.iterator(); while (cntrItr.hasNext()) { Counter counter = cntrItr.next(); builder.append(groupName).append("\t").append(counter.getDisplayName()).append("=").append(counter.getValue()).append("\n"); } } } return builder.toString(); }
Example #14
Source File: JsonCountersIterator.java From datawave with Apache License 2.0 | 6 votes |
@Override public JsonElement serialize(CounterGroup cg, Type t, JsonSerializationContext ctx) { JsonObject obj = new JsonObject(); if (!cg.getName().equals(cg.getDisplayName())) obj.addProperty("displayName", cg.getDisplayName()); JsonObject dns = new JsonObject(); boolean anyNamesDiffer = false; for (Counter c : cg) { obj.addProperty(c.getName(), c.getValue()); if (!c.getName().equals(c.getDisplayName())) anyNamesDiffer = true; dns.addProperty(c.getName(), c.getDisplayName()); } if (anyNamesDiffer) obj.add("displayNames", dns); return obj; }
Example #15
Source File: JobTaskAttemptCounterInfo.java From hadoop with Apache License 2.0 | 6 votes |
public JobTaskAttemptCounterInfo(TaskAttempt taskattempt) { this.id = MRApps.toString(taskattempt.getID()); total = taskattempt.getCounters(); taskAttemptCounterGroup = new ArrayList<TaskCounterGroupInfo>(); if (total != null) { for (CounterGroup g : total) { if (g != null) { TaskCounterGroupInfo cginfo = new TaskCounterGroupInfo(g.getName(), g); if (cginfo != null) { taskAttemptCounterGroup.add(cginfo); } } } } }
Example #16
Source File: TestJobHistoryEventHandler.java From big-c with Apache License 2.0 | 5 votes |
@Test (timeout=50000) public void testCountersToJSON() throws Exception { JobHistoryEventHandler jheh = new JobHistoryEventHandler(null, 0); Counters counters = new Counters(); CounterGroup group1 = counters.addGroup("DOCTORS", "Incarnations of the Doctor"); group1.addCounter("PETER_CAPALDI", "Peter Capaldi", 12); group1.addCounter("MATT_SMITH", "Matt Smith", 11); group1.addCounter("DAVID_TENNANT", "David Tennant", 10); CounterGroup group2 = counters.addGroup("COMPANIONS", "Companions of the Doctor"); group2.addCounter("CLARA_OSWALD", "Clara Oswald", 6); group2.addCounter("RORY_WILLIAMS", "Rory Williams", 5); group2.addCounter("AMY_POND", "Amy Pond", 4); group2.addCounter("MARTHA_JONES", "Martha Jones", 3); group2.addCounter("DONNA_NOBLE", "Donna Noble", 2); group2.addCounter("ROSE_TYLER", "Rose Tyler", 1); JsonNode jsonNode = jheh.countersToJSON(counters); String jsonStr = new ObjectMapper().writeValueAsString(jsonNode); String expected = "[{\"NAME\":\"COMPANIONS\",\"DISPLAY_NAME\":\"Companions " + "of the Doctor\",\"COUNTERS\":[{\"NAME\":\"AMY_POND\",\"DISPLAY_NAME\"" + ":\"Amy Pond\",\"VALUE\":4},{\"NAME\":\"CLARA_OSWALD\"," + "\"DISPLAY_NAME\":\"Clara Oswald\",\"VALUE\":6},{\"NAME\":" + "\"DONNA_NOBLE\",\"DISPLAY_NAME\":\"Donna Noble\",\"VALUE\":2}," + "{\"NAME\":\"MARTHA_JONES\",\"DISPLAY_NAME\":\"Martha Jones\"," + "\"VALUE\":3},{\"NAME\":\"RORY_WILLIAMS\",\"DISPLAY_NAME\":\"Rory " + "Williams\",\"VALUE\":5},{\"NAME\":\"ROSE_TYLER\",\"DISPLAY_NAME\":" + "\"Rose Tyler\",\"VALUE\":1}]},{\"NAME\":\"DOCTORS\",\"DISPLAY_NAME\"" + ":\"Incarnations of the Doctor\",\"COUNTERS\":[{\"NAME\":" + "\"DAVID_TENNANT\",\"DISPLAY_NAME\":\"David Tennant\",\"VALUE\":10}," + "{\"NAME\":\"MATT_SMITH\",\"DISPLAY_NAME\":\"Matt Smith\",\"VALUE\":" + "11},{\"NAME\":\"PETER_CAPALDI\",\"DISPLAY_NAME\":\"Peter Capaldi\"," + "\"VALUE\":12}]}]"; Assert.assertEquals(expected, jsonStr); }
Example #17
Source File: IngestMetricsSummaryLoader.java From datawave with Apache License 2.0 | 5 votes |
private static String checkForIngestLabelOverride(Counters ingestJobCounters) { CounterGroup jobQueueName = ingestJobCounters.getGroup(IngestProcess.METRICS_LABEL_OVERRIDE.name()); if (jobQueueName.size() > 0) { Counter myCounter = jobQueueName.iterator().next(); return myCounter.getName(); } return null; }
Example #18
Source File: TestInputOutputFormat.java From parquet-mr with Apache License 2.0 | 5 votes |
private static long value(Job job, String groupName, String name) throws Exception { // getGroup moved to AbstractCounters Method getGroup = org.apache.hadoop.mapreduce.Counters.class.getMethod("getGroup", String.class); // CounterGroup changed to an interface Method findCounter = org.apache.hadoop.mapreduce.CounterGroup.class.getMethod("findCounter", String.class); // Counter changed to an interface Method getValue = org.apache.hadoop.mapreduce.Counter.class.getMethod("getValue"); CounterGroup group = (CounterGroup) getGroup.invoke(job.getCounters(), groupName); Counter counter = (Counter) findCounter.invoke(group, name); return (Long) getValue.invoke(counter); }
Example #19
Source File: JsonCountersIterator.java From datawave with Apache License 2.0 | 5 votes |
private Gson initializeGson() { GsonBuilder builder = new GsonBuilder().registerTypeAdapter(Counters.class, new CountersJson()).registerTypeAdapter(CounterGroup.class, new CounterGroupJson()); if (prettyPrint) builder.setPrettyPrinting(); return builder.create(); }
Example #20
Source File: YarnJobStatsUtility.java From jumbune with GNU Lesser General Public License v3.0 | 5 votes |
/** * Adds detail for a Map phase. * @param task2 * * @param task2 the tasks * @param referencedZeroTime * @param referencedZeroTime the start time * @return the phase details */ private TaskOutputDetails addMapPhaseDetails(Entry<TaskAttemptID, TaskAttemptInfo> task, long referencedZeroTime) { TaskAttemptInfo taskAttemptInfo = (TaskAttemptInfo) (task.getValue()); TaskOutputDetails taskOutputDetails = new TaskOutputDetails(); if(taskAttemptInfo.getTaskStatus().equalsIgnoreCase("SUCCEEDED")){ taskOutputDetails.setTaskStatus(taskAttemptInfo.getTaskStatus()); taskOutputDetails.setTaskType(taskAttemptInfo.getTaskType().toString()); taskOutputDetails.setTaskID(taskAttemptInfo.getAttemptId().getTaskID().toString()); long startPoint = (taskAttemptInfo.getStartTime() - referencedZeroTime) / CONVERSION_FACTOR_MILLISECS_TO_SECS; taskOutputDetails.setStartPoint(startPoint); long endPoint = (taskAttemptInfo.getFinishTime() - referencedZeroTime) / CONVERSION_FACTOR_MILLISECS_TO_SECS; taskOutputDetails.setEndPoint(endPoint); taskOutputDetails.setTimeTaken(endPoint - startPoint); taskOutputDetails.setLocation(taskAttemptInfo.getHostname()); Counters counters = taskAttemptInfo.getCounters(); CounterGroup fileSystemCounters = counters.getGroup("org.apache.hadoop.mapreduce.FileSystemCounter"); Counter inputBytes = fileSystemCounters.findCounter("HDFS_BYTES_READ"); long dataFlowRate = inputBytes.getValue() / (endPoint - startPoint); taskOutputDetails.setDataFlowRate(dataFlowRate); CounterGroup mapReduceTaskCounters = counters.getGroup("org.apache.hadoop.mapreduce.TaskCounter"); Counter mapOutputRecords = mapReduceTaskCounters.findCounter("MAP_OUTPUT_RECORDS"); Counter physicalMemoryBytes = mapReduceTaskCounters.findCounter("PHYSICAL_MEMORY_BYTES"); ResourceUsageMetrics rum = new ResourceUsageMetrics(); rum.setPhysicalMemoryUsage(physicalMemoryBytes.getValue()); taskOutputDetails.setResourceUsageMetrics(rum); taskOutputDetails.setOutputRecords(mapOutputRecords.getValue()); Counter mapOutputBytes = mapReduceTaskCounters.findCounter("MAP_OUTPUT_BYTES"); taskOutputDetails.setOutputBytes(mapOutputBytes.getValue());} return taskOutputDetails; }
Example #21
Source File: HadoopMapReduceCounters.java From ignite with Apache License 2.0 | 5 votes |
/** {@inheritDoc} */ @Override public synchronized void incrAllCounters(AbstractCounters<Counter, CounterGroup> other) { for (CounterGroup group : other) { for (Counter counter : group) { findCounter(group.getName(), counter.getName()).increment(counter.getValue()); } } }
Example #22
Source File: JsonCountersIterator.java From datawave with Apache License 2.0 | 5 votes |
@Override public JsonElement serialize(org.apache.hadoop.mapreduce.Counters counters, Type type, JsonSerializationContext ctx) { JsonObject obj = new JsonObject(); for (CounterGroup group : counters) { obj.add(group.getName(), ctx.serialize(group)); } return obj; }
Example #23
Source File: MapReduceFSFetcherHadoop2.java From dr-elephant with Apache License 2.0 | 5 votes |
private MapReduceCounterData getCounterData(Counters counters) { MapReduceCounterData holder = new MapReduceCounterData(); if (counters != null) { for (CounterGroup group : counters) { String groupName = group.getName(); for (Counter counter : group) { holder.set(groupName, counter.getName(), counter.getValue()); } } } return holder; }
Example #24
Source File: EventReader.java From big-c with Apache License 2.0 | 5 votes |
static Counters fromAvro(JhCounters counters) { Counters result = new Counters(); if(counters != null) { for (JhCounterGroup g : counters.groups) { CounterGroup group = result.addGroup(StringInterner.weakIntern(g.name.toString()), StringInterner.weakIntern(g.displayName.toString())); for (JhCounter c : g.counts) { group.addCounter(StringInterner.weakIntern(c.name.toString()), StringInterner.weakIntern(c.displayName.toString()), c.value); } } } return result; }
Example #25
Source File: CounterStatsDClient.java From datawave with Apache License 2.0 | 5 votes |
public void sendFinalStats(Counters counters) { if (client != null) { for (CounterGroup group : counters) { for (Counter counter : group) { if (log.isTraceEnabled()) { log.trace("Looking for aspect matching " + group.getName() + " / " + counter.getName()); } CounterToStatsDConfiguration.StatsDAspect aspect = config.getAspect(CounterToStatsDConfiguration.StatsDOutputType.FINAL, group, counter); if (aspect != null) { String fullName = aspect.getFullName(counter.getName()); if (log.isTraceEnabled()) { log.trace("Sending " + aspect.getType() + '(' + fullName + " -> " + counter.getValue() + ')'); } switch (aspect.getType()) { case GAUGE: client.gauge(fullName, counter.getValue()); break; case COUNTER: client.count(fullName, counter.getValue()); break; default: client.time(fullName, counter.getValue()); } } } } } }
Example #26
Source File: EventReader.java From hadoop with Apache License 2.0 | 5 votes |
static Counters fromAvro(JhCounters counters) { Counters result = new Counters(); if(counters != null) { for (JhCounterGroup g : counters.groups) { CounterGroup group = result.addGroup(StringInterner.weakIntern(g.name.toString()), StringInterner.weakIntern(g.displayName.toString())); for (JhCounter c : g.counts) { group.addCounter(StringInterner.weakIntern(c.name.toString()), StringInterner.weakIntern(c.displayName.toString()), c.value); } } } return result; }
Example #27
Source File: TaskCounterGroupInfo.java From hadoop with Apache License 2.0 | 5 votes |
public TaskCounterGroupInfo(String name, CounterGroup group) { this.counterGroupName = name; this.counter = new ArrayList<TaskCounterInfo>(); for (Counter c : group) { TaskCounterInfo cinfo = new TaskCounterInfo(c.getName(), c.getValue()); this.counter.add(cinfo); } }
Example #28
Source File: CounterGroupInfo.java From hadoop with Apache License 2.0 | 5 votes |
public CounterGroupInfo(String name, CounterGroup group, CounterGroup mg, CounterGroup rg) { this.counterGroupName = name; this.counter = new ArrayList<CounterInfo>(); for (Counter c : group) { Counter mc = mg == null ? null : mg.findCounter(c.getName()); Counter rc = rg == null ? null : rg.findCounter(c.getName()); CounterInfo cinfo = new CounterInfo(c, mc, rc); this.counter.add(cinfo); } }
Example #29
Source File: JobTaskCounterInfo.java From hadoop with Apache License 2.0 | 5 votes |
public JobTaskCounterInfo(Task task) { total = task.getCounters(); this.id = MRApps.toString(task.getID()); taskCounterGroup = new ArrayList<TaskCounterGroupInfo>(); if (total != null) { for (CounterGroup g : total) { if (g != null) { TaskCounterGroupInfo cginfo = new TaskCounterGroupInfo(g.getName(), g); taskCounterGroup.add(cginfo); } } } }
Example #30
Source File: TestJobHistoryEventHandler.java From hadoop with Apache License 2.0 | 5 votes |
@Test (timeout=50000) public void testCountersToJSON() throws Exception { JobHistoryEventHandler jheh = new JobHistoryEventHandler(null, 0); Counters counters = new Counters(); CounterGroup group1 = counters.addGroup("DOCTORS", "Incarnations of the Doctor"); group1.addCounter("PETER_CAPALDI", "Peter Capaldi", 12); group1.addCounter("MATT_SMITH", "Matt Smith", 11); group1.addCounter("DAVID_TENNANT", "David Tennant", 10); CounterGroup group2 = counters.addGroup("COMPANIONS", "Companions of the Doctor"); group2.addCounter("CLARA_OSWALD", "Clara Oswald", 6); group2.addCounter("RORY_WILLIAMS", "Rory Williams", 5); group2.addCounter("AMY_POND", "Amy Pond", 4); group2.addCounter("MARTHA_JONES", "Martha Jones", 3); group2.addCounter("DONNA_NOBLE", "Donna Noble", 2); group2.addCounter("ROSE_TYLER", "Rose Tyler", 1); JsonNode jsonNode = jheh.countersToJSON(counters); String jsonStr = new ObjectMapper().writeValueAsString(jsonNode); String expected = "[{\"NAME\":\"COMPANIONS\",\"DISPLAY_NAME\":\"Companions " + "of the Doctor\",\"COUNTERS\":[{\"NAME\":\"AMY_POND\",\"DISPLAY_NAME\"" + ":\"Amy Pond\",\"VALUE\":4},{\"NAME\":\"CLARA_OSWALD\"," + "\"DISPLAY_NAME\":\"Clara Oswald\",\"VALUE\":6},{\"NAME\":" + "\"DONNA_NOBLE\",\"DISPLAY_NAME\":\"Donna Noble\",\"VALUE\":2}," + "{\"NAME\":\"MARTHA_JONES\",\"DISPLAY_NAME\":\"Martha Jones\"," + "\"VALUE\":3},{\"NAME\":\"RORY_WILLIAMS\",\"DISPLAY_NAME\":\"Rory " + "Williams\",\"VALUE\":5},{\"NAME\":\"ROSE_TYLER\",\"DISPLAY_NAME\":" + "\"Rose Tyler\",\"VALUE\":1}]},{\"NAME\":\"DOCTORS\",\"DISPLAY_NAME\"" + ":\"Incarnations of the Doctor\",\"COUNTERS\":[{\"NAME\":" + "\"DAVID_TENNANT\",\"DISPLAY_NAME\":\"David Tennant\",\"VALUE\":10}," + "{\"NAME\":\"MATT_SMITH\",\"DISPLAY_NAME\":\"Matt Smith\",\"VALUE\":" + "11},{\"NAME\":\"PETER_CAPALDI\",\"DISPLAY_NAME\":\"Peter Capaldi\"," + "\"VALUE\":12}]}]"; Assert.assertEquals(expected, jsonStr); }