I'm a bit confused, are you sure that it is possible to derive the CDF?
Using the moments variables.

The linked implementation on github seems to not use a derived CDF
equation, but instead using some sampling technique (which I can't fully
grasp yet) to estimate how many elements are in each bucket.

linearTimeIncrementHistogramCounters
https://github.com/stanford-futuredata/msketch/blob/cf4e49e860761f48ebdeb00f650ce997c46073e2/javamsketch/quantilebench/src/main/java/yahoo/DoublesPmfCdfImpl.java#L117

Calls into .get() to do some sort of sampling
https://github.com/stanford-futuredata/msketch/blob/cf4e49e860761f48ebdeb00f650ce997c46073e2/javamsketch/quantilebench/src/main/java/yahoo/DirectDoublesSketchAccessor.java#L29



On Tue, Aug 18, 2020 at 9:52 AM Ke Wu <ke.wu...@gmail.com> wrote:

> Hi Alex,
>
> It is great to know you are working on the metrics. Do you have any
> concern if we add a Histogram type metrics in Samza Runner itself for now
> so we can start using it before a generic histogram metrics can be
> introduced in the Metrics class?
>
> Best,
> Ke
>
> On Aug 18, 2020, at 12:57 AM, Gleb Kanterov <g...@spotify.com> wrote:
>
> Hi Alex,
>
> I'm not sure about restoring histogram, because the use-case I had in the
> past used percentiles. As I understand it, you can approximate histogram if
> you know percentiles and total count. E.g. 5% of values fall into
> [P95, +INF) bucket, other 5% [P90, P95), etc. I don't understand the paper
> well enough to say how it's going to work if given bucket boundaries happen
> to include a small number of values. I guess it's a similar kind of
> trade-off when we need to choose boundaries if we want to get percentiles
> from histogram buckets. I see primarily moment sketch as a method intended
> to approximate percentiles, not histogram buckets.
>
> /Gleb
>
> On Tue, Aug 18, 2020 at 2:13 AM Alex Amato <ajam...@google.com> wrote:
>
>> Hi Gleb, and Luke
>>
>> I was reading through the paper, blog and github you linked to. One thing
>> I can't figure out is if it's possible to use the Moment Sketch to restore
>> an original histogram.
>> Given bucket boundaries: b0, b1, b2, b3, ...
>> Can we obtain the counts for the number of values inserted each of the
>> ranges: [-INF, B0), … [Bi, Bi+1), …
>> (This is a requirement I need)
>>
>> Not be confused with the percentile/threshold based queries discussed in
>> the blog.
>>
>> Luke, were you suggesting collecting both and sending both over the FN
>> API wire? I.e. collecting both
>>
>>    - the variables to represent the Histogram as suggested in
>>    https://s.apache.org/beam-histogram-metrics:
>>    - In addition to the moment sketch variables
>>    
>> <https://blog.acolyer.org/2018/10/31/moment-based-quantile-sketches-for-efficient-high-cardinality-aggregation-queries/>
>>    .
>>
>> I believe that would be feasible, as we would still retain the Histogram
>> data. I don't think we can restore the Histograms with just the Sketch, if
>> that was the suggestion. Please let me know if I misunderstood.
>>
>> If that's correct, I can write up the benefits and drawbacks I see for
>> both approaches.
>>
>>
>> On Mon, Aug 17, 2020 at 9:23 AM Luke Cwik <lc...@google.com> wrote:
>>
>>> That is an interesting suggestion to change to use a sketch.
>>>
>>> I believe having one metric URN that represents all this information
>>> grouped together would make sense instead of attempting to aggregate
>>> several metrics together. The underlying implementation of using
>>> sum/count/max/min would stay the same but we would want a single object
>>> that abstracts this complexity away for users as well.
>>>
>>> On Mon, Aug 17, 2020 at 3:42 AM Gleb Kanterov <g...@spotify.com> wrote:
>>>
>>>> Didn't see proposal by Alex before today. I want to add a few more
>>>> cents from my side.
>>>>
>>>> There is a paper Moment-based quantile sketches for efficient high
>>>> cardinality aggregation queries [1], a TL;DR that for some N (around 10-20
>>>> depending on accuracy) we need to collect SUM(log^N(X)) ... log(X),
>>>> COUNT(X), SUM(X), SUM(X^2)... SUM(X^N), MAX(X), MIN(X). Given aggregated
>>>> numbers, it uses solver for Chebyshev polynomials to get quantile number,
>>>> and there is already Java implementation for it on GitHub [2].
>>>>
>>>> This way we can express quantiles using existing metric types in Beam,
>>>> that can be already done without SDK or runner changes. It can fit nicely
>>>> into existing runners and can be abstracted over if needed. I think this is
>>>> also one of the best implementations, it has < 1% error rate for 200 bytes
>>>> of storage, and quite efficient to compute. Did we consider using that?
>>>>
>>>> [1]:
>>>> https://blog.acolyer.org/2018/10/31/moment-based-quantile-sketches-for-efficient-high-cardinality-aggregation-queries/
>>>> [2]: https://github.com/stanford-futuredata/msketch
>>>>
>>>> On Sat, Aug 15, 2020 at 6:15 AM Alex Amato <ajam...@google.com> wrote:
>>>>
>>>>> The distinction here is that even though these metrics come from user
>>>>> space, we still gave them specific URNs, which imply they have a specific
>>>>> format, with specific labels, etc.
>>>>>
>>>>> That is, we won't be packaging them into a USER_HISTOGRAM urn. That
>>>>> URN would have less expectation for its format. Today the USER_COUNTER 
>>>>> just
>>>>> expects like labels (TRANSFORM, NAME, NAMESPACE).
>>>>>
>>>>> We didn't decide on making a private API. But rather an API
>>>>> available to user code for populating metrics with specific labels, and
>>>>> specific URNs. The same API could pretty much be used for user
>>>>> USER_HISTOGRAM. with a default URN chosen.
>>>>> Thats how I see it in my head at the moment.
>>>>>
>>>>>
>>>>> On Fri, Aug 14, 2020 at 8:52 PM Robert Bradshaw <rober...@google.com>
>>>>> wrote:
>>>>>
>>>>>> On Fri, Aug 14, 2020 at 7:35 PM Alex Amato <ajam...@google.com>
>>>>>> wrote:
>>>>>> >
>>>>>> > I am only tackling the specific metrics covered in (for the python
>>>>>> SDK first, then Java). To collect latency of IO API RPCS, and store it 
>>>>>> in a
>>>>>> histogram.
>>>>>> > https://s.apache.org/beam-gcp-debuggability
>>>>>> >
>>>>>> > User histogram metrics are unfunded, as far as I know. But you
>>>>>> should be able to extend what I do for that project to the user metric 
>>>>>> use
>>>>>> case. I agree, it won't be much more work to support that. I designed the
>>>>>> histogram with the user histogram case in mind.
>>>>>>
>>>>>> From the portability point of view, all metrics generated in users
>>>>>> code (and SDK-side IOs are "user code") are user metrics. But
>>>>>> regardless of how things are named, once we have histogram metrics
>>>>>> crossing the FnAPI boundary all the infrastructure will be in place.
>>>>>> (At least the plan as I understand it shouldn't use private APIs
>>>>>> accessible only by the various IOs but not other SDK-level code.)
>>>>>>
>>>>>> > On Fri, Aug 14, 2020 at 5:47 PM Robert Bradshaw <
>>>>>> rober...@google.com> wrote:
>>>>>> >>
>>>>>> >> Once histograms are implemented in the SDK(s) (Alex, you're
>>>>>> tackling
>>>>>> >> this, right?) it shoudn't be much work to update the Samza worker
>>>>>> code
>>>>>> >> to publish these via the Samza runner APIs (in parallel with Alex's
>>>>>> >> work to do the same on Dataflow).
>>>>>> >>
>>>>>> >> On Fri, Aug 14, 2020 at 5:35 PM Alex Amato <ajam...@google.com>
>>>>>> wrote:
>>>>>> >> >
>>>>>> >> > Noone has any plans currently to work on adding a generic
>>>>>> histogram metric, at the moment.
>>>>>> >> >
>>>>>> >> > But I will be actively working on adding it for a specific set
>>>>>> of metrics in the next quarter or so
>>>>>> >> > https://s.apache.org/beam-gcp-debuggability
>>>>>> >> >
>>>>>> >> > After that work, one could take a look at my PRs for reference
>>>>>> to create new metrics using the same histogram. One may wish to implement
>>>>>> the UserHistogram use case and use that in the Samza Runner
>>>>>> >> >
>>>>>> >> >
>>>>>> >> >
>>>>>> >> >
>>>>>> >> > On Fri, Aug 14, 2020 at 5:25 PM Ke Wu <ke.wu...@gmail.com>
>>>>>> wrote:
>>>>>> >> >>
>>>>>> >> >> Thank you Robert and Alex. I am not running a Beam job in
>>>>>> Google Cloud but with Samza Runner, so I am wondering if there is any ETA
>>>>>> to add the Histogram metrics in Metrics class so it can be mapped to the
>>>>>> SamzaHistogram metric to the actual emitting.
>>>>>> >> >>
>>>>>> >> >> Best,
>>>>>> >> >> Ke
>>>>>> >> >>
>>>>>> >> >> On Aug 14, 2020, at 4:44 PM, Alex Amato <ajam...@google.com>
>>>>>> wrote:
>>>>>> >> >>
>>>>>> >> >> One of the plans to use the histogram data is to send it to
>>>>>> Google Monitoring to compute estimates of percentiles. This is done using
>>>>>> the bucket counts and bucket boundaries.
>>>>>> >> >>
>>>>>> >> >> Here is a describing of roughly how its calculated.
>>>>>> >> >>
>>>>>> https://stackoverflow.com/questions/59635115/gcp-console-how-are-percentile-charts-calculated
>>>>>> >> >> This is a non exact estimate. But plotting the estimated
>>>>>> percentiles over time is often easier to understand and sufficient.
>>>>>> >> >> (An alternative is a heatmap chart representing histograms over
>>>>>> time. I.e. a histogram for each window of time).
>>>>>> >> >>
>>>>>> >> >>
>>>>>> >> >> On Fri, Aug 14, 2020 at 4:16 PM Robert Bradshaw <
>>>>>> rober...@google.com> wrote:
>>>>>> >> >>>
>>>>>> >> >>> You may be interested in the propose histogram metrics:
>>>>>> >> >>>
>>>>>> https://docs.google.com/document/d/1kiNG2BAR-51pRdBCK4-XFmc0WuIkSuBzeb__Zv8owbU/edit
>>>>>> >> >>>
>>>>>> >> >>> I think it'd be reasonable to add percentiles as its own
>>>>>> metric type
>>>>>> >> >>> as well. The tricky bit (though there are lots of resources on
>>>>>> this)
>>>>>> >> >>> is that one would have to publish more than just the
>>>>>> percentiles from
>>>>>> >> >>> each worker to be able to compute the final percentiles across
>>>>>> all
>>>>>> >> >>> workers.
>>>>>> >> >>>
>>>>>> >> >>> On Fri, Aug 14, 2020 at 4:05 PM Ke Wu <ke.wu...@gmail.com>
>>>>>> wrote:
>>>>>> >> >>> >
>>>>>> >> >>> > Hi everyone,
>>>>>> >> >>> >
>>>>>> >> >>> > I am looking to add percentile metrics (p50, p90 etc) to my
>>>>>> beam job but I only find Counter, Gauge and Distribution metrics. I
>>>>>> understand that I can calculate percentile metrics in my job itself and 
>>>>>> use
>>>>>> Gauge to emit, however this is not an easy approach. On the other hand,
>>>>>> Distribution metrics sounds like the one to go to according to its
>>>>>> documentation: "A metric that reports information about the distribution 
>>>>>> of
>>>>>> reported values.”, however it seems that it is intended for SUM, COUNT,
>>>>>> MIN, MAX.
>>>>>> >> >>> >
>>>>>> >> >>> > The question(s) are:
>>>>>> >> >>> >
>>>>>> >> >>> > 1. is Distribution metric only intended for sum, count, min,
>>>>>> max?
>>>>>> >> >>> > 2. If Yes, can the documentation be updated to be more
>>>>>> specific?
>>>>>> >> >>> > 3. Can we add percentiles metric support, such as Histogram,
>>>>>> with configurable list of percentiles to emit?
>>>>>> >> >>> >
>>>>>> >> >>> > Best,
>>>>>> >> >>> > Ke
>>>>>> >> >>
>>>>>> >> >>
>>>>>>
>>>>>
>

Reply via email to