1

次のような 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%、累積 CPU 105.67 秒 2016-01-06 16:15:07,172 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 106.7 秒 2016-01-06 16:16:07,317 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 107.87 秒 2016-01-06 16:17:07,501 ステージ 1 マップ = 12%、削減= 0%、累積 CPU 108.84 秒 2016-01-06 16:18:07,680 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 109.71 秒 2016-01-06 16:19:07,870 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 110.37 秒 2016-01-06 16:20:08,014 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 111.5 秒 2016-01-06 16:21:08,234 ステージ-1 map = 12%, reduce = 0%, Cumulative CPU 112.76 sec 2016-01-06 16:22:08,494 Stage-1 map = 12%, reduce = 0%, Cumulative CPU 113.78 sec 2016-01-06 16: 23:08,789 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 114。97 秒 2016-01-06 16:24:09,191 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 115.84 秒 2016-01-06 16:25:09,537 ステージ 1 マップ = 12%、削減 = 0 %、累積 CPU 116.79 秒 2016-01-06 16:26:09,779 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 117.69 秒 2016-01-06 16:27:10,106 ステージ 1 マップ = 12% 、削減 = 0%、累積 CPU 118.91 秒 2016-01-06 16:28:10,213 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 119.94 秒 2016-01-06 16:29:10,826 ステージ 1マップ = 12%、削減 = 0%、累積 CPU 120.76 秒 2016-01-06 16:30:11,158 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 122.2 秒 2016-01-06 16:31: 11,433 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 123.26 秒 2016 年 1 月 6 日 16:32:11,564 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 124.28 秒 2016 年 1 月 6 日16:33:12,093 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 124。9 秒 2016-01-06 16:34:12,319 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 125.82 秒 2016-01-06 16:35:12,556 ステージ 1 マップ = 12%、削減 = 0 %、累積 CPU 126.79 秒 2016-01-06 16:36:12,978 ステージ 1 マップ = 12%、削減 = 0%、累積 CPU 127.57 秒

jstack を使用して MapReduce ジョブ プロセス情報を表示すると、次の結果が得られました。

"main" prio=10 tid=0x000000000122e000 nid=0x6908 in Object.wait() [0x00007fc884fa7000] java.lang.Thread.State: WAITING (オブジェクト モニター上) at java.lang.Object.wait(ネイティブ メソッド) - 待機中<0x00000000eab6b780> (org.xbill.DNS.ExtendedResolver$Resolution) at java.lang.Object.wait(Object.java:502) at org.xbill.DNS.ExtendedResolver$Resolution.start(ExtendedResolver.java:111) - <0x00000000eab6b780> (org.xbill.DNS.ExtendedResolver$Resolution) を 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) で

最新の dnsjava jar パッケージ (2.1.7 バージョン) を既に使用している場合、どうすれば問題を解決できますか? どうもありがとう。

4

0 に答える 0