1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/supermy-rule-interceptor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Флум-интерцептор-экс

Введение

Можно использовать на стороне сбора данных, чтобы применять возможности устройств сбора для оперативной обработки ETL данных не делового характера. Подходит для различных каналов среды больших данных Hadoop. Особенностью является использование Groovy в качестве языка правил, который позволяет обрабатывать различные условия.

Flume — это универсальный перехватчик flume-rule-interceptor. Groovy используется как язык описания правил (DSL), с помощью которого можно писать логические скрипты. Поддерживаются функции в формате JSON, динамическая загрузка скриптов и постепенное внедрение.

Сценарии использования:

  1. RuleSearchAndReplaceInterceptor: безопасность передачи данных через шифрование и дешифрование. Официальный механизм регулярных выражений не может реализовать эту функцию.
  2. RuleFilteringInterceptor: фильтрация данных на основе условий, которые можно гибко настроить с помощью скрипта Groovy. Официальные регулярные выражения не поддерживают условия.
  3. RuleSearchAndReplaceInterceptor: преобразование формата данных. Можно выполнить с помощью Groovy-скрипта, но официальный подход с использованием регулярных выражений менее эффективен.
  4. RuleSearchAndReplaceInterceptor: настройка заголовка. Можно сделать с помощью Groovy-скриптов, что обеспечивает гибкость настройки. Официальная конфигурация более сложна и не поддерживает гибкость для конкретных задач.
  5. Новый сценарий использования: поддержка фильтрации контента. Данные могут быть преобразованы в скрипты, поддерживаемые Redis-Lua, и обработаны с помощью компонента flume-redis.

Установка

Для установки выполните следующие шаги:

  • Скопируйте файл rule-interceptor-1.0-SNAPSHOT.jar в каталог plugins.d/flume-interceptor/lib.
  • Скопируйте файл groovy-all-2.4.7.jar в каталог plugins.d/flume-interceptor/libext.

Использование

Пример конфигурации:

a1.sources.r1.interceptors.i2.type = com.supermy.flume.interceptor.RuleFilteringInterceptor$Builder
a1.sources.r1.interceptors.i2.rule = /etc/flume/conf/g-filter.groovy
a1.sources.r1.interceptors.i2.ruleName = filterGroovy

a1.sources.r1.interceptors.i3.type = com.supermy.flume.interceptor.RuleSearchAndReplaceInterceptor$Builder
a1.sources.r1.interceptors.i3.searchReplaceDsl = /etc/flume/conf/g-search-replace.groovy
a1.sources.r1.interceptors.i3.searchReplaceKey = searchReplaceGroovy

g-filter.groovy

Скрипт фильтрации, который использует данные из заголовков и тел для определения, следует ли фильтровать строку, соответствующую текущему регулярному выражению.

//# Когда его значение равно true, фильтрует строки, соответствующие текущему регулярному выражению
//# Если его значение false, принимает строки, соответствующие регулярному выражению
println "netuser filter"
//println head
//println body
body = "20170621162925,113.225.23.151,test_10056368,1"
//body = "20170621162925,113.225.23.152,test_10056368,3"

def split = body.split(",")

println split.size()

if(split.size()<4){
    // Данные не соответствуют требованиям, отфильтровать
    return false;
}

def type = split[3]

println type.getClass()
println type.substring(0,1) == '1'
//println type.toInteger() == 1

if (type.substring(0,1) == '1' || type.substring(0,1) == '2') {
    return true;  // Не фильтровать
} else {
    return false; // Отфильтровать
}

g-search-replace.groovy

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


import com.supermy.flume.interceptor.*
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

println head
println body
body=body.replace('a','aaa')
head["newhead"]='abcd'



String text = "Body 的数据 , I Love BONC"

//
def key = new SecretKeySpec("123456789987654321".bytes, "AES")
def c = Cipher.getInstance("AES")

// Шифрование
c.init(Cipher.ENCRYPT_MODE, key)
e_text = new String(Hex.encodeHex(c.doFinal(text.getBytes("UTF-8"))))

// Расшифровка
c.init(Cipher.DECRYPT_MODE, key)
text1 = new String(c.doFinal(Hex.decodeHex(e_text.toCharArray())))

println text
println e_text
println text1


def resultMap = [:]

// Зашифрованные данные для передачи данных по сети


resultMap["head"]=head
resultMap["body"]=body

return resultMap
``` ```
redis.call('ZADD',KEYS[2],KEYS[1],KEYS[3])";
full.put("args",new ArrayList());
full.put("keys",split);

String json = gson.toJson(full);
println json

Map m=gson.fromJson(json, HashMap.class);
println m

//StringBuffer sb = new StringBuffer("return redis.call('ZADD','");
//
//sb.append(split[1]).append("',").append(split[0]).append(",'").append(split[2]);
//if (type.substring(0,1) == '1') {
//    sb.append("@Start'");
//} else {
//    sb.append("@End'");
//}
//sb.append(")");
//println sb

def resultMap = [:]

resultMap["head"] = head
resultMap["body"] = json

return resultMap

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Флюм: правила фильтрации. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/supermy-rule-interceptor.git
git@api.gitlife.ru:oschina-mirror/supermy-rule-interceptor.git
oschina-mirror
supermy-rule-interceptor
supermy-rule-interceptor
master