Skip to content

HBASE-23065 [hbtop] Top-N heavy hitter user and client drill downs #722

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from

Conversation

ankitsinghal
Copy link
Contributor

No description provided.

@ankitsinghal
Copy link
Contributor Author

FYI @apurtell , @brfrn169

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

Copy link
Member

@brfrn169 brfrn169 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left some comments for hbtop. Most of them are small nits. I have a question. It looks like this PR includes the changes of HBASE-15519, right? You are assuming that after committing the PR of HBASE-15519, we will commit this PR?

@brfrn169
Copy link
Member

And don't we need ClientModeTest?

Copy link
Member

@joshelser joshelser left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to take this down locally and play with it too :)

Probably not a bad idea to also run this through a quick perf test to make sure no regressions come in (same way as the dependent user metrics change)

* @param countField Field which needs to be added with value 1 for each record
* @return records after selecting required fields and adding count field
*/
public static List<Record> selectModeFieldsAndAddCountField(List<FieldInfo> fieldInfos,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of doing this in one fatal swoop, could you split this method into two parts?

pseudo-code-y

.map(Record::select)
.map(Record::addCountField)

I guess this would undo the optimization you're trying to make of copying Record objects?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, Let me see if I can make it more readable.

@ankitsinghal
Copy link
Contributor Author

Thank you @brfrn169 and @joshelser for the review. Have pushed the commit addressing most of the review comments.

@Apache-HBase

This comment has been minimized.

Copy link
Contributor

@apurtell apurtell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One nit and a question. I defer comment on hbtop internal changes to @brfrn169

@ankitsinghal
Copy link
Contributor Author

Thanks a lot guys for the review @joshelser @brfrn169 @apurtell , have updated the pull request as per the review comments.

@ankitsinghal
Copy link
Contributor Author

Need to take this down locally and play with it too :)

Probably not a bad idea to also run this through a quick perf test to make sure no regressions come in (same way as the dependent user metrics change)

./bin/ycsb run hbase20 -P workloads/workloada -s -threads 10 -p columnfamily=family

ycsb shows performance similar on single server cluster with and without patch.

without patch

[OVERALL], RunTime(ms), 52493
[OVERALL], Throughput(ops/sec), 19050.159068828223
[TOTAL_GCS_PS_Scavenge], Count, 73
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 123
[TOTAL_GC_TIME_%PS_Scavenge], Time(%), 0.23431695654658716
[TOTAL_GCS_PS_MarkSweep], Count, 1
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 32
[TOTAL_GC_TIME
%PS_MarkSweep], Time(%), 0.06096050902025032
[TOTAL_GCs], Count, 74
[TOTAL_GC_TIME], Time(ms), 155
[TOTAL_GC_TIME
%], Time(%), 0.2952774655668375
[READ], Operations, 468618
[READ], AverageLatency(us), 518.8190018309156
[READ], MinLatency(us), 144
[READ], MaxLatency(us), 105983
[READ], 95thPercentileLatency(us), 815
[READ], 99thPercentileLatency(us), 1395
[READ], Return=OK, 468618
[READ], Return=NOT_FOUND, 31339
[CLEANUP], Operations, 20
[CLEANUP], AverageLatency(us), 122.7
[CLEANUP], MinLatency(us), 0
[CLEANUP], MaxLatency(us), 2081
[CLEANUP], 95thPercentileLatency(us), 263
[CLEANUP], 99thPercentileLatency(us), 2081
[UPDATE], Operations, 500043
[UPDATE], AverageLatency(us), 513.8964949014385
[UPDATE], MinLatency(us), 171
[UPDATE], MaxLatency(us), 118143
[UPDATE], 95thPercentileLatency(us), 780
[UPDATE], 99thPercentileLatency(us), 1448
[UPDATE], Return=OK, 500043
[READ-FAILED], Operations, 31339
[READ-FAILED], AverageLatency(us), 401.0351957624685
[READ-FAILED], MinLatency(us), 122
[READ-FAILED], MaxLatency(us), 22671
[READ-FAILED], 95thPercentileLatency(us), 633
[READ-FAILED], 99thPercentileLatency(us), 1195

With Patch

[OVERALL], RunTime(ms), 51625
[OVERALL], Throughput(ops/sec), 19370.46004842615
[TOTAL_GCS_PS_Scavenge], Count, 77
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 133
[TOTAL_GC_TIME_%PS_Scavenge], Time(%), 0.2576271186440678
[TOTAL_GCS_PS_MarkSweep], Count, 1
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 25
[TOTAL_GC_TIME
%PS_MarkSweep], Time(%), 0.048426150121065374
[TOTAL_GCs], Count, 78
[TOTAL_GC_TIME], Time(ms), 158
[TOTAL_GC_TIME
%], Time(%), 0.30605326876513317
[READ], Operations, 383745
[READ], AverageLatency(us), 492.0543016847125
[READ], MinLatency(us), 119
[READ], MaxLatency(us), 124479
[READ], 95thPercentileLatency(us), 752
[READ], 99thPercentileLatency(us), 1380
[READ], Return=OK, 383745
[READ], Return=NOT_FOUND, 116557
[CLEANUP], Operations, 20
[CLEANUP], AverageLatency(us), 122.8
[CLEANUP], MinLatency(us), 0
[CLEANUP], MaxLatency(us), 2019
[CLEANUP], 95thPercentileLatency(us), 309
[CLEANUP], 99thPercentileLatency(us), 2019
[READ-FAILED], Operations, 116557
[READ-FAILED], AverageLatency(us), 420.47432586631436
[READ-FAILED], MinLatency(us), 122
[READ-FAILED], MaxLatency(us), 89279
[READ-FAILED], 95thPercentileLatency(us), 654
[READ-FAILED], 99thPercentileLatency(us), 1274
[UPDATE], Operations, 499698
[UPDATE], AverageLatency(us), 535.2963730092977
[UPDATE], MinLatency(us), 173
[UPDATE], MaxLatency(us), 135935
[UPDATE], 95thPercentileLatency(us), 801
[UPDATE], 99thPercentileLatency(us), 1561
[UPDATE], Return=OK, 499698

@Apache-HBase

This comment has been minimized.

@Apache-HBase

This comment has been minimized.

Copy link
Member

@brfrn169 brfrn169 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested this locally and found some bugs. Left some comments for that.

I think this feature should be great for HBase administrators. Thank you! @ankitsinghal

@ankitsinghal
Copy link
Contributor Author

Thank you @brfrn169 for the review, Let me work on the review comments today.

@ankitsinghal
Copy link
Contributor Author

@brfrn169 , have taken the review comments in the latest push. Let me know how it looks?

@Apache-HBase

This comment has been minimized.

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
+0 🆗 reexec 0m 32s Docker mode activated.
_ Prechecks _
+1 💚 dupname 0m 0s No case conflicting files found.
+0 🆗 prototool 0m 1s prototool was not available.
+1 💚 hbaseanti 0m 0s Patch does not have any anti-patterns.
+1 💚 @author 0m 0s The patch does not contain any @author tags.
+1 💚 test4tests 0m 0s The patch appears to include 7 new or modified test files.
_ master Compile Tests _
+0 🆗 mvndep 0m 34s Maven dependency ordering for branch
+1 💚 mvninstall 5m 19s master passed
+1 💚 compile 3m 23s master passed
+1 💚 checkstyle 3m 1s master passed
+1 💚 shadedjars 4m 33s branch has no errors when building our shaded downstream artifacts.
+1 💚 javadoc 2m 18s master passed
+0 🆗 spotbugs 4m 2s Used deprecated FindBugs config; considering switching to SpotBugs.
+1 💚 findbugs 10m 25s master passed
_ Patch Compile Tests _
+0 🆗 mvndep 0m 15s Maven dependency ordering for patch
+1 💚 mvninstall 4m 56s the patch passed
+1 💚 compile 3m 20s the patch passed
+1 💚 cc 3m 20s the patch passed
+1 💚 javac 3m 20s the patch passed
+1 💚 checkstyle 2m 59s the patch passed
+1 💚 whitespace 0m 0s The patch has no whitespace issues.
+1 💚 shadedjars 4m 34s patch has no errors when building our shaded downstream artifacts.
+1 💚 hadoopcheck 15m 39s Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 💚 hbaseprotoc 3m 21s the patch passed
+1 💚 javadoc 2m 17s the patch passed
+1 💚 findbugs 11m 26s the patch passed
_ Other Tests _
+1 💚 unit 0m 42s hbase-protocol-shaded in the patch passed.
+1 💚 unit 0m 32s hbase-hadoop-compat in the patch passed.
+1 💚 unit 0m 41s hbase-hadoop2-compat in the patch passed.
+1 💚 unit 0m 27s hbase-protocol in the patch passed.
+1 💚 unit 1m 52s hbase-client in the patch passed.
-1 ❌ unit 163m 15s hbase-server in the patch failed.
+1 💚 unit 1m 7s hbase-hbtop in the patch passed.
+1 💚 asflicense 3m 41s The patch does not generate ASF License warnings.
259m 15s
Subsystem Report/Notes
Docker Client=19.03.5 Server=19.03.5 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-722/8/artifact/out/Dockerfile
GITHUB PR #722
Optional Tests dupname asflicense javac javadoc unit spotbugs findbugs shadedjars hadoopcheck hbaseanti checkstyle compile cc hbaseprotoc prototool
uname Linux 65e4d40f91f6 4.15.0-58-generic #64-Ubuntu SMP Tue Aug 6 11:12:41 UTC 2019 x86_64 GNU/Linux
Build tool maven
Personality /home/jenkins/jenkins-slave/workspace/HBase-PreCommit-GitHub-PR_PR-722/out/precommit/personality/provided.sh
git revision master / a3efa59
Default Java 1.8.0_181
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-722/8/artifact/out/patch-unit-hbase-server.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-722/8/testReport/
Max. process+thread count 4685 (vs. ulimit of 10000)
modules C: hbase-protocol-shaded hbase-hadoop-compat hbase-hadoop2-compat hbase-protocol hbase-client hbase-server hbase-hbtop U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-722/8/console
versions git=2.11.0 maven=2018-06-17T18:33:14Z) findbugs=3.1.11
Powered by Apache Yetus 0.11.1 https://yetus.apache.org

This message was automatically generated.

Copy link
Member

@brfrn169 brfrn169 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a comment that's a very small nit. It looks good to me 👍 Thanks! Ankit

@@ -65,6 +65,7 @@ public void showFilters(List<RecordFilter> filters) {
if (!filters.isEmpty()) {
filtersString = String.join(" + ",
filters.stream().map(f -> String.format("'%s'", f)).collect(Collectors.toList()));

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need this line :)

@brfrn169
Copy link
Member

brfrn169 commented Dec 8, 2019

Can I merge this? @ankitsinghal @joshelser @apurtell

@joshelser
Copy link
Member

Can I merge this

OK by me. I know Ankit was traveling with intermittent access. I think he might be back soon, but I don't think you need to wait for him if you think this is good.

@brfrn169
Copy link
Member

Merged.

@brfrn169 brfrn169 closed this Dec 16, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants