메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


---------실행결과-------------
[2016-07-21 17:38:27] [CustomWorkingMemoryEventListener] [23] [INFO] Object Inserted : [fact 0:1:888473870:888473870:1:DEFAULT:Server [name=winServer, processors=4, memory=4096, diskSpace=2048, cpuUsage=25, getName()=winServer, getProcessors()=4, getMemory()=4096, getDiskSpace()=2048, getCpuUsage()=25, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=888473870, toString()=com.gooper.drool_test.ServerInfo@34f5090e]] Knowledge Runtime: org.drools.core.impl.StatefulKnowledgeSessionImpl@614ca7df 
[2016-07-21 17:38:27] [CustomWorkingMemoryEventListener] [23] [INFO] Object Inserted : [fact 0:2:416841088:416841088:2:DEFAULT:Server [name=ubuntuServer, processors=4, memory=2048, diskSpace=1024, cpuUsage=70, getName()=ubuntuServer, getProcessors()=4, getMemory()=2048, getDiskSpace()=1024, getCpuUsage()=70, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=416841088, toString()=com.gooper.drool_test.ServerInfo@18d87d80]] Knowledge Runtime: org.drools.core.impl.StatefulKnowledgeSessionImpl@614ca7df 
[2016-07-21 17:38:27] [CustomWorkingMemoryEventListener] [23] [INFO] Object Inserted : [fact 0:3:1412794598:1412794598:3:DEFAULT:Server [name=debianServer, processors=4, memory=2048, diskSpace=1024, cpuUsage=10, getName()=debianServer, getProcessors()=4, getMemory()=2048, getDiskSpace()=1024, getCpuUsage()=10, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=1412794598, toString()=com.gooper.drool_test.ServerInfo@543588e6]] Knowledge Runtime: org.drools.core.impl.StatefulKnowledgeSessionImpl@614ca7df 
 session.getFactCount() = 3
[2016-07-21 17:38:27] [CustomAgendaEventListener] [133] [INFO] Match Created : [fact 0:2:416841088:416841088:2:DEFAULT:Server [name=ubuntuServer, processors=4, memory=2048, diskSpace=1024, cpuUsage=70, getName()=ubuntuServer, getProcessors()=4, getMemory()=2048, getDiskSpace()=1024, getCpuUsage()=70, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=416841088, toString()=com.gooper.drool_test.ServerInfo@18d87d80]] 
[2016-07-21 17:38:27] [CustomAgendaEventListener] [133] [INFO] Match Created : [fact 0:1:888473870:888473870:1:DEFAULT:Server [name=winServer, processors=4, memory=4096, diskSpace=2048, cpuUsage=25, getName()=winServer, getProcessors()=4, getMemory()=4096, getDiskSpace()=2048, getCpuUsage()=25, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=888473870, toString()=com.gooper.drool_test.ServerInfo@34f5090e]] 
[2016-07-21 17:38:27] [CustomAgendaEventListener] [113] [INFO] Before Match Fired : [fact 0:2:416841088:416841088:2:DEFAULT:Server [name=ubuntuServer, processors=4, memory=2048, diskSpace=1024, cpuUsage=70, getName()=ubuntuServer, getProcessors()=4, getMemory()=2048, getDiskSpace()=1024, getCpuUsage()=70, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=416841088, toString()=com.gooper.drool_test.ServerInfo@18d87d80]] 
[2016-07-21 17:38:27] [check minimum server configuration2] [20] [INFO] Server "ubuntuServer" was rejected... 
[2016-07-21 17:38:27] [CustomWorkingMemoryEventListener] [18] [INFO] Object Deleted : [fact 0:2:416841088:416841088:2:DEFAULT:Server [name=ubuntuServer, processors=4, memory=2048, diskSpace=1024, cpuUsage=70, getName()=ubuntuServer, getProcessors()=4, getMemory()=2048, getDiskSpace()=1024, getCpuUsage()=70, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=416841088, toString()=com.gooper.drool_test.ServerInfo@18d87d80]] Knowledge Runtime: org.drools.core.impl.StatefulKnowledgeSessionImpl@614ca7df 
[2016-07-21 17:38:27] [CustomAgendaEventListener] [76] [DEBUG] Rule fired: check minimum server configuration2 
[2016-07-21 17:38:27] [CustomAgendaEventListener] [113] [INFO] Before Match Fired : [fact 0:1:888473870:888473870:1:DEFAULT:Server [name=winServer, processors=4, memory=4096, diskSpace=2048, cpuUsage=25, getName()=winServer, getProcessors()=4, getMemory()=4096, getDiskSpace()=2048, getCpuUsage()=25, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=888473870, toString()=com.gooper.drool_test.ServerInfo@34f5090e]] 
[2016-07-21 17:38:27] [check minimum server configuration2] [20] [INFO] Server "winServer" was rejected... 
[2016-07-21 17:38:27] [CustomWorkingMemoryEventListener] [18] [INFO] Object Deleted : [fact 0:1:888473870:888473870:1:DEFAULT:Server [name=winServer, processors=4, memory=4096, diskSpace=2048, cpuUsage=25, getName()=winServer, getProcessors()=4, getMemory()=4096, getDiskSpace()=2048, getCpuUsage()=25, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=888473870, toString()=com.gooper.drool_test.ServerInfo@34f5090e]] Knowledge Runtime: org.drools.core.impl.StatefulKnowledgeSessionImpl@614ca7df 
[2016-07-21 17:38:27] [CustomAgendaEventListener] [76] [DEBUG] Rule fired: check minimum server configuration2 
 matched count of Fact = 2
listener.getCurrentServers().size() : 1
[2016-07-21 17:38:27] [CustomWorkingMemoryEventListener] [29] [INFO] Object Updated : [fact 0:2:416841088:416841088:5:DEFAULT:Server [name=ubuntuServer, processors=4, memory=2048, diskSpace=1024, cpuUsage=10, getName()=ubuntuServer, getProcessors()=4, getMemory()=2048, getDiskSpace()=1024, getCpuUsage()=10, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=416841088, toString()=com.gooper.drool_test.ServerInfo@18d87d80]] Knowledge Runtime: org.drools.core.impl.StatefulKnowledgeSessionImpl@614ca7df 
listener.getCurrentServers().size() : 1
[2016-07-21 17:38:27] [CustomWorkingMemoryEventListener] [29] [INFO] Object Updated : [fact 0:2:416841088:416841088:6:DEFAULT:Server [name=ubuntuServer, processors=4, memory=2048, diskSpace=1024, cpuUsage=5, getName()=ubuntuServer, getProcessors()=4, getMemory()=2048, getDiskSpace()=1024, getCpuUsage()=5, getClass()=class com.gooper.drool_test.ServerInfo, hashCode()=416841088, toString()=com.gooper.drool_test.ServerInfo@18d87d80]] Knowledge Runtime: org.drools.core.impl.StatefulKnowledgeSessionImpl@614ca7df 
listener.getCurrentServers().size() : 1
listener.getCurrentServers().size() : 1
 session.getObject(ubuntuServerFactHandle) : null
ubuntuServerFactHandle : 0:2:416841088:416841088:6:DEFAULT


------------------------------DroolsTest2.java----------------
package com.gooper.drool_test;

import org.kie.api.KieBase;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.rule.FactHandle;
import org.kie.api.runtime.rule.LiveQuery;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.builder.KnowledgeBuilderError;

import com.gooper.drool_test.CustomWorkingMemoryEventListener;
import com.gooper.drool_test.CustomAgendaEventListener;

/* 실시간 쿼리 변환 모니터링
 * 팩트내의 필드값이 변경될때 실시간으로 변화를 추적함
 */
public class DroolsTest2 {

        public static final void main(String[] args) {
               try {

              // 지식 빌더 생성
                    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
                    
                    // 지식 빌더에 룰정의파일 설정
                    kbuilder.add(ResourceFactory. newClassPathResource("server_rule.drl"), ResourceType. DRL );

if (kbuilder.hasErrors()) {
if(kbuilder.getErrors().size() > 0) {
for(KnowledgeBuilderError kerror : kbuilder.getErrors()) {
System.out.println("error :" + kerror);
}
}
}
// 새로운 지식 베이스 생성
                    KieBase kiebase = kbuilder.newKnowledgeBase();
                    
                    // 새로운 지식 베이스 세션 생성
                    KieSession session = kiebase.newKieSession();
                    
                    // logger등록(팩트에 의해 생성된 엑티베이션(Activation)관련 이벤트만 로깅)
                    session.addEventListener(new CustomAgendaEventListener());
                    
                    // logger등록(팩트의 추가/수정/제거 이벤트에 대한 정보)
                    session.addEventListener(new CustomWorkingMemoryEventListener());
                    
                    // 지식 베이스의 getFactType 메서드를 이용하여 동적으로 팩트를 인스턴스화 시킨다.
                    // (팩트가 선언되어 있는 룰의 패키지 이름과 팩트의 이름을 인자로 받는다.) 
                    
                    //winServer 생성
                    ServerInfo winServer = new ServerInfo("winServer", 4, 4096, 2048, 25);
                    //winServer등록
                    session.insert(winServer);
                    
                    //ubuntuServer생성
                    ServerInfo ubuntuServer = new ServerInfo("ubuntuServer", 4, 2048, 1024, 70);
                    //ubuntuServer등록
                    FactHandle ubuntuServerFactHandle = session.insert(ubuntuServer);
                    
                    //debianServer생성
                    ServerInfo debianServer = new ServerInfo("debianServer", 4, 2048, 1024, 10);
                    //debianServer등록
                    session.insert(debianServer);
                    
                    System.out.println(" session.getFactCount() = " + session.getFactCount());
                    
                    int matchedCnt = session.fireAllRules();
                    System.out.println(" matched count of Fact = " + matchedCnt);
                    
                    //System.out.println(" session.getProcessInstances() : " + session.getProcessInstances());
                    
                    
                    // 쿼리를 모니터링하는데 사용하는 리스너
                    CustomViewChangedEventListener listener = new CustomViewChangedEventListener();
                    
                    // 모니터링 대상 쿼리이름, 쿼리에 필요한 파라미터, 쿼리를 모니터링하는데 사용하는 리스너
                    LiveQuery query = session.openLiveQuery("serverCpuUsage",  new Object[]{20},  listener);
                    
                    
                    // query results에 단지 1개의 서버 오브젝트만 있음
                    System.out.println("listener.getCurrentServers().size() : " + listener.getCurrentServers().size());
                    
                    ubuntuServer.setCpuUsage(10);
                    session.update(ubuntuServerFactHandle,  ubuntuServer);
                    
                    // query resutls에 2개의 서버 오브젝트가 있음
                    System.out.println("listener.getCurrentServers().size() : " +  listener.getCurrentServers().size());
                    
                    ubuntuServer.setCpuUsage(5);
                    session.update(ubuntuServerFactHandle,  ubuntuServer);
                    
                    // 2 server objects still in the query results
                    System.out.println("listener.getCurrentServers().size() : " + listener.getCurrentServers().size());
                    
                    // but one of them was updated
                    System.out.println("listener.getCurrentServers().size() : " + listener.getCurrentServers().size());
                   
                    //FactHandle로 내용확인하기
                    System.out.println(" session.getObject(ubuntuServerFactHandle) : " + session.getObject(ubuntuServerFactHandle));
                    
                    
                   // System.out.println(" session.getProcessInstances() : " + session.getProcessInstances());
                    
                    
                    query.close();

                    session.dispose();
                    
                    // match된 fact를 확인함
                    System.out.println("ubuntuServerFactHandle : "+ubuntuServerFactHandle.toExternalForm());


              } catch (Throwable t) {
                     t.printStackTrace();
              }
       }
}
번호 제목 날짜 조회 수
741 bananapi 5대(ubuntu계열 리눅스)에 yarn(hadoop 2.6.0)설치하기-ResourceManager HA/HDFS HA포함, JobHistory포함 2015.04.24 19291
740 mapreduce appliction을 실행시 "is running beyond virtual memory limits" 오류 발생시 조치사항 2017.05.04 17061
739 org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-root/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible. 2013.03.11 14838
738 Hive Query Examples from test code (2 of 2) 2014.03.26 11466
737 drop table로 삭제했으나 tablet server에는 여전히 존재하는 테이블 삭제방법 2021.07.09 7943
736 Resource temporarily unavailable(자원이 일시적으로 사용 불가능함) 오류조치 2015.11.19 7708
735 insert hbase by hive ... error occured after 5 hours..HMaster가 뜨지 않는 장애에 대한 복구 방법 2014.04.29 7249
734 [DataNode]org.apache.hadoop.security.KerberosAuthException: failure to login: for principal: hdfs/datanode03@GOOPER.COM from keytab hdfs.keytab오류 2023.04.18 6135
733 [Decommission]시 시간이 많이 걸리면서(수일) Decommission이 완료되지 않는 경우 조치 2018.01.03 6062
732 cumulusRDF 1.0.1설치및 "KeyspaceCumulus" keyspace확인하기 file 2016.04.15 5945
731 HBase shell로 작업하기 2013.03.15 5926
730 dr.who로 공격들어오는 경우 조치방법 file 2018.06.09 5713
729 하둡 분산 파일 시스템을 기반으로 색인하고 검색하기 2013.03.15 5690
728 Ubuntu 16.04LTS 설치후 초기에 주어야 하는 작업(php, apache, mariadb설치및 OS보안설정등) file 2017.05.23 5636
727 hive 2.0.1 설치및 mariadb로 metastore 설정 2016.06.03 5295
726 Spark에서 Serializable관련 오류및 조치사항 2017.04.21 5030
725 [gson]mongodb의 api를 이용하여 데이타를 가져올때 "com.google.gson.stream.MalformedJsonException: Unterminated object at line..." 오류발생시 조치사항 2017.12.11 4808
724 .git폴더를 삭제하고 다시 git에 추가하고 서버에 반영하는 방법 2017.06.19 4552
723 import 혹은 export할때 hive파일의 default 구분자는 --input-fields-terminated-by "x01"와 같이 지정해야함 2014.05.20 4346
722 sqoop작업시 hdfs의 개수보다 더많은 값이 중복되어 oracle에 입력되는 경우가 있음 2014.09.02 4214
위로