Top Banner
Ad-hoc Big-Data Analysis with Lua And LuaJIT Alexander Gladysh <[email protected]> @agladysh Lua Workshop 2015 Stockholm 1 / 32
32

Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh @agladysh LuaWorkshop2015 Stockholm 1/32.

Jul 07, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Ad-hoc Big-Data Analysis with LuaAnd LuaJIT

Alexander Gladysh <[email protected]>@agladysh

Lua Workshop 2015Stockholm

1 / 32

Page 2: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Outline

Introduction

The Problem

A Solution

Assumptions

Examples

The Tools

Notes

Questions?

2 / 32

Page 3: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Alexander Gladysh

I CTO, co-owner at LogicEditorI In löve with Lua since 2005

3 / 32

Page 4: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

The Problem

I You have a dataset to analyze,I which is too large for "small-data" tools,I and have no resources to setup and maintain (or pay for) the

Hadoop, Google Big Query etc.I but you have some processing power available.

4 / 32

Page 5: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Goal

I Pre-process the data so it can be handled by R or Excel oryour favorite analytics tool (or Lua!).

I If the data is dynamic, then learn to pre-process it and build adata processing pipeline.

5 / 32

Page 6: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

An Approach

I Use Lua!I And (semi-)standard tools, available on Linux.I Go minimalistic while exploring, avoid frameworks,I Then move on to an industrial solution that fits your newly

understood requirements,I Or roll your own ecosystem! ;-)

6 / 32

Page 7: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Assumptions

7 / 32

Page 8: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Data Format

I Plain textI Column-based (csv-like), optionally with free-form data in the

endI Typical example: web-server log files

8 / 32

Page 9: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Data Format Example: Raw Data

2015/10/15 16:35:30 [info] 14171#0: *901195[lua] index:14: 95c1c06e626b47dfc705f8ee6695091a109.74.197.145 *.example.comGET 123456.gif?q=0&step=0&ref= HTTP/1.1 example.com

NB: This is a single, tab-separated line from a time-sorted file.

9 / 32

Page 10: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Data Format Example: Intermediate Data

alpha.example.com 5beta.example.com 7gamma.example.com 1

NB: These are several tab-separated lines from a key-sorted file.

10 / 32

Page 11: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Hardware

I As usual, more is better: Cores, cache, memory speed andsize, HDD speeds, networking speeds...

I But even a modest VM (or several) can be helpful.I Your fancy gaming laptop is good too ;-)

11 / 32

Page 12: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

OS

Linux (Ubuntu) Server.This approach will, of course, work for other setups.

12 / 32

Page 13: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Filesystem

I Ideally, have data copies on each processing node, usingidentical layouts.

I Fast network should work too.

13 / 32

Page 14: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Examples

14 / 32

Page 15: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Bash Script Example

time pv /path/to/uid-time-url-post.gz \| pigz -cdp 4 \| cut -d$’\t’ -f 1,3 \| parallel --gnu --progress -P 10 --pipe --block=16M \

$(cat <<"EOF"luajit ~me/url-to-normalized-domain.lua

EOF) \

| LC_ALL=C sort -u -t$’\t’ -k2 --parallel 6 -S20% \| luajit ~me/reduce-value-counter.lua \| LC_ALL=C sort -t$’\t’ -nrk2 --parallel 6 -S20% \| pigz -cp4 >/path/to/domain-uniqs_count-merged.gz

15 / 32

Page 16: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Lua Script Example: url-to-normalized-domain.lua

for l in io.lines() dolocal key, value = l:match("^([^\t]+)\t(.*)")if value then

value = url_to_normalized_domain(value)endif key and value then

io.write(key, "\t", value, "\n")end

end

16 / 32

Page 17: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Lua Script Example: reduce-value-counter.lua 1/3

-- Assumes input sorted by VALUE-- a foo --> foo 3-- a foo bar 2-- b foo quo 1-- a bar-- c bar-- d quo

17 / 32

Page 18: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Lua Script Example: reduce-value-counter.lua 2/3

local last_key = nil, accum = 0

local flush = function(key)if last_key then

io.write(last_key, "\t", accum, "\n")endaccum = 0last_key = key -- may be nil

end

18 / 32

Page 19: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Lua Script Example: reduce-value-counter.lua 3/3

for l in io.lines() do-- Note reverse order!local value, key = l:match("^(.-)\t(.*)$")assert(key and value)

if key ~= last_key thenflush(key)collectgarbage("step")

end

accum = accum + 1end

flush()

19 / 32

Page 20: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Tying It All Together

Basically:I You work with sorted data,I mapping and reducing it line-by-line,I in parallel where at all possible,I while trying to use as much of available hardware resources as

practical,I and without running out of memory.

20 / 32

Page 21: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

The Tools

21 / 32

Page 22: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

The Tools

I parallelI sort, uniq, grepI cut, join, commI pvI compression utilitiesI LuaJIT

22 / 32

Page 23: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

LuaJIT?

Up to a point:I 2.1 helps to speed things up,I FFI bogs down development speed.I Go plain Lua first (run it with LuaJIT),I then roll your own ecosystem as needed ;-)

23 / 32

Page 24: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Parallel

I xargs for parallel computationI can run your jobs in parallel on a single machineI or on a "cluster"

24 / 32

Page 25: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Compression

I gzip: default, badI lz4: fast, large filesI pigz: fast, parallelizableI xz: good compression, slowI ...and many more,I be on lookout for new formats!

25 / 32

Page 26: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

GNU sort Tricks

LC_ALL=C \sort -t$’\t’ --parallel 4 -S60% \-k3,3nr -k2,2 -k1,1nr

I Disable locale.I Specify delimiter.I Note that parallel x4 with 60% memory will consume 0.6 *

log(4) = 120% of memory.I When doing multi-key sort, specify parameters after key

number.

26 / 32

Page 27: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

grep

http://stackoverflow.com/questions/9066609/fastest-possible-grep

27 / 32

Page 28: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Notes and Remarks

28 / 32

Page 29: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Why Lua?

Perl, AWK are traditional alternatives to Lua, but, if you’re notvery disciplined and experienced, they are much less maintainable.

29 / 32

Page 30: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Start Small!

I Always run your scripts on small representative excerpts fromyour datasets, not only while developing them locally, but onactual data-processing nodes too.

I Saves time and helps you learn the bottlenecks.I Sometimes large run still blows in your face though:I Monitor resource utilization at run-time.

30 / 32

Page 31: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Discipline!

I Many moving parts, large turn-around times, hard to keep tabs.I Keep journal: Write down what you run and what time it took.I Store actual versions of your scripts in a source control system.I Don’t forget to sanity-check the results you get!

31 / 32

Page 32: Ad-hoc Big-Data Analysis with Lua - And LuaJIT · Ad-hoc Big-Data Analysis with Lua AndLuaJIT Alexander Gladysh <ag@logiceditor.com> @agladysh LuaWorkshop2015 Stockholm 1/32.

Questions?

Alexander Gladysh, [email protected]

32 / 32