News for hackers. Stuff that matters.
Re:Joining a billion rows 20x faster than Apache Spark by banachtarski on Thursday February 09, 2017 @02:31PM (#13610063)
Am I reading this correctly? The testbed was a single laptop? A big part of spark is the distributed in-memory aspect so I'm not sure I understand why any of these numbers mean anything.
Re:Joining a billion rows 20x faster than Apache Spark by quantumhobbit on Thursday February 09, 2017 @02:44PM (#13610191)
This paper is a must read: https://pdfs.semanticscholar.org/6753/959eed800e9fad9e330daa...

People keep stumbling upon the same thing over and over which is that the ability to scale has significant overhead.

Re:Joining a billion rows 20x faster than Apache Spark by edw on Thursday February 09, 2017 @04:54PM (#13611366)
Back in '10, I needed a three or four node Hadoop cluster just to match the performance I was getting using a spare Mac mini in development mode when I was doing a lot of work in Cascalog, which is based on Cascading.

Most problems are not Big Data problems. The size a problem must be before it qualifies as a Big-Data problem grows larger every day with the availability of machines with ever-more cores and memory. `Sed`, `awk`, `grep`, `sort`, `join`, and so forth are some of the least appreciated tools in the Unix toolbox.

People want to think they have Big Data problems but they probably just have plain old normal-data problems. I have had to unwind the ridiculous, heavy-weight, Big Data solutions to normal-data problems that "kids today" love.

If you don't work for Netflix or Google or Facebook or insert maybe a hundred other companies here, you probably do not have a Big Data problem.

Re:Joining a billion rows 20x faster than Apache Spark by devonkim on Thursday February 09, 2017 @06:14PM (#13611932)
I'm mostly convinced that most companies interested in Big Data stuff are not as interested in the scale of the problem but that they want to create "data lakes" to unite thousands of different forms of data that exist in their organization under a federated, centralized database of some sort. But most of us experienced in either enterprise companies or machine learning is that data quality is the primary problem that almost nobody actually can solve without brute force human eyeballs, which simply won't scale with the amount of data pouring in. So now there's interest in machine learning primarily to try to do that instead of people.
Re:Joining a billion rows 20x faster than Apache Spark by edw on Thursday February 09, 2017 @07:04PM (#13612208)
At the risk of sounding cynical, there are also companies out there that want to _appear_ to be interested in all the things you just mentioned, so they'll hire a few people to do their [wave hands] data science, machine learning "thing" and those few people then go down the rabbit hole, untethered from reality. The C-suite people will then have their message they can deliver externally—and internally—about their commitment to [wave hands again] all that stuff. The tragedy when this happens is that sometimes that small team of people is not aware what their function at the company is—being the human props for the sales and marketing teams. The alternative, I suppose, is far more depressing—that the "data scientists" are fully aware of their role in the grand scheme of things.
Re:Joining a billion rows 20x faster than Apache Spark by emmanuel_1234 on Friday February 10, 2017 @12:11AM (#13613374)
Woah, that was exactly my previous position.

Upside: I had one of the most paying position among the technical people. I also got to play with expensive stuff.

Downside: it was soul crushing, I was delivering no value whatsoever and had a really hard time looking at my colleagues in the eye, as they were making a third of my salary (at best).

I got out, joined a new company with that in mind and now have a very exciting job. They do have a dedicated R&D, Data Science team which is a shit show: absolutely brilliant people completely wasted as they can't build anything for lack of programming/technology experience, in an environment where their theoretical skills are mostly useless. I'm genuinely sad for them.

[edit: one of the company still has a Hadoop/Spark cluster for their whooping 500Mb of data]

Re:Joining a billion rows 20x faster than Apache Spark by FractalNerve on Thursday February 09, 2017 @08:43PM (#13612645)
You really just described me. I've to do such a show-case project to complete my MSc Thesis for a minimum pay. And make all the proofs, so that the C-Suite guys can use during their presentations to sell what I made for a lots of money. (Even unaware if they'll charge their customers in the hundred thausands or millions range).

However, I'm really glad to find out about SnappyData.io, that's gonna save me a lot of time waiting. It would truly be my perfect dream, if they allowed running any programming language inside an environment like Jupyter.org or BeakerNotebook.com, but with Pandoc.org Markdown. So that I can essentially work fulltime programming, while I can also document it and also be able to export my documentation to a good looking latex thesis.

Re:Joining a billion rows 20x faster than Apache Spark by sudsmenon on Friday February 10, 2017 @01:21AM (#13613618)
SnappyData has a Zeppellin interpreter and the code is open source. So if adding a interpreter for jupyter is something that can be easily added, I am sure someone from the community would find it a interesting project to undertake. Agree that it would be useful
Re:Joining a billion rows 20x faster than Apache Spark by wakkaflokka on Friday February 10, 2017 @09:57AM (#13615759)
This is so true. For what it's worth, there are probably a lot of people who would give anything to be a human prop earning a salary significantly above $100k (even far outside of SF). For someone who's actually interested in data science, this would be miserable.
Re:Joining a billion rows 20x faster than Apache Spark by dandermotj on Friday February 10, 2017 @06:10AM (#13614574)
This is excruciatingly accurate.
Re:Joining a billion rows 20x faster than Apache Spark by jy2947 on Thursday February 09, 2017 @06:56PM (#13612161)
+1
Re:Joining a billion rows 20x faster than Apache Spark by ganeshkrishnan on Thursday February 09, 2017 @10:19PM (#13612989)
>If you don't work for Netflix or Google or Facebook or insert maybe a hundred other companies here, you probably do not have a Big Data problem.

I disagree over here. I have worked across multiple scenarios which warranted big data solutions and such solutions were not feasible before Apache Spark and such were available. Even our current startup (www.aihello.com) has 8.7 million products and calculating LDA + Cosine Similarity reaches trillions of matrices which is simply not feasible with traditional tools.

Telstra/Sensis, the telecom company in Australia that I consulted for, went from a month delayed reporting to near real time reporting due to apache spark.

Also keep in mind that the scale of data is growing exponentially for all of us since storage is getting cheaper and big data analysis is proving game changer in many scenarios.

Re:Joining a billion rows 20x faster than Apache Spark by sudsmenon on Friday February 10, 2017 @01:26AM (#13613639)
Being able to do things like churn prediction and net promoter score in real time was one of the motivations for creating SnappyData. You get the ability to mutate data (think KPI maintenance in memory without having to jump across products) , and do joins etc. on streams, which makes things a lot simpler
Re:Joining a billion rows 20x faster than Apache Spark by makapuf on Thursday February 09, 2017 @05:07PM (#13611466)
Amen. Also said as: too big for excel is not big data. See also https://www.chrisstucchio.com/blog/2013/hadoop_hatred.html
Re:Joining a billion rows 20x faster than Apache Spark by edw on Thursday February 09, 2017 @05:21PM (#13611573)
Amen right back at ya! (I love the O'Reilly book cover.) I highly recommend people read your blog post. And there's also this classic:

https://aadrake.com/command-line-tools-can-be-235x-faster-th...

I'll also take this opportunity to plug Make and Drake for manipulating data in a replicable way:

https://bost.ocks.org/mike/make/

https://github.com/Factual/drake

If you're processing data using tools that cannot trace their ancestry directly to some time before 1985, you're probably wasting your own and your colleagues' time.

Re:Joining a billion rows 20x faster than Apache Spark by makapuf on Friday February 10, 2017 @02:46AM (#13613880)
Just for clarification, I'm not the original blogger. +10 for the other link and using make ! I don't know Drake however.
Re:Joining a billion rows 20x faster than Apache Spark by placeybordeaux on Thursday February 09, 2017 @05:17PM (#13611543)
The picture has now gotten a little fuzzier as this blog post conflates map reduce and YARN and calls them both hadoop. The scala pseudo code is just about exactly what you'd use with spark which runs on YARN.
Re:Joining a billion rows 20x faster than Apache Spark by edw on Thursday February 09, 2017 @05:23PM (#13611589)
I think his point is that bloated, over-engineered Big Data systems—whether batch or streaming—are overkill for the vast majority of problems.
Re:Joining a billion rows 20x faster than Apache Spark by placeybordeaux on Thursday February 09, 2017 @05:50PM (#13611775)
There are just many points that don't really apply to stuff like spark or tez that runs on YARN:

ex: Hadoop << SQL, Python Scripts

I completely agree with

Mapreduce << SQL, Python Scripts

I do a lot of my processing on sparkSQL and through RDD transformations as opposed to Mapreduce limiting, slow KV style processing.

Re:Joining a billion rows 20x faster than Apache Spark by nickpsecurity on Thursday February 09, 2017 @07:41PM (#13612399)
Thanks for the link. The replies in it were hilariously obvious.
Re:Joining a billion rows 20x faster than Apache Spark by hinkley on Thursday February 09, 2017 @06:31PM (#13612043)
There used to be a little web site where you'd fill out a little form that asked you how much data you had, and it would provide a list of commercially available hardware that could be bought or configured to handle it on a single machine. I think it would even give you a link to someplace you could order that piece of hardware.

This reminds me of the time, way back when, that a coworker told me about how our customer was filling a rack with a terabyte of hard drives. My eyes bulged a little bit to think of it. Now I chuckle to think that the laptop I had two laptops ago had a terabyte drive in it.

Re:Joining a billion rows 20x faster than Apache Spark by chx on Friday February 10, 2017 @02:41AM (#13613869)
https://twitter.com/garybernhardt/status/600783770925420546

> Consulting service: you bring your big data problems to me, I say "your data set fits in RAM", you pay me $10,000 for saving you $500,000.

Considering https://www.supermicro.com/products/system/4U/8048/SYS-8048B... which is a plain old 4U server not some fancy, super expensive NUMA machine can eat up 12TB memory, this quip and parent has quite some merits.

6TB is not even https://memory.net/product/s26361-f3843-e618-fujitsu-1x-64gb... horrible at 57 504 dollars. That's about 48 engineering days if your engineer related expenses are 150 an hour (and it's likely they are more).

Re:Joining a billion rows 20x faster than Apache Spark by chx on Saturday February 11, 2017 @04:51AM (#13621958)
Note: https://www.sgi.com/products/servers/uv/uv_300_30ex.html

> SGI UV 300 now scales up to 64 CPU sockets and 64TB of cache-coherent shared memory in a single system.

This is the current limit of Linux hardware memory support so going above it is tricky. But still, 64TB.

Re:Joining a billion rows 20x faster than Apache Spark by virmundi on Thursday February 09, 2017 @11:17PM (#13613179)
One nice thing about Hadoop is you get free distributed apps. On my current project, we only read about 50 TB of data per run across 70ish fraud models. Some read 1.5 TB, others only 20 GB. On a single system, that kind of data reading would require some smart I\O partitioning across the various models (multiples read the 1.5 TB data, all read the same 20 GB [after 20 GB you're looking at history that expands to the 1.5 TB]). With Hadoop, even just Map Reduce and Cascading, you can spin all of that work out to multiple computers. Since they have the data copied over multiple drives on those multiple computers, the I\O and general scheduling are handled for us. In the end, it makes everything simpler. If something fails due to network hiccups or disk failures, Hadoop moves the job and starts it again.
Re:Joining a billion rows 20x faster than Apache Spark by cle on Thursday February 09, 2017 @06:36PM (#13612061)
I think this is only half the story.

There are other use cases other than mere size that can necessitate "big data" solutions. E.g. timeliness, resiliency, maintainability...

If you are building production data processing systems that have constraints on data size, latency, resiliency, scheduling, dependency management, etc., you might be better off with a "big data" system. Even if the data could all fit on a beefy box. This was a painful lesson for me to learn.

Re:Joining a billion rows 20x faster than Apache Spark by brians on Thursday February 09, 2017 @09:14PM (#13612779)
Hm. Size is mere size. Latency will never improve with a "big data" solution over one machine with in-RAM data. Dependency management? You're going to declare it once and impose it everywhere anyway. Scheduling? Again, one machine with in-RAM data will always win.

That leaves resiliency and etc. I can't answer etc., but—how is resilience helped with a big data solution? That seems like Lampson's distributed system: more machines, but you need k-of-n, k>1. Better to just mirror to two machines with the data in RAM.

Re:Joining a billion rows 20x faster than Apache Spark by cle on Thursday February 09, 2017 @11:01PM (#13613113)
Latency does improve if you download your data in parallel across a cluster. Or if you're running many iterations of an algorithm over GBs of data thousands of times, and each iteration is independent--you can save hours or days by performing them in parallel on a cluster.

If your scheduling involves running jobs that must wait on dependencies or events for a long time (hours, days), a hardware failure or some other anomaly can be catastrophic, whereas a "big data" framework can recover without your even knowing about it.

At the end of the day it just comes down to use cases. There are a LOT of other use cases that "big data" platforms address other than being able to fit data in RAM. Sometimes flying by the seat of your pants on one host doesn't cut it for business-critical processing.

> how is resilience helped with a big data solution?

The "R" in Spark's RDD abstraction is for "Resilient". Node failures and replication failures can be recovered without you even knowing it.

Sure, you can write all this stuff from scratch every time you encounter them (mirror data on hosts, run embarrassingly-parallel algorithms across a fleet of hosts, write your own DB-backed scheduling system, etc.), but all these are solved problems in these big data frameworks. You'll be wasting tons of time reinventing the wheel. I've been there.

Re:Joining a billion rows 20x faster than Apache Spark by bagels on Thursday February 09, 2017 @09:54PM (#13612911)
Is it even possible to get even 10TB of ram on a single commodity server?
Re:Joining a billion rows 20x faster than Apache Spark by errantblaze on Friday February 10, 2017 @02:06AM (#13613749)
The Super Micro SuperServer 8048B-TR4FT lists that it supports up to 12TB DDR4 ECC RAM (which could have 4xE7-8890v4 for 96 cores / 192 threads). Close to a commodity server, but probably doesn't quite count. Taking a wild guess on the price - $250k-$350k?

The SuperServer 7088B-TR4FT lists that it supports 24TB DDR4 ECC RAM (with 8xE78890v4 for 192 cores / 384 threads).

Re:Joining a billion rows 20x faster than Apache Spark by bagels on Thursday February 09, 2017 @09:50PM (#13612894)
This opinion is stated frequently. What size of data is big data, in your opinion?
Re:Joining a billion rows 20x faster than Apache Spark by deegles on Thursday February 09, 2017 @10:11PM (#13612969)
My rule: If it can fit on a single hard drive, it's not big data.
Re:Joining a billion rows 20x faster than Apache Spark by cortesoft on Thursday February 09, 2017 @11:12PM (#13613162)
There are WAY more than 100 companies that meet that requirement.
Re:Joining a billion rows 20x faster than Apache Spark by banachtarski on Thursday February 09, 2017 @03:30PM (#13610641)
The correct way to compare software A and software B is to benchmark both on the target platform/hardware they were respectively written for. Afterwards, do a cost-benefit analysis.

edit: (accidentally hit the submit button early).

I don't think people should leverage highly distributed software for small workloads, for the same reason they shouldn't write highly parallelized code for things that run perfectly fine on one thread. But the test, while well-intentioned, seems to miss the mark.

Re:Joining a billion rows 20x faster than Apache Spark by lomnakkus on Saturday February 11, 2017 @07:18AM (#13622294)
> The correct way to compare software A and software B is to benchmark both on the target platform/hardware they were respectively written for. Afterwards, do a cost-benefit analysis.

Well, ideally, yes, if we had infinite time. In reality we don't, which means that we have to choose what to do without the benefit of being able to implement-thrice-deploy-N-times[0]. In practice, what happens is that we (as "engineers"[1]) form rules and patterns in our heads which we use as guidance. I think the point being made is that "use a cluster" is almost never good guidance.

[0] How can you know what the performance is without actually giving your product to a bazillion users? This hints at why just-deliver-it-now-bugs-be-damned and continuous feedback is so valuable. There's no point optimizing a product used by 1000 people, but if your platform ends up being used by 1e9 people (e.g. Facebook), then you'll make ADJUSTMENTS ALONG THE WAY. This is a GOOD PROBLEM TO HAVE.

[1] A laughable term for most of the programmer crowd, myself included. Engineering is about tradeoffs and we still have basically no idea about tradeoffs in software development.

Re:Joining a billion rows 20x faster than Apache Spark by dajohnson89 on Thursday February 09, 2017 @03:04PM (#13610398)
I'm not sure why you got downvoted. It's a valid point and it makes intuitive sense.

Is there a clear cut answer, as to whether one should choose a distributed solution or not? It seems to me that if you're at the Terabyte scale, choosing non-distributing seems to be asking for trouble. A quick search indicates the largest HDD you can buy is around 8TB.

Re:Joining a billion rows 20x faster than Apache Spark by Loic on Thursday February 09, 2017 @03:13PM (#13610467)
The question is more, what do you want as result? Suppose you search in your 8TB database of molecules the 1000 molecules most similar to a given one, you have 16 cores, you cut the 8TB in 500GB skunks, preload continuously 1GB of molecules per core and accumulate 16*1000 molecules and merge at the end. You can do it on a single system and you work with a TB size dataset.

It means that the size of the dataset is not the only factor, you need to take into account the operations performed on each "element/document", the size of the intermediate datasets and the size of the final results and some more stuff (encoding, etc.).

Re:Joining a billion rows 20x faster than Apache Spark by dajohnson89 on Thursday February 09, 2017 @03:36PM (#13610680)
I see your point -- size alone doesn't matter, it's how you use it :-).

But how do things change when the dataset grows to 9GB? Now we need more than one HD. Hadoop + Spark is built for this exact use case...

Re:Joining a billion rows 20x faster than Apache Spark by quantumhobbit on Thursday February 09, 2017 @04:07PM (#13610990)
I think the conundrum comes up from the "donut hole" of medium sized data. For 1TB use a script and a laptop; for 100TB use Spark running on dozens to hundreds of machines.

The problem is exactly that 8-9TB range because running spark on just two or three machines will be slower than on a laptop with an extra external drive. You need to scale up into potentially dozens of machines just to get the same performance you were getting on a laptop. You were ok with a laptop, add more data and now you have a not insignificant AWS bill, unless you are ok puttering around on a few machines much more slowly than on the laptop.

There is no middle ground solution, so everyone starts with a overkill solution that scales out of fear of getting stuck on one machine when the dataset grows. But most of these systems never grow enough to need to scale this way. So we are wasting resources running toy clusters on problems that would fit on a laptop.

Maybe I am becoming a cranky old man who yells at clouds, but I miss MPI. It had no frills but it runs with next to no overhead and scales up to super computers with no donut hole in between.

Re:Joining a billion rows 20x faster than Apache Spark by user5994461 on Thursday February 09, 2017 @04:21PM (#13611103)
If a distributed software running on multiple high end expensive servers cannot beat another solution running on a single laptop with a cheap external hard drives, the issue is not distributed systems, the issue is that that specific software is crap.
Re:Joining a billion rows 20x faster than Apache Spark by quantumhobbit on Thursday February 09, 2017 @04:50PM (#13611342)
There will always be some overhead, but yes it seems like some of these frameworks are pretty bloated.
Re:Joining a billion rows 20x faster than Apache Spark by makapuf on Thursday February 09, 2017 @04:56PM (#13611394)
Processing data wouldn't be the problem with 2 socket xeons neither would it be putting 3 or 5 Hdd on a raid5. Getting the 32TB in, however, would take at least 8 hours at 10Gbps saturated, if your disks can write that fast.
Re:Joining a billion rows 20x faster than Apache Spark by mtanski on Thursday February 09, 2017 @06:18PM (#13611959)
10gigE seams fast, but in reality it's only 1.25GB/s in an ideal case. One enterprise PCIe SSD drive will saturate that. Or 5x of the old style 3.5 inch 7.2k RPM drives (you can fit 12 of these in a dense 1U case).

That why you see 40gigE or 56gigE used in HPC.

Re:Joining a billion rows 20x faster than Apache Spark by olavgg on Thursday February 09, 2017 @06:49PM (#13612119)
Its 25G, 50G or 100G today.
Re:Joining a billion rows 20x faster than Apache Spark by jupiter90000 on Thursday February 09, 2017 @07:57PM (#13612473)
Different example, doing a simple 'group by' sparksql query on only about 20 million rows on a distributed phoenix/hbase table couldn't even be completed because of spark dumbly shuffling all the data around the cluster. Spark/phoenix RDD drivers apparently had no 'group by' push down support for phoenix so shuffled all the data amazingly inefficiently. Running the same query directly on phoenix took all of about a minute to finish.

My point is, these 'on a laptop/single machine memory' examples don't really give me an indicator of scenarios where I might actually want to use spark/etc.

Re:Joining a billion rows 20x faster than Apache Spark by j-m-o on Friday February 10, 2017 @09:21AM (#13615491)
Hey, I'm the phoenix-spark author here. You're totally right, right now there is a lot of dumb shuffling around for certain operations. Hopefully some of that will get fixed up in the next release [1].

[1] https://issues.apache.org/jira/browse/PHOENIX-3600

Re:Joining a billion rows 20x faster than Apache Spark by dandermotj on Friday February 10, 2017 @06:20AM (#13614613)
You're trying to GROUP BY on a distributed data store; your code is the problem, not Spark SQL. Use CLUSTER BY - it's distributed sibling.

Query languages like HiveQL and Spark SQL were designed to look like SQL, but they're not.

Re:Joining a billion rows 20x faster than Apache Spark by jupiter90000 on Friday February 10, 2017 @12:15PM (#13616996)
Edit: correct me if I'm wrong, it doesn't appear that 'cluster by' avoids a costly shuffle first. I'd rather just push down to the database engine, when using a database engine.. group by worked fine on phoenix, so saying my code is the problem means it's really only a problem when using sparksql with the phoenix RDD driver.
Re:Joining a billion rows 20x faster than Apache Spark by jagsr123 on Thursday February 09, 2017 @03:38PM (#13610705)
From what I know, this test originally written by Databricks (expanded here) is meant to tease out the optimizations in the Tungsten engine. Of course, a distributed query that is dominated by shuffle costs will produce a very different result.
Re:Joining a billion rows 20x faster than Apache Spark by sumwale on Thursday February 09, 2017 @07:43PM (#13612402)
The test uses 4 partitions (4 threads) and is not single-threaded. Of course, distributing over network will have network costs which can be significant for sub-second queries but will become insignificant for larger data and more involved queries. The Spark execution plan will be exactly same on laptop or in cluster, and these specific queries will scale about linearly.