LeaseExpiredException с пользовательской определяемой пользователем функцией в Hive

У меня есть Hive UDF, который должен извлекать устройство из строки UA. Он использует библиотеку ua-parser: https://github.com/tobie/ua-parser

UDF довольно прост:

public class DeviceTypeExtractTest extends UDF{
private  Text result = new Text();
private static final Parser uaParser;
  static {
    try {
      uaParser = new Parser();
    }
    catch(IOException e) {
      throw new RuntimeException("Could not instantiate User-Agent parser.");
    }
  }

public Text evaluate( Text uaField){
    if (uaField == null ) {
        return null;
    }

    try
    {
        String uaString = uaField.toString();
        Client client = uaParser.parse(uaString);
        result.set(client.device.family);
        return result;
    }
    catch(Exception e)
    {
        return null;
    }
  }
}

И он отлично работает при работе с небольшим набором данных.

create table categories(
                    cat string);
insert overwrite table categories select DEVICE_TYPE_EXTRACT(user_agent) from raw_logs;

Однако при тестировании этого на большом наборе данных, содержащем более 10 миллионов строк, я получаю это исключение LeaseExpiredException при каждой попытке: http://pastebin.com/yK6Qmx6r

И моя карта и процессы сокращения остаются на 0% в течение нескольких часов. Обратите внимание, что если я уберу этот udf и использую некоторые внутренние UDF Hive только для тестирования, такого поведения не будет.

Я запускаю это в кластере Amazon EMR с AMI версии 2.4.5 (Hive 0.11.0.2 и Hadoop 1.0.3).

Я попытался повысить производительность кластера, развернув лучшее оборудование, но у меня возникает та же проблема с любым аппаратным сценарием.

Есть идеи?


person Ana Todor    schedule 11.09.2014    source источник


Ответы (1)


Хорошо, сотрите это. Кажется, что после обновления моего экземпляра все начало двигаться, но я просто не ждал достаточно долго, чтобы произошло сопоставление. И LeaseExpiredError на самом деле был выброшен из-за меня, когда я убивал процессы.

Тем не менее, синтаксический анализ занимает огромное количество времени, и я хотел бы получить некоторые предложения по дальнейшей оптимизации этой UDF.

person Ana Todor    schedule 11.09.2014