Флум-интерцептор-экс
Введение
Можно использовать на стороне сбора данных, чтобы применять возможности устройств сбора для оперативной обработки ETL данных не делового характера. Подходит для различных каналов среды больших данных Hadoop. Особенностью является использование Groovy в качестве языка правил, который позволяет обрабатывать различные условия.
Flume — это универсальный перехватчик flume-rule-interceptor. Groovy используется как язык описания правил (DSL), с помощью которого можно писать логические скрипты. Поддерживаются функции в формате JSON, динамическая загрузка скриптов и постепенное внедрение.
Сценарии использования:
Установка
Для установки выполните следующие шаги:
Использование
Пример конфигурации:
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 )