You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by GitBox <gi...@apache.org> on 2019/07/19 06:50:53 UTC

[GitHub] [kylin] lklong opened a new pull request #763: how to create custom measure

lklong opened a new pull request #763: how to create custom measure
URL: https://github.com/apache/kylin/pull/763
 
 
   hi all,
       how to create custom measure? I can not find any doc for definning my custom measure,if you know how to do this,please tell me,thank you!
      I do this and got error like blew:
      ------------------------------------------------------MySumMeasureType.java---------------------------------------------
   package com.demo.kylin.custom.mysum;
   
   import org.apache.kylin.measure.MeasureAggregator;
   import org.apache.kylin.measure.MeasureIngester;
   import org.apache.kylin.measure.MeasureType;
   import org.apache.kylin.measure.MeasureTypeFactory;
   import org.apache.kylin.metadata.datatype.DataType;
   import org.apache.kylin.metadata.model.FunctionDesc;
   
   @SuppressWarnings({ "rawtypes", "serial" })
   public class MySumMeasureType extends MeasureType<Long> {
   
       public static class Factory extends MeasureTypeFactory {
   
           @Override
           public MeasureType<Long> createMeasureType(String funcName, DataType dataType) {
               return new MySumMeasureType(funcName, dataType);
           }
   
           @Override
           public String getAggrFunctionName() {
               return "MYSUM";
           }
   
           @Override
           public String getAggrDataTypeName() {
               return "mysum";
           }
   
           @Override
           public Class getAggrDataTypeSerializer() {
               return null;
           }
       }
   
       private final String funcName;
       private final DataType dataType;
   
       public MySumMeasureType(String funcName, DataType dataType) {
           this.funcName = funcName;
           this.dataType = dataType;
       }
   
       @Override
       public void validate(FunctionDesc functionDesc) throws IllegalArgumentException {
   
       }
   
       @Override
       public MeasureIngester<Long> newIngester() {
          return new MyLongIngester();
       }
   
       @Override
       public MeasureAggregator<Long> newAggregator() {
           return new MyLongSumAggregator();
       }
   
       @Override
       public boolean needRewrite() {
           return true;
       }
   }
   --------------------------------------------------------MyLongSumAggregator---------------------------------------------------
   package com.demo.kylin.custom.mysum;
   
   import org.apache.kylin.measure.MeasureAggregator;
   
   /**
    */
   @SuppressWarnings("serial")
   public class MyLongSumAggregator extends MeasureAggregator<Long> {
   
       Long sum = new Long(0L);
   
       @Override
       public void reset() {
           sum = new Long(0L);
       }
   
       @Override
       public void aggregate(Long value) {
           sum += value;
       }
   
       @Override
       public Long aggregate(Long value1, Long value2) {
           return Long.valueOf(value1 + value2);
       }
   
       @Override
       public Long getState() {
           return sum;
       }
   
       @Override
       public int getMemBytesEstimate() {
           return guessLongMemBytes();
       }
   
   }
   ------------------------------MyLongIngester---------------------------------------------------------------------------------------
   package com.demo.kylin.custom.mysum;
   
   import org.apache.kylin.common.util.Dictionary;
   import org.apache.kylin.measure.MeasureIngester;
   import org.apache.kylin.metadata.model.MeasureDesc;
   import org.apache.kylin.metadata.model.TblColRef;
   
   import java.util.Map;
   
   public class MyLongIngester extends MeasureIngester<Long> {
   
       @Override
       public Long valueOf(String[] values, MeasureDesc measureDesc, Map<TblColRef, Dictionary<String>> dictionaryMap) {
           if (values.length > 1)
               throw new IllegalArgumentException();
   
           if (values[0] == null || values[0].length() == 0)
               return new Long(0L);
           else
               return Long.valueOf(values[0]);
       }
   
       @Override
       public void reset() {
   
       }
   }
   -------------------------------------------------------------kylin.properties add config like blew------------------------------
   kylin.metadata.custom-measure-types.MYSUM=com.demo.kylin.custom.mysum.MySumMeasureType$Factory
   ---------------------------------------------------------i got error stack-------------------------------------------------------------
   org.apache.kylin.measure.dim.DimCountDistinctMeasureType$Factory
   2019-07-19 14:35:13,993 INFO  [localhost-startStop-1] measure.MeasureTypeFactory:146 : registering MYSUM(mysum), class com.demo.kylin.custom.mysum.MySumMeasureType$Factory
   2019-07-19 14:35:44,213 INFO  [BadQueryDetector] service.BadQueryDetector:147 : Detect bad query.
   2019-07-19 14:35:44,216 INFO  [FetcherRunner 24686388-46] threadpool.DefaultFetcherRunner:94 : Job Fetcher: 0 should running, 0 actual running, 0 stopped, 0 ready, 8 already succeed, 3 error, 0 discarded, 0 others
   2019-07-19 14:36:18,241 INFO  [FetcherRunner 24686388-46] threadpool.DefaultFetcherRunner:94 : Job Fetcher: 0 should running, 0 actual running, 0 stopped, 0 ready, 8 already succeed, 3 error, 0 discarded, 0 others
   2019-07-19 14:36:43,755 INFO  [FetcherRunner 24686388-46] threadpool.DefaultFetcherRunner:94 : Job Fetcher: 0 should running, 0 actual running, 0 stopped, 0 ready, 8 already succeed, 3 error, 0 discarded, 0 others
   2019-07-19 14:36:43,758 WARN  [localhost-startStop-1] cube.CubeDescManager:104 : Broken cube desc sum1
   java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
   	at org.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:466)
   	at org.apache.kylin.metadata.model.DataModelManager.getInstance(DataModelManager.java:52)
   	at org.apache.kylin.cube.model.CubeDesc.init(CubeDesc.java:633)
   	at org.apache.kylin.cube.CubeDescManager$1.initEntityAfterReload(CubeDescManager.java:102)
   	at org.apache.kylin.cube.CubeDescManager$1.initEntityAfterReload(CubeDescManager.java:95)
   	at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAt(CachedCrudAssist.java:159)
   	at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadQuietlyAt(CachedCrudAssist.java:141)
   	at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAll(CachedCrudAssist.java:124)
   	at org.apache.kylin.cube.CubeDescManager.<init>(CubeDescManager.java:112)
   	at org.apache.kylin.cube.CubeDescManager.newInstance(CubeDescManager.java:75)
   	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   	at java.lang.reflect.Method.invoke(Method.java:498)
   	at org.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:464)
   	at org.apache.kylin.cube.CubeDescManager.getInstance(CubeDescManager.java:67)
   	at org.apache.kylin.cube.CubeInstance.init(CubeInstance.java:146)
   	at org.apache.kylin.cube.CubeManager$1.initEntityAfterReload(CubeManager.java:140)
   	at org.apache.kylin.cube.CubeManager$1.initEntityAfterReload(CubeManager.java:137)
   	at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAt(CachedCrudAssist.java:159)
   	at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadQuietlyAt(CachedCrudAssist.java:141)
   	at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAll(CachedCrudAssist.java:124)
   	at org.apache.kylin.cube.CubeManager.<init>(CubeManager.java:151)
   	at org.apache.kylin.cube.CubeManager.newInstance(CubeManager.java:108)
   	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   	at java.lang.reflect.Method.invoke(Method.java:498)
   	at org.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:464)
   	at org.apache.kylin.cube.CubeManager.getInstance(CubeManager.java:103)
   	at org.apache.kylin.stream.coordinator.Coordinator$StreamingBuildJobStatusChecker.<init>(Coordinator.java:1316)
   	at org.apache.kylin.stream.coordinator.Coordinator$StreamingBuildJobStatusChecker.<init>(Coordinator.java:1314)
   	at org.apache.kylin.stream.coordinator.Coordinator.<init>(Coordinator.java:146)
   	at org.apache.kylin.stream.coordinator.Coordinator.getInstance(Coordinator.java:174)
   	at org.apache.kylin.rest.service.StreamingCoordinatorService.<init>(StreamingCoordinatorService.java:50)
   	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
   	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
   	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
   	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
   	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1147)
   	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1099)
   	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
   	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
   	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
   	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
   	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
   	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
   	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
   	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
   	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
   	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
   	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
   	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
   	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
   	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
   	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
   	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
   	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
   	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
   	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
   	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
   	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
   	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
   	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:443)
   	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325)
   	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
   	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5157)
   	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5680)
   	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
   	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1018)
   	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:994)
   	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
   	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127)
   	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2021)
   	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
   	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
   	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
   	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
   	at java.lang.Thread.run(Thread.java:748)
   Caused by: java.lang.reflect.InvocationTargetException
   	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   	at java.lang.reflect.Method.invoke(Method.java:498)
   	at org.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:464)
   	... 80 more
   Caused by: java.lang.RuntimeException: Failed to init DataModelManager from kylin_metadata@hbase
   	at org.apache.kylin.metadata.model.DataModelManager.newInstance(DataModelManager.java:62)
   	... 85 more
   Caused by: java.lang.reflect.InvocationTargetException
   	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
   	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
   	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
   	at org.apache.kylin.metadata.model.DataModelManager.newInstance(DataModelManager.java:60)
   	... 85 more
   Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
   	at org.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:466)
   	at org.apache.kylin.metadata.TableMetadataManager.getInstance(TableMetadataManager.java:68)
   	at org.apache.kylin.metadata.model.DataModelManager.init(DataModelManager.java:98)
   	at org.apache.kylin.metadata.model.DataModelManager.<init>(DataModelManager.java:79)
   	... 90 more
   Caused by: java.lang.reflect.InvocationTargetException
   	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   	at java.lang.reflect.Method.invoke(Method.java:498)
   	at org.apache.kylin.common.KylinConfig.getManager(KylinConfig.java:464)
   	... 93 more
   Caused by: java.lang.ExceptionInInitializerError
   	at org.apache.kylin.metadata.datatype.DataType.<clinit>(DataType.java:133)
   	at org.apache.kylin.metadata.model.ColumnDesc.init(ColumnDesc.java:211)
   	at org.apache.kylin.metadata.model.TableDesc.init(TableDesc.java:333)
   	at org.apache.kylin.metadata.TableMetadataManager$1.initEntityAfterReload(TableMetadataManager.java:122)
   	at org.apache.kylin.metadata.TableMetadataManager$1.initEntityAfterReload(TableMetadataManager.java:118)
   	at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAt(CachedCrudAssist.java:159)
   	at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadQuietlyAt(CachedCrudAssist.java:141)
   	at org.apache.kylin.metadata.cachesync.CachedCrudAssist.reloadAll(CachedCrudAssist.java:124)
   	at org.apache.kylin.metadata.TableMetadataManager.initSrcTable(TableMetadataManager.java:126)
   	at org.apache.kylin.metadata.TableMetadataManager.<init>(TableMetadataManager.java:98)
   	at org.apache.kylin.metadata.TableMetadataManager.newInstance(TableMetadataManager.java:73)
   	... 98 more
   Caused by: java.lang.IllegalArgumentException: Unrecognized MeasureTypeFactory classname: com.demo.kylin.custom.mysum.MySumMeasureType$Factory
   	at org.apache.kylin.measure.MeasureTypeFactory.init(MeasureTypeFactory.java:126)
   	at org.apache.kylin.measure.MeasureTypeFactory.<clinit>(MeasureTypeFactory.java:98)
   	... 109 more
   Caused by: java.lang.ClassCastException: com.demo.kylin.custom.mysum.MySumMeasureType$Factory cannot be cast to org.apache.kylin.measure.MeasureTypeFactory
   	at org.apache.kylin.measure.MeasureTypeFactory.init(MeasureTypeFactory.java:124)
   	... 110 more

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services