Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
controller.allow.hlc.tables=false
controller.enable.split.commit=truepinot.server.instance.segment.store.uri=<URI of segment store>
pinot.server.instance.enable.split.commit=true
pinot.server.storage.factory.class.(scheme)=<the corresponding Pinot FS impl> "segmentsConfig": {
...
"peerSegmentDownloadScheme": "http"
}controller.realtime.segment.deepStoreUploadRetryEnabled=true {
"tableName": "myTable_OFFLINE",
"tenants" : {
"broker":"DefaultTenant",
"server":"DefaultTenant"
}
}Failed to drop instance Broker_10.1.10.51_8000 -
Instance Broker_10.1.10.51_8000 is still liveFailed to drop instance Broker_172.17.0.2_8099 -
Instance Broker_172.17.0.2_8099 exists in ideal state for brokerResourceALL_JAVA_OPTS="-javaagent:jmx_prometheus_javaagent-0.12.0.jar=8080:pinot.yml -Xms4G -Xmx4G -XX:MaxDirectMemorySize=30g -Dlog4j2.configurationFile=conf/pinot-admin-log4j2.xml -Dplugins.dir=$BASEDIR/plugins"
bin/pinot-admin.sh ....{
...
"instanceAssignmentConfigMap": {
"OFFLINE": {
...
"replicaGroupPartitionConfig": {
"replicaGroupBased": true,
"numReplicaGroups": 3,
"numInstancesPerReplicaGroup": 4
}
}
},
...
"routing": {
"instanceSelectorType": "replicaGroup"
},
...
}{
...
"tableIndexConfig": {
...
"segmentPartitionConfig": {
"columnPartitionMap": {
"memberId": {
"functionName": "Modulo",
"numPartitions": 4
}
}
},
...
},
...
"routing": {
"segmentPrunerTypes": ["partition"]
},
...
}column.memberId.partitionFunction = Module
column.memberId.numPartitions = 4
column.memberId.partitionValues = 1{
"tableName": "myTable",
"tableType": ...,
"tenants": {
"server": "base_OFFLINE",
"broker": "base_BROKER"
},
"tierConfigs": [{
"name": "tierA",
"segmentSelectorType": "time",
"segmentAge": "7d",
"storageType": "pinot_server",
"serverTag": "tier_a_OFFLINE"
}, {
"name": "tierB",
"segmentSelectorType": "TIME",
"segmentAge": "15d",
"storageType": "PINOT_SERVER",
"serverTag": "tier_b_OFFLINE"
}]
}

This page introduces all the instance assignment strategies, when to use them, and how to configure them



"tableName": "myTable_OFFLINE",
"tableType": "OFFLINE",
...
...
"task": {
"taskTypeConfigsMap": {
"MergeRollupTask": {
"1day.mergeType": "concat",
"1day.bucketTimePeriod": "1d",
"1day.bufferTimePeriod": "1d"
}
}
}"controller.task.frequencyInSeconds": 3600"task": {
"taskTypeConfigsMap": {
"MergeRollupTask": {
"1hour.mergeType": "rollup",
"1hour.bucketTimePeriod": "1h",
"1hour.bufferTimePeriod": "3h",
"1hour.maxNumRecordsPerSegment": "1000000",
"1hour.maxNumRecordsPerTask": "5000000",
"1hour.maxNumParallelBuckets": "5",
"1day.mergeType": "rollup",
"1day.bucketTimePeriod": "1d",
"1day.bufferTimePeriod": "1d",
"1day.roundBucketTimePeriod": "1d",
"1day.maxNumRecordsPerSegment": "1000000",
"1day.maxNumRecordsPerTask": "5000000",
"metricColA.aggregationType": "sum",
"metricColB.aggregationType": "max"
}
}
}

{
"tableName": "myTable_OFFLINE",
"tenants" : {
"broker":"DefaultTenant",
"server":"DefaultTenant"
}
}curl -X PUT "http://localhost:9000/instances/Server_10.1.10.51_7000"
-H "accept: application/json"
-H "Content-Type: application/json"
-d "{ \"host\": \"10.1.10.51\", \"port\": \"7000\", \"type\": \"SERVER\", \"tags\": [ \"newName_OFFLINE\", \"DefaultTenant_REALTIME\" ]}""tableName": "myTable_REALTIME",
"tableType": "REALTIME",
...
...
"task": {
"taskTypeConfigsMap": {
"RealtimeToOfflineSegmentsTask": {
}
}
}"controller.task.frequencyInSeconds": 3600"task": {
"taskTypeConfigsMap": {
"RealtimeToOfflineSegmentsTask": {
"bucketTimePeriod": "6h",
"bufferTimePeriod": "5d",
"roundBucketTimePeriod": "1h",
"mergeType": "rollup",
"score.aggregationType": "max",
"maxNumRecordsPerSegment": "100000"
}
}
}{
"listFields": {
"TAG_LIST": [
"Tag1_OFFLINE"
]
},
...
}{
"instanceAssignmentConfigMap": {
"OFFLINE": {
"tagPoolConfig": {
"tag": "Tag1_OFFLINE"
},
"replicaGroupPartitionConfig": {
}
}
},
...
}{
"instanceAssignmentConfigMap": {
"OFFLINE": {
"tagPoolConfig": {
"tag": "Tag1_OFFLINE"
},
"replicaGroupPartitionConfig": {
"numInstances": 2
}
}
},
...
}{
"instanceAssignmentConfigMap": {
"OFFLINE": {
"tagPoolConfig": {
"tag": "Tag1_OFFLINE"
},
"replicaGroupPartitionConfig": {
"replicaGroupBased": true,
"numReplicaGroups": 2,
"numInstancesPerReplicaGroup": 3
}
}
},
...
}{
"instanceAssignmentConfigMap": {
"OFFLINE": {
"tagPoolConfig": {
"tag": "Tag1_OFFLINE"
},
"replicaGroupPartitionConfig": {
"replicaGroupBased": true,
"numReplicaGroups": 2,
"numPartitions": 2,
"numInstancesPerPartition": 2
}
}
},
...
}{
"listFields": {
"TAG_LIST": {
"Tag1_OFFLINE"
}
},
"mapFields": {
"pool": {
"Tag1_OFFLINE": 1
}
},
...
}{
"instanceAssignmentConfigMap": {
"OFFLINE": {
"tagPoolConfig": {
"tag": "Tag1_OFFLINE",
"poolBased": true
},
"replicaGroupPartitionConfig": {
"replicaGroupBased": true,
"numReplicaGroups": 2,
"numPartitions": 2,
"numInstancesPerPartition": 2
}
}
},
...
}


============================================================
RealtimeProvisioningHelperCommand -tableConfigFile /Users/ssubrama/tmp/samza/realtimeTableConfig.json -numPartitions 16 -pushFrequency null -numHosts 8,6,10 -numHours 6,12,18,24 -sampleCompletedSegmentDir /Users/ssubrama/tmp/samza/TestSamzaAnalyticsFeatures_1593411480000_1593500340000_0/ -ingestionRate 100 -maxUsableHostMemory 10G -retentionHours 72
Note:
* Table retention and push frequency ignored for determining retentionHours
* See https://docs.pinot.apache.org/operators/operating-pinot/tuning/realtime
Memory used per host (Active/Mapped)
numHosts --> 6 |8 |10 |
numHours
6 --------> 5.05G/19.49G |3.37G/12.99G |3.37G/12.99G |
12 --------> 5.89G/20.33G |3.93G/13.55G |3.93G/13.55G |
18 --------> 6.73G/21.49G |4.48G/14.33G |4.48G/14.33G |
24 --------> 7.56G/22G |5.04G/14.66G |5.04G/14.66G |
Optimal segment size
numHosts --> 6 |8 |10 |
numHours
6 --------> 111.98M |111.98M |111.98M |
12 --------> 223.96M |223.96M |223.96M |
18 --------> 335.94M |335.94M |335.94M |
24 --------> 447.92M |447.92M |447.92M |
Consuming memory
numHosts --> 6 |8 |10 |
numHours
6 --------> 1.45G |987.17M |987.17M |
12 --------> 2.61G |1.74G |1.74G |
18 --------> 3.77G |2.52G |2.52G |
24 --------> 4.94G |3.29G |3.29G |
Number of segments queried per host
numHosts --> 6 |8 |10 |
numHours
6 --------> 12 |12 |12 |
12 --------> 6 |6 |6 |
18 --------> 4 |4 |4 |
24 --------> 3 |3 |3 |"realtime.segment.flush.threshold.size": "0"
"realtime.segment.flush.threshold.time": "6h"
"realtime.segment.flush.desired.size": "112M""realtime.segment.flush.threshold.size": "0"
"realtime.segment.flush.threshold.time": "24h"
"realtime.segment.flush.desired.size": "450M"

This page describes the pinot cross-release compatibility test suite.

$ # This is the tool to check out and build the versions to test
$ checkoutAndBuild.sh -h
Usage: checkoutAndBuild.sh [-o olderCommit] [-n newerCommit] -w workingDir
-w, --working-dir Working directory where olderCommit and newCommit target files reside
-o, --old-commit-hash git hash (or tag) for old commit
-n, --new-commit-hash git hash (or tag) for new commit
If -n is not specified, then current commit is assumed
If -o is not specified, then previous commit is assumed (expected -n is also empty)
Examples:
To compare this checkout with previous commit: 'checkoutAndBuild.sh -w /tmp/wd'
To compare this checkout with some older tag or hash: 'checkoutAndBuild.sh -o release-0.7.1 -w /tmp/wd'
To compare any two previous tags or hashes: 'checkoutAndBuild.sh -o release-0.7.1 -n 637cc3494 -w /tmp/wd$ # Create the following file
$ cat /tmp/compat-settings.xml
<settings>
<mirrors>
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>dummy</mirrorOf>
<name>Dummy mirror to override default blocking mirror that blocks http</name>
<url>http://0.0.0.0/</url>
<blocked>false</blocked>
</mirror>
</mirrors>
</settings>
$ export PINOT_MAVEN_OPTS="/tmp/compat-settings.xml"
$ # And now, run the checkoutAndBuid.sh
$ checkoutAndBuild.sh -o <oldVersion> -n <newVersion> -w <workingDir># This is the tool to run the compatibility test suite against
$ ./compCheck.sh -h
Usage: -w <workingDir> -t <testSuiteDir> [-k]
MANDATORY:
-w, --working-dir Working directory where olderCommit and newCommit target files reside.
-t, --test-suite-dir Test suite directory
OPTIONAL:
-k, --keep-cluster-on-failure Keep cluster on test failure
-h, --help Prints this helpgit clone https://github.com/apache/pinot.git
cd compatibility-verifier./checkoutAndBuild.sh -o $OLD_COMMIT -n $NEW_COMMIT -w /tmp/wd./compCheck.sh -w /tmp/wd -t $TEST_SUITE_DIR123456,__GENERATION_NUMBER__,"s1-0",s2-0,1,2,m1-0-0;m1-0-1,m2-0-0;m2-0-1,3;4,6;7,Java C++ Python,01a0bc,k1;k2;k3;k4;k5,1;1;2;2;2,"{""k1"":1,""k2"":1,""k3"":2,""k4"":2,""k5"":2}",10,11,12.1,13.1SELECT longDimSV1, intDimMV1, count(*) FROM FeatureTest2 WHERE generationNumber = __GENERATION_NUMBER__ AND (stringDimSV1 != 's1-6' AND longDimSV1 BETWEEN 10 AND 1000 OR (intDimMV1 < 42 AND stringDimMV2 IN ('m2-0-0', 'm2-2-0') AND intDimMV2 NOT IN (6,72))) GROUP BY longDimSV1, intDimMV1 ORDER BY longDimSV1, intDimMV1 LIMIT 20SELECT foo FROM T1 WHERE x = 7 GROUP BY bar LIMIT 5{"isSuperset":true, "resultTable":{"dataSchema":{"columnNames":["foo"],"columnDataTypes":["LONG"]},"rows":[[11],[41],[-9223372036854775808],[32],[42],[48]]},"exceptions":[],"numServersQueried":1,"numServersResponded":1,"numSegmentsQueried":2,"numSegmentsProcessed":2,"numSegmentsMatched":2,"numConsumingSegmentsQueried":1,"numDocsScanned":13,"numEntriesScannedInFilter":120,"numEntriesScannedPostFilter":26,"numGroupsLimitReached":false,"totalDocs":66,"timeUsedMs":3,"offlineThreadCpuTimeNs":0,"realtimeThreadCpuTimeNs":352435,"segmentStatistics":[],"traceInfo":{},"minConsumingFreshnessTimeMs":1621918872017}










