MapReduce Работа зависла на карте =12%, как я могу пройти через это?
Я написал скрипт HiveQL, например:
create temporary function getdomainips as 'com.is.mail.domainspf.IpFromDomainExtract';
select Domain,getdomainips(Domain) as ips from tmp_domain;
И класс IpFromDomainExtract выглядит следующим образом:
package com.is.mail.domainspf;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.util.ArrayList;
import java.util.Arrays;
public class IpFromDomainExtract extends UDF {
public ArrayList<String> evaluate(String domain) {
try {
if (domain == null || "".equals(domain)) {
return new ArrayList<String>();
}
return new ArrayList<String>(Arrays.asList(UrlDomainDigHelper.getARecord(domain).split(",")));
} catch (Exception e) {
return new ArrayList<String>();
}
}
}
import java.net.UnknownHostException;
import org.xbill.DNS.ARecord;
import org.xbill.DNS.ExtendedResolver;
import org.xbill.DNS.Lookup;
import org.xbill.DNS.Record;
import org.xbill.DNS.TextParseException;
import org.xbill.DNS.Type;
/**
*use dnsjava jar package
*/
class UrlDomainDigHelper {
private static ExtendedResolver resolver;
public static String getARecord(String d) throws TextParseException, UnknownHostException {
if (resolver == null) {
synchronized (UrlDomainDigHelper.class) {
if (resolver == null) {
ExtendedResolver tmpresolver = new ExtendedResolver();
tmpresolver.setTimeout(5);
resolver = tmpresolver;
}
}
}
Lookup lookup = new Lookup(d, Type.A);
if (resolver != null)
lookup.setResolver(resolver);
Record[] records = lookup.run();
StringBuilder sb = new StringBuilder();
if (records != null) {
for (int i = 0; i < records.length; i++) {
ARecord mx = (ARecord) records[i];
sb.append(mx.getAddress().getHostAddress()).append(",");
}
}
if (sb.length() > 0)
sb.setLength(sb.length() - 1);
return sb.toString();
}
}
Когда я запустил скрипт HiveQL, я застрял на map = 12% следующим образом:
2016-01-06 16: 14: 06,701 Карта этапа 1 = 12%, уменьшение = 0%, совокупный процессор за 105,67 с 2016-01-06 16:15:07,172 Карта этапа 1 = 12%, уменьшение = 0%, Накопительное ЦП 106,7 с 2016-01-06 16:16:07,317 Карта этапа 1 = 12%, уменьшение = 0%, Накопительный ЦП 107,87 сек 2016-01-06 16:17:07,501 Карта этапа 1 = 12%, сокращение = 0%, совокупный ЦП 108,84 с 2016-01-06 16:18:07,680 Карта этапа 1 = 12%, уменьшение = 0%, Совокупный ЦП 109,71 с 2016-01-06 16:19:07,870 Карта этапа 1 = 12%, уменьшение = 0%, совокупный ЦП 110,37 с 2016-01-06 16:20:08,014 Карта этапа 1 = 12%, уменьшение = 0%, Совокупный ЦП 111,5 с 2016-01-06 16:21:08,234 Этап -1 карта = 12%, уменьшение = 0%, совокупный ЦП 112,76 с 2016-01-06 16:22:08,494 Карта этапа 1 = 12%, уменьшение = 0%, совокупный ЦП 113,78 с 2016-01-06 16:23:08,789 Карта этапа 1 = 12%, уменьшение = 0%, совокупный ЦП 114,97 с 2016-01-06 16:24:09,191 Карта этапа 1 = 12%, уменьшение = 0%, Накопительный ЦП 115,84 с 2016-01-01-06 16:25:09,537 Карта этапа 1 = 12%, уменьшение = 0%, совокупный процессор 116,79 с 2016-01-06 16:26:09,779 Карта этапа-1 = 12%, уменьшение = 0%, совокупный ЦП 117,69 с 2016-01-06 16: 27: 10,106 Карта этапа-1 = 12%, уменьшение = 0%, Совокупный ЦП 118,91 с 2016-01-06 16:28:10 213 Карта этапа 1 = 12%, уменьшение = 0%, совокупный процессор 119,94 с 2016-01-06 16:29:10 826 Карта этапа 1 = 12%, уменьшение = 0%, совокупный ЦП 120,76 с 2016-01-06 16:30:11,158 Карта этапа-1 = 12%, уменьшение = 0%, совокупный процессор за 122,2 с 2016-01-06 16:31:11,433 Карта этапа-1 = 12%, уменьшение = 0%, накопительный ЦП 123,26 с 2016-01-06 16:32:11 564 Карта этапа 1 = 12%, уменьшение = 0%, совокупный ЦП 124,28 с 2016-01-06 16:33:12,093 Карта этапа 1 = 12%, уменьшение = 0%, совокупный ЦП 124,9 с 2016-01-06 16:34:12,319 Карта этапа-1 = 12%, уменьшение = 0%, Совокупный ЦП 125,82 с 2016-01-06 16:35:12,556 Карта этапа-1 = 12 %, уменьшение = 0%, совокупный ЦП 126,79 с 2016-01-06 16:36:12 978 Карта этапа 1 = 12%, уменьшение = 0%, совокупный ЦП 127,57 с
Когда я использую jstack для просмотра информации о процессе работы MapReduce, я получаю следующий результат:
"main" prio = 10 tid = 0x000000000122e000 nid = 0x6908 в Object.wait() [0x00007fc884fa7000] java.lang.Thread.State: WAITING (на мониторе объекта) на java.lang.Object.wait(собственный метод) - ожидание на <0x00000000eab6b780> (разрешение $ org.xbill.DNS.ExtendedResolver) в java.lang.Object.wait(Object.java:502) в org.xbill.DNS.ExtendedResolver$Resolution.start(ExtendedResolver.java:111) - заблокирован <0x00000000eab6b780> (разрешение $ org.xbill.DNS.ExtendedResolver $) в org.xbill.DNS.ExtendedResolver.send(ExtendedResolver.java:358) в org.xbill.DNS.Lookup.lookup(Lookup.java:477) в org.xbill.DNS.Lookup.resolve(Lookup.java:529) в org.xbill.DNS.Lookup.run(Lookup.java:546)
Я думаю, что у меня возникла тупиковая ситуация, как я могу решить эту проблему, если я уже использовал последний пакет js dnsjava (версия 2.1.7)? Спасибо большое.