<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.mediawiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dsc</id>
	<title>MediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mediawiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dsc"/>
	<link rel="alternate" type="text/html" href="https://www.mediawiki.org/wiki/Special:Contributions/Dsc"/>
	<updated>2026-08-22T02:04:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-wmf.16</generator>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Topic:R8w8asd9f7fg0drz&amp;topic_postId=r92isxdtrjro2uk9&amp;topic_revId=r92j2zffv41ffztc&amp;action=single-view</id>
		<title>Topic:R8w8asd9f7fg0drz</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Topic:R8w8asd9f7fg0drz&amp;topic_postId=r92isxdtrjro2uk9&amp;topic_revId=r92j2zffv41ffztc&amp;action=single-view"/>
		<updated>2013-05-29T19:54:09Z</updated>

		<summary type="html">&lt;span class=&quot;plainlinks&quot;&gt;&lt;a href=&quot;/wiki/User:Dsc&quot; class=&quot;mw-userlink&quot; title=&quot;User:Dsc&quot;&gt;&lt;bdi&gt;Dsc&lt;/bdi&gt;&lt;/a&gt; &lt;span class=&quot;mw-usertoollinks&quot;&gt;(&lt;a href=&quot;/wiki/User_talk:Dsc&quot; class=&quot;mw-usertoollinks-talk&quot; title=&quot;User talk:Dsc&quot;&gt;talk&lt;/a&gt; | &lt;a href=&quot;/wiki/Special:Contributions/Dsc&quot; class=&quot;mw-usertoollinks-contribs&quot; title=&quot;Special:Contributions/Dsc&quot;&gt;contribs&lt;/a&gt;)&lt;/span&gt; edited a &lt;a class=&quot;external text&quot; data-mw-original-href=&quot;//www.mediawiki.org/w/index.php?title=Topic:R8w8asd9f7fg0drz&amp;amp;topic_showPostId=r92isxdtrjro2uk9#flow-post-r92isxdtrjro2uk9&quot; href=&quot;https://www.mediawiki.org/w/index.php?title=Topic:R8w8asd9f7fg0drz&amp;amp;topic_showPostId=r92isxdtrjro2uk9#flow-post-r92isxdtrjro2uk9&quot;&gt;post&lt;/a&gt; on &quot;What I did in the hackathon&quot;&lt;/span&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Thread:Talk:Amsterdam_Hackathon_2013/What_I_did_in_the_hackathon/reply_(5)&amp;diff=697318</id>
		<title>Thread:Talk:Amsterdam Hackathon 2013/What I did in the hackathon/reply (5)</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Thread:Talk:Amsterdam_Hackathon_2013/What_I_did_in_the_hackathon/reply_(5)&amp;diff=697318"/>
		<updated>2013-05-29T19:54:09Z</updated>

		<summary type="html">&lt;p&gt;Dsc: derf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In addition to helping with UserMetrics2 as [[User:DAndreescu|DAndreescu]] said above, I hammered out a MediaWiki extension enabling Limn graphs to be embedded via wikitext:&lt;br /&gt;
&lt;br /&gt;
https://github.com/dsc/limn-mediawiki-ext&lt;br /&gt;
&lt;br /&gt;
The embedding API is provided via a tag and a parser function which have identical functionality:&lt;br /&gt;
&lt;br /&gt;
* Function: &amp;lt;code&amp;gt;{{#graph:&amp;lt;GRAPH_ID&amp;gt;|&amp;lt;OPTION_KEY&amp;gt;=&amp;lt;OPTION_VAL&amp;gt;|...}}&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tag: &amp;lt;code&amp;gt;&amp;lt;graph graph-id=&amp;quot;&amp;lt;GRAPH_ID&amp;gt;&amp;quot; &amp;lt;OPTION_KEY&amp;gt;=&amp;quot;&amp;lt;OPTION_VAL&amp;gt;&amp;quot; ... /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The graph definition and data will be pulled from an existing Limn server, configured via mw-config:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require_once( &amp;quot;$IP/extensions/Limn/Limn.php&amp;quot; );&lt;br /&gt;
$wgLimnServerBase = &#039;http://dev-reportcard.wmflabs.org/&#039;;&lt;br /&gt;
$wgLimnServerRemoteMode = &#039;proxy&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is mostly a proof of concept, but I&#039;m pretty excited about the future -- another step toward democratizing data exploration and visualization!&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Topic:R8w8asd9f7fg0drz&amp;topic_postId=r92isxdtrjro2uk9&amp;topic_revId=r92isxdtrjro2uk9&amp;action=single-view</id>
		<title>Topic:R8w8asd9f7fg0drz</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Topic:R8w8asd9f7fg0drz&amp;topic_postId=r92isxdtrjro2uk9&amp;topic_revId=r92isxdtrjro2uk9&amp;action=single-view"/>
		<updated>2013-05-29T19:49:08Z</updated>

		<summary type="html">&lt;span class=&quot;plainlinks&quot;&gt;&lt;a href=&quot;/wiki/User:Dsc&quot; class=&quot;mw-userlink&quot; title=&quot;User:Dsc&quot;&gt;&lt;bdi&gt;Dsc&lt;/bdi&gt;&lt;/a&gt; &lt;span class=&quot;mw-usertoollinks&quot;&gt;(&lt;a href=&quot;/wiki/User_talk:Dsc&quot; class=&quot;mw-usertoollinks-talk&quot; title=&quot;User talk:Dsc&quot;&gt;talk&lt;/a&gt; | &lt;a href=&quot;/wiki/Special:Contributions/Dsc&quot; class=&quot;mw-usertoollinks-contribs&quot; title=&quot;Special:Contributions/Dsc&quot;&gt;contribs&lt;/a&gt;)&lt;/span&gt; &lt;a class=&quot;external text&quot; data-mw-original-href=&quot;//www.mediawiki.org/w/index.php?title=Topic:R8w8asd9f7fg0drz&amp;amp;topic_showPostId=r92isxdtrjro2uk9#flow-post-r92isxdtrjro2uk9&quot; href=&quot;https://www.mediawiki.org/w/index.php?title=Topic:R8w8asd9f7fg0drz&amp;amp;topic_showPostId=r92isxdtrjro2uk9#flow-post-r92isxdtrjro2uk9&quot;&gt;commented&lt;/a&gt; on &quot;What I did in the hackathon&quot; (&lt;em&gt;In addition to helping with UserMetrics2 as DAndreescu said above, I hammered out a MediaWiki extension enabling Limn graphs to be embedd...&lt;/em&gt;)&lt;/span&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Talk:Wikimedia_Hackathon_2013&amp;diff=7534056</id>
		<title>Talk:Wikimedia Hackathon 2013</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Talk:Wikimedia_Hackathon_2013&amp;diff=7534056"/>
		<updated>2013-05-29T19:49:08Z</updated>

		<summary type="html">&lt;p&gt;Dsc: /* What I did in the hackathon */ Added reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{LiquidThreads imported revision}}&lt;br /&gt;
&lt;br /&gt;
== Travel to Amsterdam ==&lt;br /&gt;
&lt;br /&gt;
Our Philippine group is interested to join. However, we need your assistance on how we can ask for travel grant and the specific requirements needed like cost of accommodation, flight, etc. Maybe we can do what was done on GlamCamp Amsterdam 2011 where WMNL was the one who requested for travel scholarship. [[User:Exec8|Exec8]] ([[User talk:Exec8|talk]]) 17:33, 29 January 2013 (UTC)&lt;br /&gt;
:Hi Exec8, we have money for scholarships and we will publish information about how to apply for that as soon as possible. [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 14:27, 23 February 2013 (UTC)&lt;br /&gt;
::Ok. Kindly notify us the soonest so that we would have no issues with time when applying at the Dutch Embassy in Manila if qualified. [[User:Exec8|Exec8]] ([[User talk:Exec8|talk]]) 16:58, 26 February 2013 (UTC)&lt;br /&gt;
:::You can start by signing up for the hackathon as registration is now open [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 19:04, 7 March 2013 (UTC)&lt;br /&gt;
::::I updated [[Amsterdam Hackathon 2013/Scholarships]] [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 18:17, 8 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Proposal for name and logo ==&lt;br /&gt;
&lt;br /&gt;
[[File:MediaWiki Hackathon UNOFFICIAL DRAFT.svg|right|200px]]&lt;br /&gt;
Hi, today I got the talk to propose a name and a logo for the event. After [[Talk:Groups/Promotion#Naming_our_developer_events_23068|the discussion]] about naming of events and some additional thoughts, the proposal is simply:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MediaWiki Hackathon&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It is a usual practice in conferences and events to have a name detached from location, year, edition, etc. Now the MediaWiki Hackathon is in Amsterdam, in the future it might be again there or somewhere else, but it will be our beloved MediaWiki Hackathon anyway.&lt;br /&gt;
&lt;br /&gt;
Back to Amsterdam, the web page and other materials could use a standard formula like:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;MediaWiki Hackathon&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Amsterdam 24–26 May 2013&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The logo proposed is also tied to the &amp;quot;MediaWiki Hackathon&amp;quot; and detached from a specific location, year or edition. It can be used in the future as such, unless we want to evolve it. There is also a [[media:MediaWiki Community UNOFFICIAL DRAFT.svg|version without text]].&lt;br /&gt;
&lt;br /&gt;
The logo combines the sunflower (a reference to the technologies powering Wikimedia projects) inside the circle made out of 3 segments (representing the Wikimedia community). It follows the [//wikimediafoundation.org/wiki/Wikimedia&amp;amp;#x20;visual&amp;amp;#x20;identity&amp;amp;#x20;guidelines Wikimedia visual identity guidelines] and you can find the sources at [[media:MediaWiki Hackathon UNOFFICIAL DRAFT.svg]]. [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 05:31, 21 February 2013 (UTC)&lt;br /&gt;
:Thanks Quim, I like the idea of having a standardised name, logo and design for all MediaWiki events. As for the logo itself, I prefer the more &amp;quot;techy&amp;quot; style that was for example used in [[:File:Hack-A-Ton-Berlin_2.jpg|Berlin in 2011]] or in [[:File:Hack-A-Thon-Brighton-Cropped.png|Brighton]] (as long as they follow the visual guidelines). Best, [[User:Nicole Ebber (WMDE)|Nicole Ebber (WMDE)]] ([[User talk:Nicole Ebber (WMDE)|talk]]) 12:39, 21 February 2013 (UTC)&lt;br /&gt;
::I&#039;m happy to see that you agree with the naming.&lt;br /&gt;
::About the logo, I think it is better not to increase the iconic soup we already have at http://wikimedia.org - which is more than enough to confuse anybody out our communities (and many inside). The origin of those logos was [[media:Wikimedia Community Logo-Toolserver.svg|the Toolserver logo]]. That type of logo hasn&#039;t been used in past events and I would let it rest unless we really really want to push it forward.&lt;br /&gt;
::The sunflower has been our identity for tech since basically the beginning, and it is being used from https://mediawiki.org to https://wikitech.wikimedia.org/ . I think using the sunflower is the best that we can do to help strengthening the identity of our tech community at large and also to help keeping the soup of Wikimedia logos under control. [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 15:17, 21 February 2013 (UTC)&lt;br /&gt;
:::The WMF hackathon in Bangalore last year was called the [[Bangalore_DevCamp_November_2012|Wikipedia DevCamp]]. It was decided to use the already recognized wikipedia branding and call it &#039;Dev&#039; because in India thee word &#039;hack&#039; has a negative connotation .&lt;br /&gt;
:::Wearing a t shirt with &#039;Wikipedia&#039; increases the value of it so much more than &#039;mediawiki&#039; :) [[User:Planemad|Planemad]] ([[User talk:Planemad|talk]]) 16:46, 21 February 2013 (UTC)&lt;br /&gt;
::::Hi Arun! Is there an original SVG version of [[:File:DevCamp Bangalore header.png]] available? &lt;br /&gt;
::::Erik also thinks that promoting &amp;quot;Wikipedia&amp;quot; for outreach events is better. I don&#039;t know if the Amsterdam organizers have any designer around but in any case your logo could be tweaked to satisfy a &amp;quot;Wikipedia Hackathon&amp;quot; or &amp;quot;Wikipedia DevCamp&amp;quot; in Amsterdam as well. Even that orange would fit, if needed.  :)&lt;br /&gt;
::::Erik is proposing to keep relying on [[media:Hackathon_Logo_Shiny.svg]] as basic identity for these outreach events. As you can see above, I really think we should limit the amount of visual elements we play with, and the hexagons + puzzle piece imho don&#039;t help. This is why I think Arun&#039;s design is a better starting point: the hexagons are there but almost gone and &amp;quot;Wikipedia&amp;quot; is spelled out. I would still remove the puzzle piece shape, leaving the &amp;quot;W&amp;quot;. As soon as we have an SVG we can play with it. [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 21:13, 21 February 2013 (UTC)&lt;br /&gt;
:Hi Quim, you&#039;re calling this the &#039;&#039;&#039;MediaWiki&#039;&#039;&#039; hackathon, but that&#039;s too narrow. In the past it was always the &#039;&#039;&#039;Wikimedia&#039;&#039;&#039; developer meeting. Primary product of course MediaWiki, but not only that. [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 14:59, 23 February 2013 (UTC)&lt;br /&gt;
::If you look the last posts here, I&#039;m in fact leaning towards &amp;quot;Wikipedia Something&amp;quot;, since it&#039;s an out reach activity and that is the brand everybody knows. This naming is not to please you or me or anybody already in the Wikimedia / MediaWiki communities. This is about a name appealing for all the developers out there. In this context &amp;quot;Wikimedia&amp;quot; is even a worse choice than &amp;quot;MediaWiki&amp;quot; because there is even less developers that have heard this before.&lt;br /&gt;
::From a consistency point of view we could go for &amp;quot;Wikipedia DevCamp&amp;quot; or &amp;quot;Wikipedia Hackathon&amp;quot; and use a logo derived from [[media:DevCamp Bangalore header.png]]. [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 19:43, 23 February 2013 (UTC)&lt;br /&gt;
:::Can&#039;t believe I had not already done it, you can now find the original pdf of the DevCamp and associated events [http://commons.wikimedia.org/w/index.php?title=File%3AWikimedia_india_events_designs_2012.pdf&amp;amp;page=5 here]. Let me know if you need it in svg. [[User:Planemad|Planemad]] ([[User talk:Planemad|talk]]) 21:17, 23 February 2013 (UTC)&lt;br /&gt;
::::Is it possible to edit graphics in a PDF file? Are they in vector format still? I dont know enough. SVG is pretty standard for this kind of job. If you originally did it in something else please share anyway. The idea is to have the sources so someone else can do the adaptation for the Amsterdam event. Unless you volunteer...  ;) [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 14:21, 26 February 2013 (UTC)&lt;br /&gt;
:::::I made a svg from that pdf file: [[:File:Bangalore DevCamp registration banner.svg]]. I hand-edited the code to remove cruft from the conversion and group elements together appropriately, so it should be easy to adapt this for other events. [[User:Waldir|Waldir]] ([[User talk:Waldir|talk]]) 05:44, 9 March 2013 (UTC)&lt;br /&gt;
:Can we reach to a conclusion? Please have a say. Or am I worrying too much / too soon about our lack of agreed name and logo? If so let me know as well, I don&#039;t want to be annoying.&lt;br /&gt;
:Summary of the proposal so far:&lt;br /&gt;
:&#039;&#039;&#039;&amp;lt;big&amp;gt;Wikipedia Hackathon&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
:Logo derived from [[:File:DevCamp_Bangalore_header.png]]&lt;br /&gt;
:Reasoning:&lt;br /&gt;
:* Wikipedia is the brand everybody knows. It is inaccurate but &amp;quot;MediaWiki&amp;quot; and &amp;quot;Wikimedia&amp;quot; are in comparison really weak for outreach, and they are not perfect denominations either. Using this name here helps us also identifying Wikipedia as a software project, contributing to solve an identified problem.&lt;br /&gt;
:* Hackathon is the term used in Europe for the past years. There would be a value in consolidating a global name: &amp;quot;Wikipedia DevCamp&amp;quot;. But being the event so close and having talkedso much about the &amp;quot;Amsterdam Hackathon&amp;quot; a change like this would be confusing. [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 14:43, 26 February 2013 (UTC)&lt;br /&gt;
::Fine with me. :) [[User:Nicole Ebber (WMDE)|Nicole Ebber (WMDE)]] ([[User talk:Nicole Ebber (WMDE)|talk]]) 21:40, 26 February 2013 (UTC)&lt;br /&gt;
:My 2 cents:&lt;br /&gt;
:* Visual identity: &#039;&#039;&#039;+1 for the Puzzle theme&#039;&#039;&#039; and &#039;&#039;Tech&#039;&#039; and everything but not the sunflower. The sunflower doesn&#039;t seem at all related to technology, especially when pulling it out of the &amp;quot;&amp;lt;nowiki&amp;gt;[[ bracket ]]&amp;lt;/nowiki&amp;gt;&amp;quot; context. I&#039;d say either use the MediaWiki logo as part of it, or not at all (but not just the sunflower). Actually, though it may have been a good logo for MediaWiki (though maybe not even that), remember that in MediaWiki the logo is for users, not developers.&lt;br /&gt;
:* Naming: Using the Wikipedia brand does sound better, though Wikimedia is getting more known in the public and probably good enough for this purpose. I wouldn&#039;t recommend calling it &amp;quot;MediaWiki Hackathon&amp;quot; since that&#039;s both too narrow and too unknown a term. &#039;&#039;&#039;+1 for Wikimedia&#039;&#039;&#039; as part of the name (be it &#039;&#039;Wikimedia Hackathon&#039;&#039;, &#039;&#039;Wikimedia developer meeting&#039;&#039; or something else entirely).&lt;br /&gt;
:&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[File:Hackathon Logo Shiny.svg|206x206px]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:&amp;lt;div style=&amp;quot;float: left; background: #444; width: 300px; text-align: center; margin: 20px; padding: 20px 30px 20px 20px;&amp;quot;&amp;gt;&amp;lt;span&amp;gt;[[File:Hackathon Berlin Logo Full.svg|300x300px]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
:{{clear}}&lt;br /&gt;
:Also, if we call it &amp;quot;Wikimedia (something)&amp;quot; we might want to consider not creating a separate logo but putting it in the Wikimedia family (like chapters and various other initiatives).&lt;br /&gt;
:&amp;lt;div style=&amp;quot;text-align: center; width: 270px;&amp;quot;&amp;gt;&lt;br /&gt;
:&amp;lt;span&amp;gt;[[File:Wikimedia logo text RGB.svg|270x270px]]&amp;lt;/span&amp;gt;&lt;br /&gt;
:&amp;lt;span style=&amp;quot;font-size: 25px; color: #666666; line-height: 35px; text-transform: uppercase; font-family: GillSans; font-weight: bold;&amp;quot;&amp;gt;Hackathon&amp;lt;/span&amp;gt;&lt;br /&gt;
:&amp;lt;/div&amp;gt; [[User:Krinkle|Krinkle]] ([[User talk:Krinkle|talk]]) 00:31, 27 February 2013 (UTC)&lt;br /&gt;
::See my last proposal. There is no sunflower at [[:File:DevCamp Bangalore header.png]] so we can end that discussion.&lt;br /&gt;
::I really think that &amp;quot;Wikimedia&amp;quot; name and logo are no match for &amp;quot;Wikipedia&amp;quot; brand as shown at [[:File:DevCamp Bangalore header.png]].&lt;br /&gt;
::&amp;quot;Wikimedia is getting more known in the public&amp;quot;? Well, maybe around our circles but I can check anytime with actual developers out there and do the test: all of them know Wikipedia, almost all of them need a 3 minute explanation to understand what is &amp;quot;Wikimedia&amp;quot;. [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 01:58, 27 February 2013 (UTC)&lt;br /&gt;
:::I&#039;m with Krinkle on this one. Wikipedia might be a strong brand, but that doesn&#039;t mean we have to use it. [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 18:01, 2 March 2013 (UTC)&lt;br /&gt;
::Just thought I would upload this. I worked on this last year and never did anything with it. I&#039;ve updated it for this year. It&#039;s obviously got a bit of focus on how these are done in different cities all over the world - not sure if that&#039;s a theme worth emphasizing.&lt;br /&gt;
::By the way - the MediaWiki logo being used is [[Media:Concept-MediaWiki-Logo-Flower.png|this one]] - it could be changed to the official logo of course.&lt;br /&gt;
::&amp;lt;span class=&amp;quot;mw-default-size&amp;quot;&amp;gt;[[Image:Concept-Hackathon-Logo-AMS.png|500x500px]]&amp;lt;/span&amp;gt;&lt;br /&gt;
::&amp;lt;span class=&amp;quot;mw-default-size&amp;quot;&amp;gt;[[Image:Concept-Hackathon-Logo-TXL.png|500x500px]]&amp;lt;/span&amp;gt; [[User:Trevor Parscal|Trevor Parscal]] ([[User talk:Trevor Parscal|talk]]) 00:23, 28 February 2013 (UTC)&lt;br /&gt;
:::I like em... good solid lines and colors suitable for tshirts. :) [[User:Brion VIBBER|brion]] ([[User talk:Brion VIBBER|talk]]) 23:20, 28 February 2013 (UTC)&lt;br /&gt;
:::+1 (though of course the use of wikitext in them will rapidly become anachronistic, given the VisualEditor… &amp;lt;tt&amp;gt;;-)&amp;lt;/tt&amp;gt;) [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 17:28, 1 March 2013 (UTC)&lt;br /&gt;
:After discussing with Sumana we agreed that this event is more of a Wikimedia-wide gathering than a real outreach event where we put a lot effort bringing newcomers.&lt;br /&gt;
:Hence this would work:&lt;br /&gt;
:&#039;&#039;&#039;Wikimedia Hackathon&#039;&#039;&#039;&lt;br /&gt;
:Please let&#039;s keep the city and year out of event name.&lt;br /&gt;
:Do you agree? [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 18:42, 2 March 2013 (UTC)&lt;br /&gt;
::&amp;lt;nowiki&amp;gt;[[Amsterdam Hackathon 2013]] = new(Wikimedia Hackathon)&amp;lt;/nowiki&amp;gt; ;-)&lt;br /&gt;
::Fine with me. [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 18:49, 2 March 2013 (UTC)&lt;br /&gt;
:::This is an SVG with outlined text. I&#039;ve also sent a set of SVGs and PDFs, along with original artwork and the needed font (so this can be edited in Inkscape on Linux) to Rachael (who is handling the printing).&lt;br /&gt;
:::&amp;lt;span class=&amp;quot;mw-default-size&amp;quot;&amp;gt;[[Image:Wikimedia_Hackathon_-_Amsterdam_2013.svg|500x500px]]&amp;lt;/span&amp;gt; [[User:Trevor Parscal|Trevor Parscal]] ([[User talk:Trevor Parscal|talk]]) 20:10, 8 March 2013 (UTC)&lt;br /&gt;
::::Thank you very much, Trevor! [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 04:37, 9 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Archived date discussion ==&lt;br /&gt;
&lt;br /&gt;
{{collapse top|Discussion to determine date}}&lt;br /&gt;
=== Straw Poll (closed) ===&lt;br /&gt;
We&#039;re aiming to do the hackathon in May 2013 with a preference for the weekend of Saturday the 25th. The options are :&lt;br /&gt;
* Weekend of the 4th of May. This weekend is [[:en:Remembrance of the Dead|Remembrance of the Dead]] and [[:en:Liberation Day (Netherlands)|Liberation Day]] in the Netherlands so we rather not do it this weekend.&lt;br /&gt;
* Weekend of the 11th of May. [[:en:Ascension day|Ascension day]] will be on Thursday the 9th of May so a lot of people will go on a long weekend. Probably means more expensive ho(s)tels. &lt;br /&gt;
* Weekend of the 18th of May.[[:en:Pentecost|Pentecost]] will be on Monday the 20th of May  so a lot of people will go on a long weekend. Probably means more expensive ho(s)tels. &lt;br /&gt;
* Weekend of the 25th of May. Our preferred weekend. &lt;br /&gt;
&lt;br /&gt;
Please tell us when on which weekends you &#039;&#039;can&#039;t&#039;&#039; and if the preferred weekend is fine with you. If you like, let us also know &#039;&#039;why&#039;&#039; - we are especially interested in the dates for exams etc around Europe.&lt;br /&gt;
&lt;br /&gt;
Use [http://www.doodle.com/3n5cg9ii7gvmcgum Doodle Time Finder] or leave a message below:&lt;br /&gt;
&lt;br /&gt;
==== Specific requests to avoid a date ====&lt;br /&gt;
* Very difficult to do the weekends of either the 11th of May or 18th of May due to overlapping with RIPE (WMF just became a LIR and is required to attend) - https://ripe66.ripe.net/ .   Weekend of the 18th is a little bit easier of the two. Cannot do the weekend of the 4th of May due to personal reasons.  25th of May weekend is fine. [[User:LeslieCarr|LeslieCarr]] ([[User talk:LeslieCarr|talk]]) 16:31, 1 December 2012 (UTC)&lt;br /&gt;
* The weekend of the 25th works, but I&#039;d prefer another weekend (any other weekend is fine) --[[User:Catrope|Catrope]] ([[User talk:Catrope|talk]]) 22:09, 1 December 2012 (UTC)&lt;br /&gt;
* The 25th may interfere with Memorial Day weekend plans in the US (often this weekend is used for weddings, family vacations, graduations, etc). I would prefer one of the other weekends as I am fairly confident I will be invited to at least one wedding on that weekend :p [[User:Awjrichards|Arthur Richards]] ([[User talk:Awjrichards|talk]]) 23:45, 3 December 2012 (UTC)&lt;br /&gt;
* The 4th is a bad weekend for me (my little brother&#039;s birthday, I may try to travel home), but any other weekend works, including Memorial Day. --[[Special:Contributions/216.38.130.166|216.38.130.166]] 01:27, 4 December 2012 (UTC)&lt;br /&gt;
* Just in case it matters, [http://linuxtag.de/2013/ LinuxTag] is in Berlin on May 22-25.--[[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 19:18, 2 December 2012 (UTC)&lt;br /&gt;
* Memorial Day/25th is bad for me.  My brother is getting married. [[User:LWelling|LWelling]] ([[User talk:LWelling|talk]]) 19:03, 4 December 2012 (UTC)&lt;br /&gt;
* Google I/O is May 15th - 17th and may make the weekend of the 18th more difficult for the mobile team. [[User:LeslieCarr|LeslieCarr]] ([[User talk:LeslieCarr|talk]]) 20:19, 4 December 2012 (UTC)&lt;br /&gt;
* All OK with me, but I have to teach the 17th in the afternoon. I&#039;ll be able to join in the evening and the rest of the weekend. [[User:Valhallasw|Valhallasw]] ([[User talk:Valhallasw|talk]]) 20:24, 4 December 2012 (UTC)&lt;br /&gt;
* Either date works fine, but mildly prefer to avoid weekend of 25th. -- [[User:RobLa-WMF|RobLa-WMF]] ([[User talk:RobLa-WMF|talk]]) 01:47, 5 December 2012 (UTC)&lt;br /&gt;
* Weekends of May 11, 18, 25 work. Prefer May 25 as LinuxTag is also held that week. -- [[User:Alolitas|Alolita Sharma]] 11 December 2012&lt;br /&gt;
* The last weekend of May is a no-go for me, for personal reasons. The other weekends are fine by me so far. --- [[User:Titopao|Titopao]] ([[User talk:Titopao|talk]]) 04:20, 12 December 2012 (UTC)&lt;br /&gt;
* Any weekend is equally good.  If I&#039;m not doing wikidata stuff, then doubt I can come regardless of which weekend.  If I&#039;m still in Berlin, then it doesn&#039;t matter and I can probably come, except I might like to go home for the Memorial Day (May 25) weekend. [[User:Aude|Aude]] ([[User talk:Aude|talk]]) 15:42, 7 January 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Specific requests to target a date ====&lt;br /&gt;
* Weekend of 25th is go for me. [[User:Siebrand|siebrand]] ([[User talk:Siebrand|talk]]) 20:48, 1 December 2012 (UTC)&lt;br /&gt;
* 25th or 18th works fine, I prefer the 18th [[User:Trevor Parscal|Trevor Parscal]] ([[User talk:Trevor Parscal|talk]]) 18:56, 3 December 2012 (UTC)&lt;br /&gt;
* Weekend of the 25th works for me. &amp;lt;font style=&amp;quot;font-family:Georgia, serif;&amp;quot;&amp;gt;[[User:Steven (WMF)|Steven Walling (WMF)]]&amp;amp;nbsp;&amp;amp;bull;&amp;amp;nbsp;[[User talk:Steven (WMF)|&amp;lt;span style=&amp;quot;color: #8080b0&amp;quot;&amp;gt;talk&amp;lt;/span&amp;gt;]]&amp;lt;/font&amp;gt;  18:30, 4 December 2012 (UTC)&lt;br /&gt;
* It would be great to have it back to back with MuseumNext, that way we can combine the hackathon with some WikiGLAM efforts: Amsterdam, 13 - 14 May 2013 --[[User:Martsniez|Martsniez]] ([[User talk:Martsniez|talk]]) 16:01, 6 December 2012 (UTC)&lt;br /&gt;
* 25th sounds good for me. --[[User:Lydia Pintscher (WMDE)|Lydia Pintscher (WMDE)]] ([[User talk:Lydia Pintscher (WMDE)|talk]]) 15:32, 7 December 2012 (UTC)&lt;br /&gt;
* Weekend&amp;lt;strike&amp;gt;s&amp;lt;/strike&amp;gt; of the 4th &amp;lt;strike&amp;gt;and the 25th are&amp;lt;/strike&amp;gt; is fine for me --[[User:Angelika Adam (WMDE)|Angelika Adam (WMDE)]] ([[User talk:Angelika Adam (WMDE)|talk]]) 16:08, 7 December 2012 (UTC)&lt;br /&gt;
* Weekend 25th sounds good too. Will try to make it. --[[User:Yurik|Yurik]] ([[User talk:Yurik|talk]]) 08:36, 19 December 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
==== Fine with any of these dates ====&lt;br /&gt;
* Any week-end is fine to me. [[User:Hashar|Antoine &amp;amp;#34;hashar&amp;amp;#34; Musso]] ([[User talk:Hashar|talk]]) 13:09, 1 December 2012 (UTC)&lt;br /&gt;
* Any week-end is fine to me. --[[User:Kolossos|Kolossos]] 17:22, 1 December 2012 (UTC)&lt;br /&gt;
* right now any weekend is fine, but I might be in the process of selling my house in May, I won&#039;t know until later.  [[User:Cmcmahon(WMF)|Cmcmahon(WMF)]] ([[User talk:Cmcmahon(WMF)|talk]]) 23:40, 3 December 2012 (UTC)&lt;br /&gt;
* Any of these are fine with me.--[[User:Jorm (WMF)|Jorm (WMF)]] ([[User talk:Jorm (WMF)|talk]]) 01:32, 4 December 2012 (UTC)&lt;br /&gt;
* Happy to attend any of the proposed dates [[User:Robmoen|Robmoen]] ([[User talk:Robmoen|talk]]) 18:37, 4 December 2012 (UTC)&lt;br /&gt;
* Any of the proposed dates would be great. [[User:Renklauf|Ryan Faulkner]] 18:49, 4 December 2012 (UTC)&lt;br /&gt;
* Any of those weekends is good for me. [[User:Anomie|Anomie]] ([[User talk:Anomie|talk]]) 19:13, 4 December 2012 (UTC)&lt;br /&gt;
* Any weekend in May is good for me. [[User:Zeljko.filipin(WMF)|Zeljko.filipin(WMF)]] ([[User talk:Zeljko.filipin(WMF)|talk]]) 19:48, 4 December 2012 (UTC)&lt;br /&gt;
* Currently any weekend is good for meeeee. [[User:Nikerabbit|Nikerabbit]] ([[User talk:Nikerabbit|talk]]) 20:06, 4 December 2012 (UTC)&lt;br /&gt;
* Any weekend works for me --[[User:Ori.livneh|ori]] ([[User talk:Ori.livneh|talk]]) 20:29, 4 December 2012 (UTC)&lt;br /&gt;
* Any of these work for me. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 20:47, 4 December 2012 (UTC)&lt;br /&gt;
* No preferences yet. [[User:Xqt|Xqt]] ([[User talk:Xqt|talk]]) 21:16, 4 December 2012 (UTC)&lt;br /&gt;
* Any date in May works for me [[User:CSteipp|CSteipp]] ([[User talk:CSteipp|talk]]) 01:20, 5 December 2012 (UTC)&lt;br /&gt;
* Anytime fine for me. --[[User:Brion VIBBER|brion]] ([[User talk:Brion VIBBER|talk]]) 20:26, 6 December 2012 (UTC)&lt;br /&gt;
* Any of these dates are fine with me. --[[User:Kai Nissen (WMDE)|Kai Nissen (WMDE)]] ([[User talk:Kai Nissen (WMDE)|talk]]) 15:58, 7 December 2012 (UTC)&lt;br /&gt;
* Any of these dates fine with me [[User:Johannes Kroll (WMDE)|Johannes Kroll (WMDE)]] ([[User talk:Johannes Kroll (WMDE)|talk]]) 19:06, 7 December 2012 (UTC)&lt;br /&gt;
* Ditto. Though, I don&#039;t usually know what I&#039;m doing next week, never mind in 5 months ;). [[User:Reedy|Reedy]] ([[User talk:Reedy|talk]]) 19:54, 7 December 2012 (UTC)&lt;br /&gt;
{{collapse bottom}} [[User:Austin|Austin]] ([[User talk:Austin|talk]]) 17:01, 24 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Topic suggestions ==&lt;br /&gt;
&lt;br /&gt;
RFC: Topics&lt;br /&gt;
* ... [[User:Austin|Austin]] ([[User talk:Austin|talk]]) 17:23, 24 February 2013 (UTC)&lt;br /&gt;
:Topic suggestions please at [[Amsterdam Hackathon 2013/Topics]]. Thank you, [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 21:44, 25 February 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== redesign ==&lt;br /&gt;
&lt;br /&gt;
Still working on it, continue tonight. [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 08:51, 26 February 2013 (UTC)&lt;br /&gt;
:It was left with various sections unreadable (black on grey). You may want to copy it to a sandbox next time (e.g. copy/paste to [[User:Henna/Amsterdam_Hackathon_2013]] and then copy back once done).&lt;br /&gt;
:I&#039;ve polished it up a bit so that it is at least as readable as the old version. [[User:Krinkle|Krinkle]] ([[User talk:Krinkle|talk]]) 01:25, 27 February 2013 (UTC)&lt;br /&gt;
::Not only that, please also check the diff before saving, as you might be undoing legitimate edits (such as [http://www.mediawiki.org/w/index.php?title=Amsterdam_Hackathon_2013&amp;amp;diff=next&amp;amp;oldid=658642 here], where typos and spacing issues previously fixed were reintroduced) [[User:Waldir|Waldir]] ([[User talk:Waldir|talk]]) 13:36, 18 March 2013 (UTC)&lt;br /&gt;
:Visited links on dark gray are still unreadable, but maybe this only happens in the &amp;quot;See also&amp;quot; section? [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 15:13, 27 February 2013 (UTC)&lt;br /&gt;
::Trying to add &amp;lt;span&amp;gt;[[image:Amsterdam_Zeeburg_dorm.jpeg|150x150px]]&amp;lt;/span&amp;gt;  under the accomodation section but failing so far to get more then one line of text next to it :( [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 15:56, 14 March 2013 (UTC)&lt;br /&gt;
:::Like this? [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 18:10, 14 March 2013 (UTC)&lt;br /&gt;
::::yes :) I just figured it out myself (about 5 minutes aftery ou fixed it) d&#039;oh thx [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 18:17, 14 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Improving the web page ==&lt;br /&gt;
&lt;br /&gt;
I just reverted the last changes in order to bring back the font color sanity. Having +5 font colors in an informative text is just not normal.&lt;br /&gt;
&lt;br /&gt;
I&#039;m not sure about the 2 column layout at the top of the page, at least in the way it is presented now. Looks ugly both in regular desktop screens (right column bigger height forces plenty of empty space in the left column) and in mobile (both content columns + the MediaWiki left navigation bar get squeezed making the page barely readable). Why not converting the content in the right column in a first horizontal block with extra design, and then have all the rest of information in mostly plain text + pictures? Or at least make the right column a proper floating box letting content around it flow and behave well in mobile  (like infoboxes do).&lt;br /&gt;
&lt;br /&gt;
Also, do we need to have all the past events listed at the top? Looks more of a &amp;quot;See also&amp;quot; type of content, and in fact there are past events already listed there. [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 16:11, 3 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Apart from travel + accomodation, is there a conference fee? ==&lt;br /&gt;
&lt;br /&gt;
I live in the Netherlands near Amsterdam, so I would not need travel or accomodation. I read the page to find either&lt;br /&gt;
* text specifying what the conference fee is, or&lt;br /&gt;
* text confirming that there is no conference fee.&lt;br /&gt;
I could find neither. Perhaps the page could clarify what the conference fee is, c.q. that there is no conference fee? Or, possibly, that there is a conference fee that will be announced at a later date? [[User:Sietse|Sietse]] ([[User talk:Sietse|talk]]) 11:16, 13 March 2013 (UTC)&lt;br /&gt;
:No fees. Free as in beer! [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 13:30, 13 March 2013 (UTC)&lt;br /&gt;
::Free as in beer indeed, I&#039;ve updated the information on the page. [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 15:18, 13 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thursday arrival ==&lt;br /&gt;
&lt;br /&gt;
The page says &amp;quot;€ 98,40 Euro fr-mo&amp;quot;, but I&#039;m sure I&#039;m not the only person who will be arriving on Thursday. [[User:Pigsonthewing|Pigsonthewing]] ([[User talk:Pigsonthewing|talk]]) 18:39, 21 March 2013 (UTC)&lt;br /&gt;
:sorry I didn&#039;t see this. I&#039;ve added the price thu-sun [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 11:53, 28 March 2013 (UTC)&lt;br /&gt;
::Thank you. &amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;[[User:Pigsonthewing|Andy Mabbett]]&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;nickname&amp;quot;&amp;gt;Pigsonthewing&amp;lt;/span&amp;gt;); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy&#039;s edits]]&amp;lt;/span&amp;gt; 15:47, 28 March 2013 (UTC)&lt;br /&gt;
::I&#039;m concerned by [http://www.mediawiki.org/w/index.php?title=Amsterdam_Hackathon_2013&amp;amp;diff=666429&amp;amp;oldid=666414 this edit] . I shall arrive on Thursday and depart on Monday; I need a bed for &#039;&#039;four&#039;&#039; nights (Thur, Fri, Sat, Sun). &amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;[[User:Pigsonthewing|Andy Mabbett]]&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;nickname&amp;quot;&amp;gt;Pigsonthewing&amp;lt;/span&amp;gt;); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy&#039;s edits]]&amp;lt;/span&amp;gt; 14:23, 31 March 2013 (UTC)&lt;br /&gt;
:::Andy, I&#039;m passing it on to the person who&#039;s taking care of the accomodation to doublecheck/what we can do to help [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 10:51, 1 April 2013 (UTC)&lt;br /&gt;
::::Hi Andy, the average costs per night is 31,50 + 1,30 Tax. Break up per night (not sure if this is final):&lt;br /&gt;
::::* thu 23 may 2013	1 night incl breakfast p.p.	€ 26,50&lt;br /&gt;
::::* fri 24-may-2013	1 night incl breakfast p.p.	€ 34,00&lt;br /&gt;
::::* sat 25-may-2013	1 night incl breakfast p.p.	€ 34,00&lt;br /&gt;
::::* sun 26-may-2013	1 night incl breakfast p.p.	€ 26,50 [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 14:32, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tram &amp;amp; train ==&lt;br /&gt;
&lt;br /&gt;
What tram do we get from Centraal to the hostel? How much is it? Can we pay cash on board, or do we have to buy tickets at the station?&lt;br /&gt;
&lt;br /&gt;
Is it still €2.50 for a single ticket from Schiphol Airport to Centraal? Is there left-luggage at Centraal?&lt;br /&gt;
&lt;br /&gt;
Perhaps we can arrange a meetup at Centraal at, say, 3.30 or 4pm on Thursday? &amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;[[User:Pigsonthewing|Andy Mabbett]]&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;nickname&amp;quot;&amp;gt;Pigsonthewing&amp;lt;/span&amp;gt;); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy&#039;s edits]]&amp;lt;/span&amp;gt; 15:51, 28 March 2013 (UTC)&lt;br /&gt;
:* [http://www.ns.nl/reizigers/reisinformatie/stationsvoorzieningen/stations/a/amsterdam-centraal/algemeen/bagagekluizen.html Luggage storage @ Amsterdam Central Station] costs 3.70 or 5.45 Euro per 24 hours, depending on the size of the locker. You cannot open the locker without having to pay again.&lt;br /&gt;
:* A one way trip from Schiphol Airport to Amsterdam Central Station costs 3.90 Euro&lt;br /&gt;
:IMO it&#039;s too early to arrange a time for Thursday already, but I&#039;ll try to be there... [[User:Siebrand|siebrand]] ([[User talk:Siebrand|talk]]) 18:05, 28 March 2013 (UTC)&lt;br /&gt;
::It probably is to early for someone who doesn&#039;t have as far to travel, but others of us have to plan ahead. &amp;lt;span class=&amp;quot;mw-default-size&amp;quot;&amp;gt;[[File:Wink.png|22x22px]]&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☠&amp;lt;/span&amp;gt;[[User:MarkAHershberger|MarkAHershberger]]&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☢&amp;lt;/span&amp;gt;([[User_talk:MarkAHershberger|talk]])&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☣&amp;lt;/span&amp;gt; 18:37, 28 March 2013 (UTC)&lt;br /&gt;
:::We can probably find a volunteer if everybody&#039;s at Amsterdam Central together :)&lt;br /&gt;
:::Tickets for the tram are 2E80 and single fares can be bought on board. Alternative is to take the train to Muiderpoort. I&#039;ve added the information to the page as well. [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 17:13, 29 March 2013 (UTC)&lt;br /&gt;
::::Let&#039;s do karaoke at http://www.theendkaraoke.nl/ some night! It&#039;s very close to Amsterdam Centraal =)&lt;br /&gt;
::::Who else is here on Thursday? Anyone want to do the museums? [[User:Judytuna|Judytuna]] ([[User talk:Judytuna|talk]]) 20:35, 21 May 2013 (UTC)&lt;br /&gt;
:::::I should be there Thursday AM.  If you know your way around, I would love to have a guide. &amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☠&amp;lt;/span&amp;gt;[[User:MarkAHershberger|MarkAHershberger]]&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☢&amp;lt;/span&amp;gt;([[User_talk:MarkAHershberger|talk]])&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☣&amp;lt;/span&amp;gt; 22:03, 21 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Evenings ==&lt;br /&gt;
&lt;br /&gt;
Are there any planned or recommended social activities for the evenings (including Thursday)? &amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;[[User:Pigsonthewing|Andy Mabbett]]&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;nickname&amp;quot;&amp;gt;Pigsonthewing&amp;lt;/span&amp;gt;); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy&#039;s edits]]&amp;lt;/span&amp;gt; 16:30, 28 March 2013 (UTC)&lt;br /&gt;
:Those of us who are getting there on Thursday should arrange to get together and tour the city. &amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☠&amp;lt;/span&amp;gt;[[User:MarkAHershberger|MarkAHershberger]]&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☢&amp;lt;/span&amp;gt;([[User_talk:MarkAHershberger|talk]])&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☣&amp;lt;/span&amp;gt; 16:52, 28 March 2013 (UTC)&lt;br /&gt;
::we&#039;re organizing social activities on the evenings but I&#039;m not sure about Thursday atm [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 17:12, 29 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Lockers ==&lt;br /&gt;
&lt;br /&gt;
Since I didn&#039;t see it anywhere here (maybe I missed it? maybe I shouldn&#039;t care?) lockers are available for €2,00 per 24 hours or €0,20 per hour. &amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☠&amp;lt;/span&amp;gt;[[User:MarkAHershberger|MarkAHershberger]]&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☢&amp;lt;/span&amp;gt;([[User_talk:MarkAHershberger|talk]])&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☣&amp;lt;/span&amp;gt; 18:39, 28 March 2013 (UTC)&lt;br /&gt;
:[http://www.stayokay.com/en/hostel/amsterdam-zeeburg Their page] states they have luggage storage available, but it doesn&#039;t indicate at which price. [[User:Siebrand|siebrand]] ([[User talk:Siebrand|talk]]) 11:15, 1 April 2013 (UTC)&lt;br /&gt;
::The prices I listed were what they told me when I emailed them. &amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☠&amp;lt;/span&amp;gt;[[User:MarkAHershberger|MarkAHershberger]]&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☢&amp;lt;/span&amp;gt;([[User_talk:MarkAHershberger|talk]])&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☣&amp;lt;/span&amp;gt; 13:56, 1 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Suggestion to next year&#039;s organizers: publicize date poll via Facebook &amp;amp; wikitech-announce ==&lt;br /&gt;
&lt;br /&gt;
This year we circulated info on Twitter &amp;amp; Identi.ca, toolserver mailing list, onwiki on various wikis, wikimedia-l, wikitech-l, and via other means to publicize the date poll.  Next time, please use socialmedia{{@}}wikimedia.org and the wikitech-announce list to spread the word more widely. [[User:Sharihareswara (WMF)|Sharihareswara (WMF)]] ([[User talk:Sharihareswara (WMF)|talk]]) 20:30, 18 April 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Does closed mean I have to cancel my train? ==&lt;br /&gt;
&lt;br /&gt;
Was there a hard time limit for the registration? I paid for the train yesterday and tried to add my name here on the page. But now the registration is closed. Is there anything I can do? [[User:TMg|TMg]] 23:45, 28 April 2013 (UTC)&lt;br /&gt;
:Hi Tmg, we&#039;re looking into creating some extra places. We&#039;ll have a meeting tomorrow. We&#039;ll get back after the meeting. [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 21:30, 30 April 2013 (UTC)&lt;br /&gt;
::We had the meeting, and people that are on the waiting list without any requirements for funding, can come if they registered until futher notice.&lt;br /&gt;
::So you do not have to cancel your train. [[User:Siebrand|siebrand]] ([[User talk:Siebrand|talk]]) 19:19, 1 May 2013 (UTC)&lt;br /&gt;
:::Thank you. No, I don&#039;t need any funding. [[User:TMg|TMg]] 11:49, 2 May 2013 (UTC)&lt;br /&gt;
::::I don&#039;t need any accomodation since I live nearby. Is it still possible to attend the event? [[User:Edinwiki|Edinwiki]] ([[User talk:Edinwiki|talk]]) 19:03, 3 May 2013 (UTC)&lt;br /&gt;
:::::Please sign up for the waiting list and we&#039;ll get back to you. [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 21:00, 4 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Waiting list ==&lt;br /&gt;
&lt;br /&gt;
Hello :) I was just wondering how long the waiting list is?&lt;br /&gt;
I JUST signed up and I wanted to know my rough chances?&lt;br /&gt;
Is it like a 5 people in front of me kinda thing, or more like a 500 people in front of me?&lt;br /&gt;
&lt;br /&gt;
Thank you! [[User:NutzTheRookie|NutzTheRookie]] ([[User talk:NutzTheRookie|talk]]) 12:52, 16 May 2013 (UTC)&lt;br /&gt;
:I can guarantee you it isn&#039;t 500 people.  If you don&#039;t need a place to stay or can arrange your own, you may be able to just show up.  But I&#039;m not an organizer for the event, so you should verify with them. &amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☠&amp;lt;/span&amp;gt;[[User:MarkAHershberger|MarkAHershberger]]&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☢&amp;lt;/span&amp;gt;([[User_talk:MarkAHershberger|talk]])&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☣&amp;lt;/span&amp;gt; 18:15, 20 May 2013 (UTC)&lt;br /&gt;
::Hello! Ages ago, I put my name on the list to indicate my intent to attend (#36!), and then didn&#039;t fill out the questionnaire until recently. I&#039;m wondering if I can come too--I&#039;d really love to!&lt;br /&gt;
::I don&#039;t require financial assistance. I&#039;m also already in Amsterdam!!! Just got here from SF. Would it be possible to squash myself into one of the six-person rooms if there are any beds available starting on Thursday and going through Sundayish? ...Should I call the StayOkay Zeeburg and ask and reserve it? &lt;br /&gt;
::Thanks!! [[User:Judytuna|Judytuna]] ([[User talk:Judytuna|talk]]) 13:10, 21 May 2013 (UTC)&lt;br /&gt;
:::You should definitely call StayOkay if you want to stay there.  But if you&#039;re already in Amsterdam, why do you want to stay at the hostel? &amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☠&amp;lt;/span&amp;gt;[[User:MarkAHershberger|MarkAHershberger]]&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☢&amp;lt;/span&amp;gt;([[User_talk:MarkAHershberger|talk]])&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☣&amp;lt;/span&amp;gt; 14:58, 21 May 2013 (UTC)&lt;br /&gt;
::::I just arrived from the US and need a place to stay on those days. =) I was able to attach this to another trip! Thanks. [[User:Judytuna|Judytuna]] ([[User talk:Judytuna|talk]]) 15:07, 21 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Towels ==&lt;br /&gt;
&lt;br /&gt;
Some hostels do not provide towels. Does this one? Do we have to pay separately for them? &amp;lt;span class=&amp;quot;vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fn&amp;quot;&amp;gt;[[User:Pigsonthewing|Andy Mabbett]]&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;nickname&amp;quot;&amp;gt;Pigsonthewing&amp;lt;/span&amp;gt;); [[User talk:Pigsonthewing|Talk to Andy]]; [[Special:Contributions/Pigsonthewing|Andy&#039;s edits]]&amp;lt;/span&amp;gt; 15:12, 20 May 2013 (UTC)&lt;br /&gt;
:Make that most hostels (in my experience). It&#039;s the same here. You have to bring your own towels or rent them. [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 16:20, 20 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 minute presentation proposal: Meteorjs + MediaWiki ==&lt;br /&gt;
&lt;br /&gt;
I&#039;d like to give a very brief introduction to Meteorjs and on how to build stuff related to MediaWiki with it such as [http://wikiytchanges.meteor.com/ wikifarmchanges], [http://manywiki.meteor.com/ manywiki] and even [https://github.com/guaka/mediawikixml2meteor2phonegap how to build android apps] such as [https://play.google.com/store/apps/details?id=io.cordova.hitchwiki.meteor.com this one for hitchwiki]. [[User:Guaka|Guaka]] ([[User talk:Guaka|talk]]) 20:34, 21 May 2013 (UTC)&lt;br /&gt;
:Hi Guaka!  I&#039;m sorry I missed this post during the hackathon but I&#039;m also a meteorjs fan.  I work for WMF on the analytics team and you can find me in IRC, #wikimedia-analytics as milimetric.  Look forward to speaking with you. [[User:DAndreescu|DAndreescu]] ([[User talk:DAndreescu|talk]]) 18:23, 29 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Removing MediaWiki from &amp;quot;getting started&amp;quot; session ==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;get your development environment set up&amp;quot; session used to include MediaWiki setup with Vagrant.  Our conference wifi couldn&#039;t handle 25 simultaneous attempts to download a 300-megabyte file, and most of the workarounds we tried were insufficient, so we&#039;ve decided to instead be more thorough about getting Git set up. If you want to set up Vagrant and MediaWiki, and are having issues, and [[Mediawiki-Vagrant|the instructions on mediawiki.org]] are not helping, you should contact [[User:MarkTraceur]], who is at the event.  [[User:Ori.livneh|Ori Livneh]], who is also at the hackathon, can also help you. [[User:Sharihareswara (WMF)|Sharihareswara (WMF)]] ([[User talk:Sharihareswara (WMF)|talk]]) 22:30, 24 May 2013 (UTC)&lt;br /&gt;
:Can we do a mirror on the local network or something? (For next time...) [[User:Brion VIBBER|brion]] ([[User talk:Brion VIBBER|talk]]) 13:29, 25 May 2013 (UTC)&lt;br /&gt;
::I agree - a local mirror, or something like it, would be better for next time. [[User:Sharihareswara (WMF)|Sharihareswara (WMF)]] ([[User talk:Sharihareswara (WMF)|talk]]) 10:13, 26 May 2013 (UTC)&lt;br /&gt;
:::Hand out CDs! :D [[User:Nemo_bis|Nemo]] 19:12, 26 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Scribunto links ==&lt;br /&gt;
&lt;br /&gt;
The links mentioned at the end of Scribunto&#039;s Sunday session are posted at [[Talk:Amsterdam Hackathon 2013/Workshops#Scribunto links]] [[User:Anomie|Anomie]] ([[User talk:Anomie|talk]]) 08:57, 26 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Please take post-hackathon survey ==&lt;br /&gt;
&lt;br /&gt;
If you attended the hackathon, please [https://wikimedia.qualtrics.com/SE/?SID=SV_8qcoZsFlZteNsBT take the quick survey!]  That way we know what was good and what to fix for next year.  It takes 3 minutes to fill in. [[User:Sharihareswara (WMF)|Sharihareswara (WMF)]] ([[User talk:Sharihareswara (WMF)|talk]]) 10:11, 26 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Watch closing presentation on YouTube ==&lt;br /&gt;
&lt;br /&gt;
https://www.youtube.com/watch?v=3YtZNzNdxqo [[User:Sharihareswara (WMF)|Sharihareswara (WMF)]] ([[User talk:Sharihareswara (WMF)|talk]]) 14:27, 26 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Wiki loves monuments 2013 in Thailand ==&lt;br /&gt;
&lt;br /&gt;
[//commons.wikimedia.org/wiki/Commons:Wiki_Loves_Monuments_2013_in_Thailand commons:Commons:Wiki_Loves_Monuments_2013_in_Thailand] [[User:Taweetham|Taweetham]] ([[User talk:Taweetham|talk]]) 14:50, 26 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== What I did in the hackathon ==&lt;br /&gt;
&lt;br /&gt;
I think someone (Sumana?) asked us to post here with the stuff we did so people could follow-up, etc., so I&#039;m kicking it off with this thread.&lt;br /&gt;
&lt;br /&gt;
As I mentioned in the 30 second intro, I am interested in investigating ways to get the skin system in the path towards becoming a saner and more easily understandable component of mediawiki. I teamed with [[User:Luis Felipe Schenone|Felipe Schenone]] and [[User:Drev23|Michael Rubio]] and we collected what we hope to be the full set of documentation resources related to skins into a [https://docs.google.com/document/d/18fvyoCjPiHuJTJmmlcwZ9rBykkhZSbn_--W0z5gVbTQ shared google doc]. I proceeded to read up the pages and write summaries so the relevant ones can be then used to write a hopefully complete, coherent and readable description of the skinning system to be placed here on mw.org; this is still a work in progress, but the document is freely editable, so any comments, corrections or additions are welcome.&lt;br /&gt;
&lt;br /&gt;
Felipe preferred a more hands-on approach, and worked on the changes that were eventually [https://gerrit.wikimedia.org/r/#/c/65319/ submitted to Gerrit], proposing a way to make the core skins more modular. That sparked an interesting discussion, and at the moment it seems what is needed is some general agreement within the dev community on what the goal for skins should be (e.g. making them into extensions?) so that steps to get to that could be taken towards that, with discussion focusing more on implementation details than on the merits of the changes&#039; rationales. I will probably start a thread on the mediawiki-l to discuss this after I finish reading the documentation we collected.&lt;br /&gt;
&lt;br /&gt;
Apart from that, I mostly did small changes, which I submitted to gerrit:&lt;br /&gt;
* [https://gerrit.wikimedia.org/r/#/c/65426/ Rename $usableSkins to $allowedSkins] (already merged)&lt;br /&gt;
* [https://gerrit.wikimedia.org/r/#/c/65440/ skin: Remove the id &amp;quot;anonlogin&amp;quot; and merge pt-anonlogin with pt-login]&lt;br /&gt;
* [https://gerrit.wikimedia.org/r/#/c/65446/ Rename Skin::getUsableSkins() to Skin::getAllowedSkins()]&lt;br /&gt;
* [https://gerrit.wikimedia.org/r/#/c/65554/ Rename variable _AdminPassword2 to _AdminPasswordConfirm for clarity]&lt;br /&gt;
* [https://gerrit.wikimedia.org/r/#/c/65613/ Several tweaks to the install.php script]&lt;br /&gt;
&lt;br /&gt;
Finally, I did some [http://www.mediawiki.org/w/index.php?title=Special:Contributions/Waldir&amp;amp;offset=20130528000000&amp;amp;limit=70 edits to mediawiki.org] as I browsed around reading about the stuff I worked on. [[User:Waldir|Waldir]] ([[User talk:Waldir|talk]]) 00:01, 27 May 2013 (UTC)&lt;br /&gt;
:Great hackathon.  I am very happy I was able to attend. I learned a lot and appreciate all of the interesting conversations.  Great group of people.  Special thanks to Mark for mentioning Gadgets.&lt;br /&gt;
:During the hackathon, I was able to repackage the extension called the [[Extension:SignWriting_MediaWiki_Plugin|SignWriting MediaWiki Plugin]] as a user script.  I put a copy of the user script on the [http://en.wikipedia.org/wiki/User:Slevinski/signwriting_viewer.js English Wikipedia] and [http://incubator.wikimedia.org/wiki/User:Slevinski/signwriting_viewer.js on Incubator].&lt;br /&gt;
:After the hackathon, I found out that [http://incubator.wikimedia.org/wiki/User:MF-Warburg MF-Warburg] created a [http://incubator.wikimedia.org/wiki/MediaWiki:Gadget-Signwriting.js Gadget based on my script] and enabled it by default on incubator.  Now everyone can see the [http://incubator.wikimedia.org/wiki/Wp/ase SignWriting script on Incubator].  This was my primary goal for the hackathon and I&#039;m thrilled to see it become a reality.  Now we can move the [http://ase.wikipedia.wmflabs.org/ ASL Wikipedia project] from Labs to [http://incubator.wikimedia.org/wiki/Wp/ase Incubator].&lt;br /&gt;
:My secondary goal was to enable SignWriting on the English Wikipedia.  I have proposed the user script as [http://en.wikipedia.org/wiki/Wikipedia:Gadget/proposals#SignWriting_Viewer_gadget a gadget for the English Wikipedia], but regardless of the outcome, the user script can be enabled by any user who is interested using the instructions on [http://en.wikipedia.org/wiki/User:Slevinski my English Wikipedia user account page].&lt;br /&gt;
:Thanks to everyone involved in the hackathon.  It was a wonderful event. [[User:Slevinski|Slevinski]] ([[User talk:Slevinski|talk]]) 14:05, 29 May 2013 (UTC)&lt;br /&gt;
:To continue on, everyone with an interest can follow my progress with my [[Extension:TranslateSvg|TranslateSvg]] extension at http://translatesvg.wmflabs.org -- and in particular, see [http://translatesvg.wmflabs.org/wiki/Special:Translate?group=Picturebook+4.svg&amp;amp;language=en] (select your own language in the top right). The hackathon was particularly focussed on making it play nice with &amp;quot;TUX&amp;quot;, the recent overhaul of the Translate extension&#039;s visuals. [[User:Jarry1250|Jarry1250]] ([[User talk:Jarry1250|talk]]) 14:06, 29 May 2013 (UTC)&lt;br /&gt;
:[[User:Cmcmahon(WMF)|Chris]] wrote in detail what the two of us did at the hackathon. You can read the report at the QA list archive: http://lists.wikimedia.org/pipermail/qa/2013-May/000002.html [[User:Zeljko.filipin(WMF)|Zeljko.filipin(WMF)]] ([[User talk:Zeljko.filipin(WMF)|talk]]) 17:57, 29 May 2013 (UTC)&lt;br /&gt;
:Hi!  Evan Rosen, David Schoonover, Andrew Otto, Jean-Frédéric Berthelot, and Dan Andreescu worked on re-platforming the user metrics API.  The work is being done in a temporary repository and will be migrated to the main repository when it&#039;s ready: https://gerrit.wikimedia.org/r/gitweb?p=analytics/user-metrics-2.git;a=tree&lt;br /&gt;
:The focus of our effort:&lt;br /&gt;
:* improve reliability of the job queue using Celery&lt;br /&gt;
:* improve security using SQL Alchemy&lt;br /&gt;
:* improve accuracy and maintainability by unit testing as much as possible (using Nose)&lt;br /&gt;
:* improve readability by asking for code review as much as possible&lt;br /&gt;
:Right now, we&#039;re cleaning up some initial building blocks (the queue, database, and testing).  We&#039;ll focus on the last two bullet points as soon as that&#039;s ready. [[User:DAndreescu|DAndreescu]] ([[User talk:DAndreescu|talk]]) 18:32, 29 May 2013 (UTC)&lt;br /&gt;
:In addition to helping with UserMetrics2 as [[User:DAndreescu|DAndreescu]] said above, I hammered out a MediaWiki extension enabling Limn graphs to be embedded via wikitext:&lt;br /&gt;
:https://github.com/dsc/limn-mediawiki-ext&lt;br /&gt;
:The embedding API is provided via a tag and a parser function which have identical functionality:&lt;br /&gt;
:* Tag: &amp;lt;code&amp;gt;{{#graph:&amp;lt;GRAPH_ID&amp;gt;|&amp;lt;OPTION_KEY&amp;gt;=&amp;lt;OPTION_VAL&amp;gt;|...}}&amp;lt;/code&amp;gt;&lt;br /&gt;
:* Function: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;graph graph-id=&amp;quot;&amp;lt;GRAPH_ID&amp;gt;&amp;quot; &amp;lt;OPTION_KEY&amp;gt;=&amp;quot;&amp;lt;OPTION_VAL&amp;gt;&amp;quot; ... /&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
:The graph definition and data will be pulled from an existing Limn server, configured via mw-config:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&#039;text&#039;&amp;gt;require_once( &amp;quot;$IP/extensions/Limn/Limn.php&amp;quot; );&lt;br /&gt;
$wgLimnServerBase = &#039;http://dev-reportcard.wmflabs.org/&#039;;&lt;br /&gt;
$wgLimnServerRemoteMode = &#039;proxy&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:This is mostly a proof of concept, but I&#039;m pretty excited about the future -- another step toward democratizing data exploration and visualization! [[User:Dsc|Dsc]] ([[User talk:Dsc|talk]]) 19:49, 29 May 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Photostitch of all projects ==&lt;br /&gt;
&lt;br /&gt;
Some people asked me explicitly for this picture. [[File:Proposed projects for the Wikimedia Hackathon 2013.jpg|Stitch of all proposed projects]] [[User:Ter-burg|Ter-burg]] ([[User talk:Ter-burg|talk]]) 10:53, 27 May 2013 (UTC)&lt;br /&gt;
:This is indeed a nice picture! (and useful, the resolution is so good that it is possible to read the notes). I&#039;ll try to find an excuse to use it somewhere. Thank you! [[User:Qgil|Qgil]] ([[User talk:Qgil|talk]]) 20:08, 28 May 2013 (UTC)&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Thread:Talk:Amsterdam_Hackathon_2013/What_I_did_in_the_hackathon/reply_(5)&amp;diff=697315</id>
		<title>Thread:Talk:Amsterdam Hackathon 2013/What I did in the hackathon/reply (5)</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Thread:Talk:Amsterdam_Hackathon_2013/What_I_did_in_the_hackathon/reply_(5)&amp;diff=697315"/>
		<updated>2013-05-29T19:49:08Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Reply to What I did in the hackathon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In addition to helping with UserMetrics2 as [[User:DAndreescu|DAndreescu]] said above, I hammered out a MediaWiki extension enabling Limn graphs to be embedded via wikitext:&lt;br /&gt;
&lt;br /&gt;
https://github.com/dsc/limn-mediawiki-ext&lt;br /&gt;
&lt;br /&gt;
The embedding API is provided via a tag and a parser function which have identical functionality:&lt;br /&gt;
&lt;br /&gt;
* Tag: &amp;lt;code&amp;gt;{{#graph:&amp;lt;GRAPH_ID&amp;gt;|&amp;lt;OPTION_KEY&amp;gt;=&amp;lt;OPTION_VAL&amp;gt;|...}}&amp;lt;/code&amp;gt;&lt;br /&gt;
* Function: &amp;lt;code&amp;gt;&amp;lt;graph graph-id=&amp;quot;&amp;lt;GRAPH_ID&amp;gt;&amp;quot; &amp;lt;OPTION_KEY&amp;gt;=&amp;quot;&amp;lt;OPTION_VAL&amp;gt;&amp;quot; ... /&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The graph definition and data will be pulled from an existing Limn server, configured via mw-config:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require_once( &amp;quot;$IP/extensions/Limn/Limn.php&amp;quot; );&lt;br /&gt;
$wgLimnServerBase = &#039;http://dev-reportcard.wmflabs.org/&#039;;&lt;br /&gt;
$wgLimnServerRemoteMode = &#039;proxy&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is mostly a proof of concept, but I&#039;m pretty excited about the future -- another step toward democratizing data exploration and visualization!&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Wikimedia_Hackathon_2013/Attendees&amp;diff=692396</id>
		<title>Wikimedia Hackathon 2013/Attendees</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Wikimedia_Hackathon_2013/Attendees&amp;diff=692396"/>
		<updated>2013-05-20T20:03:46Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Please indicate here your attendance (your plan to come). Don&#039;t forget to fill out the [https://docs.google.com/a/wikimedia.nl/spreadsheet/viewform?formkey=dFg2SmRRbkpxNmxCcFNFdlduVlJuTUE6MQ#gid=0 registration form]!&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
# [[User:Brion VIBBER|brion]] ([[User talk:Brion VIBBER|talk]]) 19:08, 11 February 2013 (UTC)&lt;br /&gt;
# [[User:Ed Lane|Ed Lane]] ([[User talk:Ed Lane|talk]]) 21:19, 10 February 2013 (UTC)&lt;br /&gt;
# [[User:Petrb|Petrb]] ([[User talk:Petrb|talk]]) 09:32, 21 February 2013 (UTC)&lt;br /&gt;
# &amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☠&amp;lt;/span&amp;gt;[[User:MarkAHershberger|MarkAHershberger]]&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☢&amp;lt;/span&amp;gt;([[User_talk:MarkAHershberger|talk]])&amp;lt;span style=&amp;quot;color:#d30000&amp;quot;&amp;gt;☣&amp;lt;/span&amp;gt; 21:42, 10 February 2013 (UTC)&lt;br /&gt;
# [[User:Multichill|Multichill]] ([[User talk:Multichill|talk]]) 20:51, 10 February 2013 (UTC)&lt;br /&gt;
# [[User:TheDJ|TheDJ]] ([[User talk:TheDJ|talk]]) 23:29, 10 February 2013 (UTC)&lt;br /&gt;
# &amp;amp;mdash;&#039;&#039;[[User:Ruud Koot|Ruud]]&#039;&#039; 10:40, 22 February 2013 (UTC)&lt;br /&gt;
# [[User:Siebrand|siebrand]] ([[User talk:Siebrand|talk]]) 23:32, 25 February 2013 (UTC)&lt;br /&gt;
# [[User:Dereckson|Dereckson]] ([[User talk:Dereckson|talk]]) 14:42, 26 February 2013 (UTC)&lt;br /&gt;
# [[User:Drev23|Drev23]] ([[User talk:Drev23|talk]]) 15:42, 26 February 2013 (UTC)&lt;br /&gt;
# [[User:Eloquence|Eloquence]] ([[User talk:Eloquence|talk]]) 21:59, 26 February 2013 (UTC)&lt;br /&gt;
# [[User:Henna|Henna]] ([[User talk:Henna|talk]]) 07:11, 27 February 2013 (UTC)&lt;br /&gt;
# [[User:Chitetskoy|Chitetskoy]] ([[User talk:Chitetskoy|talk]]) 13:36, 27 February 2013 (UTC)&lt;br /&gt;
# [[User:Silke WMDE|Silke WMDE]] ([[User talk:Silke WMDE|talk]]) 16:13, 1 March 2013 (UTC)&lt;br /&gt;
# [[User:Mutante|Mutante]] ([[User talk:Mutante|talk]]) [[User:Mutante|Mutante]] ([[User talk:Mutante|talk]]) 15:00, 2 March 2013 (UTC)&lt;br /&gt;
# [[User:Darkdadaah|Darkdadaah]] ([[User talk:Darkdadaah|talk]]) 13:44, 5 March 2013 (UTC)&lt;br /&gt;
# [[User:BJorsch (WMF)|BJorsch (WMF)]] ([[User talk:BJorsch (WMF)|talk]]) (aka [[User:Anomie|Anomie]] ([[User talk:Anomie|talk]])) 14:20, 5 March 2013 (UTC)&lt;br /&gt;
# [[User:Zeljko.filipin(WMF)|Zeljko.filipin(WMF)]] ([[User talk:Zeljko.filipin(WMF)|talk]]) 10:29, 6 March 2013 (UTC)&lt;br /&gt;
# [[User:Sharihareswara (WMF)|Sharihareswara (WMF)]] ([[User talk:Sharihareswara (WMF)|talk]]) 19:32, 6 March 2013 (UTC)&lt;br /&gt;
# [[User:LeslieCarr|LeslieCarr]] ([[User talk:LeslieCarr|talk]]) 22:22, 6 March 2013 (UTC)&lt;br /&gt;
# [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 21:33, 7 March 2013 (UTC)&lt;br /&gt;
# [[User:JackPotte|JackPotte]] ([[User talk:JackPotte|talk]]) 21:39, 7 March 2013 (UTC)&lt;br /&gt;
# [[User:RobLa-WMF|RobLa-WMF]] ([[User talk:RobLa-WMF|talk]]) 19:45, 8 March 2013 (UTC)&lt;br /&gt;
# [[User:Catrope|Catrope]] ([[User talk:Catrope|talk]]) 20:33, 8 March 2013 (UTC)&lt;br /&gt;
# [[User:Ssastry|Ssastry]] ([[User talk:Ssastry|talk]]) 03:50, 9 March 2013 (UTC)&lt;br /&gt;
# [[User:Jane023|Jane023]] ([[User talk:Jane023|talk]]) 08:57, 9 March 2013 (UTC)&lt;br /&gt;
# [[User:ABaso(WMF)|ABaso(WMF)]] ([[User talk:ABaso(WMF)|talk]]) 18:56, 10 March 2013 (UTC)&lt;br /&gt;
# [[User:GWicke|Gabriel Wicke (GWicke)]] ([[User talk:GWicke|talk]]) 19:53, 11 March 2013 (UTC)&lt;br /&gt;
# [[User:Hashar|Antoine &amp;amp;#34;hashar&amp;amp;#34; Musso]] ([[User talk:Hashar|talk]])&lt;br /&gt;
# [[User:Cmcmahon(WMF)|Cmcmahon(WMF)]] ([[User talk:Cmcmahon(WMF)|talk]]) 20:06, 11 March 2013 (UTC)&lt;br /&gt;
# [[User:MarkTraceur|MarkTraceur]] ([[User talk:MarkTraceur|talk]]) 20:12, 11 March 2013 (UTC)&lt;br /&gt;
# [[User:dan-nl|dan-nl]] ([[User talk:dan-nl|talk]]) 20:14, 11 March 2013 (UTC)&lt;br /&gt;
# [[User:Purodha|Purodha Blissenbach]] ([[User talk:Purodha|talk]]) 20:19, 11 March 2013 (UTC)&lt;br /&gt;
# [[User:ESanders (WMF)|ESanders (WMF)]] ([[User talk:ESanders (WMF)|talk]]) 21:09, 11 March 2013 (UTC)&lt;br /&gt;
# [[User:Aude|Aude]] ([[User talk:Aude|talk]]) 19:46, 12 March 2013 (UTC)&lt;br /&gt;
# [[User:Judytuna|Judytuna]] ([[User talk:Judytuna|talk]]) 20:59, 12 March 2013 (UTC)&lt;br /&gt;
# [[User:Hoo man|Hoo man]] ([[User talk:Hoo man|talk]]) 22:40, 12 March 2013 (UTC)&lt;br /&gt;
# [[User:Lydia Pintscher (WMDE)|Lydia Pintscher (WMDE)]] ([[User talk:Lydia Pintscher (WMDE)|talk]]) 14:32, 13 March 2013 (UTC)&lt;br /&gt;
# [[User:Daniel Kinzler (WMDE)]]&lt;br /&gt;
# [[User:Jeroen De Dauw]]&lt;br /&gt;
# [[User:Kelson|Kelson]] ([[User talk:Kelson|talk]])&lt;br /&gt;
# [[User:AKlapper (WMF)]] 17:09, 14 March 2013 (UTC)&lt;br /&gt;
# [[User:cherishsantosh|Santosh Shingare]] ([[User talk:cherishsantosh|talk]]) 11:09, 17 March 2013 (UTC)&lt;br /&gt;
# &amp;amp;mdash;&amp;amp;nbsp;[[User:MPelletier (WMF)|MPelletier&amp;amp;nbsp;(WMF)]]&amp;lt;small&amp;gt;&amp;lt;sup&amp;gt;&amp;amp;nbsp;([[User talk:MPelletier (WMF)|talk]])&amp;lt;/sup&amp;gt;&amp;lt;/small&amp;gt; 19:54, 20 March 2013 (UTC)&lt;br /&gt;
# [[User:Guaka|Guaka]] ([[User talk:Guaka|talk]]) (tentative) 23:15, 20 March 2013 (UTC)&lt;br /&gt;
# Andy Mabbett, [[User:Pigsonthewing|Pigsonthewing]] (WikimediaUK)&lt;br /&gt;
# [[User:Deskana|Deskana]] ([[User talk:Deskana|talk]]) 14:27, 3 April 2013 (UTC)&lt;br /&gt;
# [[Wikipedia:nl:User:Spider|Spider]] ([[User talk:Ru.spider|talk]]) 15:28, 3 April 2013 (UTC)&lt;br /&gt;
# [[User:Reedy|Reedy]] ([[User talk:Reedy|talk]])&lt;br /&gt;
# [[User:Ladsgroup|Ladsgroup]] ([[User talk:Ladsgroup|talk]]) 09:08, 10 April 2013 (UTC)&lt;br /&gt;
# [[User:Natkabrown|Natkabrown]] ([[User talk:Natkabrown|talk]]) 10:53, 10 April 2013 (UTC)&lt;br /&gt;
# [[User:Schubi87|Schubi87]] ([[User talk:Schubi87|talk]]) 18:36, 10 April 2013 (UTC)&lt;br /&gt;
# [[User:Yug|Yug]] ([[User talk:Yug|talk]]) 12:11, 11 April 2013 (UTC)&lt;br /&gt;
# Edouard Lopez 12:11, 11 April 2013 (UTC)&lt;br /&gt;
# [[User:Edlira|Edlira]] ([[User talk:Edlira|talk]]) 22:30, 11 April 2013 (UTC)&lt;br /&gt;
# [[User:jpekel|jpekel]] ([[User talk:jpekel|talk]]) 12:30, 16 April 2013 (UTC)&lt;br /&gt;
# &#039;&#039;&#039;&amp;lt;font face=&amp;quot;Verdana&amp;quot;&amp;gt;&amp;amp;#91;[[User:Stwalkerster|&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;stwalkerster&amp;lt;/span&amp;gt;]]&amp;amp;#124;[[User talk:Stwalkerster|&amp;lt;span style=&amp;quot;color:black&amp;quot;&amp;gt;talk&amp;lt;/span&amp;gt;]]&amp;amp;#93;&amp;lt;/font&amp;gt;&#039;&#039;&#039; 13:46, 16 April 2013 (UTC)&lt;br /&gt;
# -- [[User:DeltaQuad|&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;DQ &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt; on the road]][[User_Talk:DeltaQuad|&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt; (ʞlɐʇ) ]]&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/font&amp;gt; 23:30, 16 April 2013 (UTC)&lt;br /&gt;
# [[User:Luis Felipe Schenone|LFS]] ([[User talk:Luis Felipe Schenone|talk]]) 23:10, 18 April 2013 (UTC)&lt;br /&gt;
# [[User:Matma Rex|Matma Rex]] ([[User talk:Matma Rex|talk]]) 11:14, 19 April 2013 (UTC)&lt;br /&gt;
# [[User:HAndrade (WMF)|HAndrade (WMF)]] ([[User talk:HAndrade (WMF)|talk]]) 00:45, 20 April 2013 (UTC)&lt;br /&gt;
# [[User:Mglaser|Mglaser]] ([[User talk:Mglaser|talk]]) 13:24, 20 April 2013 (UTC)&lt;br /&gt;
# [[User:Jean-Frédéric|Jean-Fred]] ([[User talk:Jean-Frédéric|talk]]) 21:59, 20 April 2013 (UTC)&lt;br /&gt;
# [[User:Eclectiqus|Eclectiqus]] 10:46, 22 April 2013 (UTC)&lt;br /&gt;
# [[User:Addshore|Addshore]] ([[User talk:Addshore|talk]]) 11:45, 23 April 2013 (UTC)&lt;br /&gt;
# [[User:Parent5446|Parent5446]] ([[User talk:Parent5446|talk]]) 14:38, 23 April 2013 (UTC)&lt;br /&gt;
# [[User:Jens Ohlig|Jens Ohlig]] ([[User talk:Jens Ohlig|talk]]) 15:19, 25 April 2013 (UTC)&lt;br /&gt;
# [[user:nasir8891|&amp;lt;span style=&amp;quot;color:#006699&amp;quot;&amp;gt;Nasir Khan Saikat&amp;lt;/span&amp;gt;]] • &amp;lt;small&amp;gt;[[user talk:Nasir8891|&amp;lt;span style=&amp;quot;color:#215876&amp;quot;&amp;gt;talk&amp;lt;/span&amp;gt;]] &amp;lt;/small&amp;gt;• 17:25, 25 April 2013 (UTC)&lt;br /&gt;
# [[User:Slevinski|Slevinski]] ([[User talk:Slevinski|talk]]) 15:33, 26 April 2013 (UTC)&lt;br /&gt;
# [[User:TMg|TMg]] 22:17, 28 April 2013 (UTC)&lt;br /&gt;
# [[User:Lokal_Profil|Lokal_Profil]] / [[User:André Costa (WMSE)|André Costa (WMSE)]] ([[User talk:André Costa (WMSE)|talk]]) 12:18, 2 May 2013 (UTC)&lt;br /&gt;
# [[User:Ziko|Ziko]] ([[User talk:Ziko|talk]]) 21:27, 8 May 2013 (UTC) Friday only&lt;br /&gt;
# [[User:CristianCantoro|CristianCantoro]] ([[User talk:CristianCantoro|talk]]) 10:45, 10 May 2013 (UTC) (on waiting list)&lt;br /&gt;
# [[User:Husky|Husky]] ([[User talk:Husky|talk]]) 11:32, 13 May 2013 (UTC)&lt;br /&gt;
# [[User:99of9|99of9]] ([[User talk:99of9|talk]]) 14:33, 13 May 2013 (UTC) (on waiting list for Saturday)&lt;br /&gt;
# [[User:Ocaasi|Ocaasi]] ([[User talk:Ocaasi|talk]]) 18:18, 13 May 2013 (UTC)&lt;br /&gt;
# [[User:Micru|Micru]] ([[User talk:Micru|talk]]) 14:04, 14 May 2013 (UTC)&lt;br /&gt;
# [[User:TWillemsen|TWillemsen]] ([[User talk:TWillemsen|talk]]) 19:05, 14 May 2013 (UTC)&lt;br /&gt;
# [[User:FatJagm|FatJagm]] ([[User talk:FatJagm|talk]]) 12:48, 15 May 2013 (UTC)&lt;br /&gt;
# [[User:Taweetham|Taweetham]] ([[User talk:Taweetham|talk]]) 00:05, 16 May 2013 (UTC) (Confirmed: arrival=Thursday ~8pm, departure=Monday ~1-2pm)&lt;br /&gt;
# Susanna Ånäs, [[User:Susannaanas|Susannaanas]] ([[User talk:Susannaanas|talk]]) 09:09, 16 May 2013 (UTC)&lt;br /&gt;
# [[User:OrenBochman|OrenBochman]] &#039;&#039;([[User Talk:OrenBochman|talk]])&#039;&#039; 20:03, 16 May 2013 (UTC)&lt;br /&gt;
# [[User:Lbenedix|Lbenedix]] ([[User talk:Lbenedix|talk]]) 11:15, 17 May 2013 (UTC)&lt;br /&gt;
# [[User:Erik Zachte|Erik Zachte]] ([[User talk:Erik Zachte|talk]]) 08:38, 19 May 2013 (UTC)&lt;br /&gt;
# [[User:1Veertje|1Veertje]] ([[User talk:1Veertje|talk]]) 18:33, 19 May 2013 (UTC)&lt;br /&gt;
# [[User:Nicole Ebber (WMDE)|Nicole Ebber (WMDE)]] ([[User talk:Nicole Ebber (WMDE)|talk]]) 17:03, 20 May 2013 (UTC)&lt;br /&gt;
# [[User:Dsc|dsc]] ([[User talk:Dsc|talk]]) 20:02, 20 May 2013 (UTC)&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Research&amp;diff=680707</id>
		<title>Analytics/Research</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Research&amp;diff=680707"/>
		<updated>2013-04-29T19:13:57Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://pinboard.in/u:wmfa Whitepapers, blog posts, etc.] of note and interest to us, the Analytics team&lt;br /&gt;
&lt;br /&gt;
== Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Create an [https://github.com/twitter/ambrose Ambrose] action for Oozie. ([http://oozie.apache.org/docs/3.3.2/DG_CustomActionExecutor.html Docs for Custom Oozie Actions])&lt;br /&gt;
* Job Generator Scripts&lt;br /&gt;
** Job script &amp;amp; templates -- Instead of copy-pasting old jobs to create new jobs, we could script the use of templates, with parameters &amp;amp; actions for job-types and common tasks.&lt;br /&gt;
** Script to use Pig&#039;s &amp;lt;code&amp;gt;DESCRIBE&amp;lt;/code&amp;gt; on the target of the final &amp;lt;code&amp;gt;STORE&amp;lt;/code&amp;gt; command to generate a Hive &amp;lt;code&amp;gt;CREATE TABLE&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
* Aggregate and index task stats by generating code unit (bundle/coord//workflow/script), by spawning job, by user, etc&lt;br /&gt;
** sum counters, run stats, make graphs&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Hadoop_Tools&amp;diff=680700</id>
		<title>Analytics/Kraken/Hadoop Tools</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Hadoop_Tools&amp;diff=680700"/>
		<updated>2013-04-29T19:07:03Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is meant as a bucket for tips and notes on using the Hadoop toolchain.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Pig =&lt;br /&gt;
&lt;br /&gt;
[http://pig.apache.org/ Pig] is a dataflow language adept at analyzing unstructured data, converting it into a regular structure.&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
* Push filters up even if you have to reprocess fields.&lt;br /&gt;
* Drop all unneeded fields as soon as you can.&lt;br /&gt;
* Syntax-check your script locally; use &amp;lt;code&amp;gt;DESCRIBE&amp;lt;/code&amp;gt; to understand data shape.&lt;br /&gt;
* Don&#039;t explicitly set &amp;lt;code&amp;gt;PARALLEL&amp;lt;/code&amp;gt; unless you have a reason. It only effects reduce operations, and Pig has heuristics based on data size for that; you are unlikely to help performance, and forcing &amp;lt;code&amp;gt;PARALLEL&amp;lt;/code&amp;gt; higher than necessary uses up more slots on and increases job overhead.&lt;br /&gt;
* Don&#039;t Be Afraid To:&lt;br /&gt;
** ...Run stupid, half-broken jobs from a grunt shell just to see the data shape or test your UDF-tinkertoys. (Just pls save to your home dir.)&lt;br /&gt;
** ...&amp;lt;code&amp;gt;DUMP&amp;lt;/code&amp;gt; after a complex statement to check output shape.&lt;br /&gt;
** ...Use Hive to check your data; its aggregation and filtering features are way more advanced and SQL is easy.&lt;br /&gt;
&lt;br /&gt;
== Reuse &amp;amp; Metaprogramming ==&lt;br /&gt;
&lt;br /&gt;
** Macros aren&#039;t really all that interesting as they&#039;re severely limited in scope.&lt;br /&gt;
** Be careful with &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; -- they&#039;re more flexible and powerful, but very expensive, as every call spawns more MR jobs!&lt;br /&gt;
** Parameters are inserted via literal string substitution, which lets you do some pretty wacky metaprogramming via workflows. This means you basically have meta-macros. See [https://github.com/wikimedia/kraken/blob/master/pig/rollup.pig rollup.pig] as an example.&lt;br /&gt;
&lt;br /&gt;
== Gotchas ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;MATCHES&amp;lt;/code&amp;gt; RegExp must hit whole input&lt;br /&gt;
* Don&#039;t expect relations to stay sorted -- derived relations after a reduce-op (namely, GROUP) need re-ordering!&lt;br /&gt;
* Implicit coercion from bag of single-tuple to scalar ONLY works for relations! -- it does NOT work for grouped-records or other actual bags&lt;br /&gt;
* Escaping quotes in a parameter is impossible. I swear it. It&#039;s is worse than several layers of `ssh box -- bash -lc &amp;quot;eval &#039;$WAT&#039;&amp;quot;`. I gave up; no combination of backslashes and quotes made any difference.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Oozie =&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
* Test each layer, work outward; I always make a &amp;lt;code&amp;gt;$JOB-wf.properties&amp;lt;/code&amp;gt; to test the workflow alone before moving on to the coord (with a &amp;lt;code&amp;gt;test-$JOB-coord.properties&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;$JOB-coord.properties&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Everything can formally declare parameters using a &amp;lt;code&amp;gt;&amp;lt;parameters&amp;gt;&amp;lt;/code&amp;gt; block at the beginning. DO IT! and avoid pointless defaults -- better to fail early.&lt;br /&gt;
* Check the &amp;lt;code&amp;gt;xmlns&amp;lt;/code&amp;gt; on your root element!&lt;br /&gt;
** Coordinators:     &amp;lt;code&amp;gt;xmlns=&amp;quot;uri:oozie:coordinator:0.4&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Workflows:        &amp;lt;code&amp;gt;xmlns=&amp;quot;uri:oozie:workflow:0.4&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Know your &amp;lt;code&amp;gt;&amp;lt;action&amp;gt;&amp;lt;/code&amp;gt; options: control flow, sub-workflow, fs, shell, java, streaming all have uses!&lt;br /&gt;
* Sub-workflows are like functions -- compose and reuse!&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;prepare&amp;gt;&amp;lt;/code&amp;gt; should probably be in all our jobs -- delete the output dir before starting work to ensure you don&#039;t pointlessly fail due to temporary cruft.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;globals&amp;gt;&amp;lt;/code&amp;gt; allows you to set properties for all actions. All jobs should set job-tracker and namenode here.&lt;br /&gt;
* &amp;lt;code&amp;gt;job.xml&amp;lt;/code&amp;gt;(s) -- they cascade -- will be useful once we start profiling and tuning jobs. Save those tweaks together as job-confs for similarly structured jobs to reuse!&lt;br /&gt;
&lt;br /&gt;
== Coordinators ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;dataset&amp;gt;&amp;lt;/code&amp;gt; initial instances should always predate the job. This only restricts the possible valid results; it doesn&#039;t dictate anything about where the job starts.&lt;br /&gt;
* Always create coordinator parameters for &amp;lt;code&amp;gt;jobStart&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;jobEnd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;jobName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;jobQueue&amp;lt;/code&amp;gt;! This lets you easily fire off the job as a backfill in a different queue, or one-of instances of the job, etc.&lt;br /&gt;
* &amp;lt;code&amp;gt;datasets.xml&amp;lt;/code&amp;gt; lets you share &amp;lt;code&amp;gt;&amp;lt;dataset&amp;gt;&amp;lt;/code&amp;gt; definitions. It&#039;s is worth investigating as the number of jobs grows.&lt;br /&gt;
* Chaining datasets between coordinators is fussy. I haven&#039;t seen it worth the energy so far.&lt;br /&gt;
&lt;br /&gt;
== Gotchas ==&lt;br /&gt;
&lt;br /&gt;
* Some workflow action elements are order-sensitive (!!). Ex: &amp;lt;code&amp;gt;&amp;lt;configuration&amp;gt;&amp;lt;/code&amp;gt; must come before &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;&amp;lt;pig-action&amp;gt;&amp;lt;/code&amp;gt;, and yes, the error message is oblique and unhelpful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hadoop =&lt;br /&gt;
&lt;br /&gt;
* All jobs keep performance counters and stats. These can be extremely helpful to improve job speed.&lt;br /&gt;
* Be familiar with the hdfs shell tool -- it&#039;s a lot more expressive than you might expect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tutorials and Guides =&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/coalesce_wf|The Coalesce Workflow]]: Concatenate and rename job results&lt;br /&gt;
* [[Analytics/Kraken/rollup_wf|The Rollup Workflow]]: Aggregate a result field into a rollup&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Hadoop_Tools&amp;diff=680698</id>
		<title>Analytics/Kraken/Hadoop Tools</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Hadoop_Tools&amp;diff=680698"/>
		<updated>2013-04-29T19:04:24Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Created page with &amp;quot;This page is meant as a bucket for tips and notes on using the Hadoop toolchain.   = Pig =  [http://pig.apache.org/ Pig] is a dataflow language adept at analyzing unstructured...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is meant as a bucket for tips and notes on using the Hadoop toolchain.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Pig =&lt;br /&gt;
&lt;br /&gt;
[http://pig.apache.org/ Pig] is a dataflow language adept at analyzing unstructured data, converting it into a regular structure.&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
* Push filters up even if you have to reprocess fields.&lt;br /&gt;
* Drop all unneeded fields as soon as you can.&lt;br /&gt;
* Syntax-check your script locally; use &amp;lt;code&amp;gt;DESCRIBE&amp;lt;/code&amp;gt; to understand data shape.&lt;br /&gt;
* Don&#039;t explicitly set &amp;lt;code&amp;gt;PARALLEL&amp;lt;/code&amp;gt; unless you have a reason. It only effects reduce operations, and Pig has heuristics based on data size for that; you are unlikely to help performance, and forcing &amp;lt;code&amp;gt;PARALLEL&amp;lt;/code&amp;gt; higher than necessary uses up more slots on and increases job overhead.&lt;br /&gt;
* Don&#039;t Be Afraid To:&lt;br /&gt;
** ...Run stupid, half-broken jobs from a grunt shell just to see the data shape or test your UDF-tinkertoys. (Just pls save to your home dir.)&lt;br /&gt;
** ...&amp;lt;code&amp;gt;DUMP&amp;lt;/code&amp;gt; after a complex statement to check output shape.&lt;br /&gt;
** ...Use Hive to check your data; its aggregation and filtering features are way more advanced and SQL is easy.&lt;br /&gt;
&lt;br /&gt;
== Reuse &amp;amp; Metaprogramming ==&lt;br /&gt;
&lt;br /&gt;
** Macros aren&#039;t really all that interesting as they&#039;re severely limited in scope.&lt;br /&gt;
** Be careful with &amp;lt;code&amp;gt;exec&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt; -- they&#039;re more flexible and powerful, but very expensive, as every call spawns more MR jobs!&lt;br /&gt;
** Parameters are inserted via literal string substitution, which lets you do some pretty wacky metaprogramming via workflows. This means you basically have meta-macros. See [http://github.com/wikimedia/kraken/oozie/util/rollup/rollup.pig rollup.pig] as an example.&lt;br /&gt;
&lt;br /&gt;
== Gotchas ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;MATCHES&amp;lt;/code&amp;gt; RegExp must hit whole input&lt;br /&gt;
* Don&#039;t expect relations to stay sorted -- derived relations after a reduce-op (namely, GROUP) need re-ordering!&lt;br /&gt;
* Implicit coercion from bag of single-tuple to scalar ONLY works for relations! -- it does NOT work for grouped-records or other actual bags&lt;br /&gt;
* Escaping quotes in a parameter is impossible. I swear it. It&#039;s is worse than several layers of `ssh box -- bash -lc &amp;quot;eval &#039;$WAT&#039;&amp;quot;`. I gave up; no combination of backslashes and quotes made any difference.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Oozie =&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
* Test each layer, work outward; I always make a &amp;lt;code&amp;gt;$JOB-wf.properties&amp;lt;/code&amp;gt; to test the workflow alone before moving on to the coord (with a &amp;lt;code&amp;gt;test-$JOB-coord.properties&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;$JOB-coord.properties&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Everything can formally declare parameters using a &amp;lt;code&amp;gt;&amp;lt;parameters&amp;gt;&amp;lt;/code&amp;gt; block at the beginning. DO IT! and avoid pointless defaults -- better to fail early.&lt;br /&gt;
* Check the &amp;lt;code&amp;gt;xmlns&amp;lt;/code&amp;gt; on your root element!&lt;br /&gt;
** Coordinators:     &amp;lt;code&amp;gt;xmlns=&amp;quot;uri:oozie:coordinator:0.4&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Workflows:        &amp;lt;code&amp;gt;xmlns=&amp;quot;uri:oozie:workflow:0.4&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Workflows ==&lt;br /&gt;
&lt;br /&gt;
* Know your &amp;lt;code&amp;gt;&amp;lt;action&amp;gt;&amp;lt;/code&amp;gt; options: control flow, sub-workflow, fs, shell, java, streaming all have uses!&lt;br /&gt;
* Sub-workflows are like functions -- compose and reuse!&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;prepare&amp;gt;&amp;lt;/code&amp;gt; should probably be in all our jobs -- delete the output dir before starting work to ensure you don&#039;t pointlessly fail due to temporary cruft.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;globals&amp;gt;&amp;lt;/code&amp;gt; allows you to set properties for all actions. All jobs should set job-tracker and namenode here.&lt;br /&gt;
* &amp;lt;code&amp;gt;job.xml&amp;lt;/code&amp;gt;(s) -- they cascade -- will be useful once we start profiling and tuning jobs. Save those tweaks together as job-confs for similarly structured jobs to reuse!&lt;br /&gt;
&lt;br /&gt;
== Coordinators ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;dataset&amp;gt;&amp;lt;/code&amp;gt; initial instances should always predate the job. This only restricts the possible valid results; it doesn&#039;t dictate anything about where the job starts.&lt;br /&gt;
* Always create coordinator parameters for &amp;lt;code&amp;gt;jobStart&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;jobEnd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;jobName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;jobQueue&amp;lt;/code&amp;gt;! This lets you easily fire off the job as a backfill in a different queue, or one-of instances of the job, etc.&lt;br /&gt;
* &amp;lt;code&amp;gt;datasets.xml&amp;lt;/code&amp;gt; lets you share &amp;lt;code&amp;gt;&amp;lt;dataset&amp;gt;&amp;lt;/code&amp;gt; definitions. It&#039;s is worth investigating as the number of jobs grows.&lt;br /&gt;
* Chaining datasets between coordinators is fussy. I haven&#039;t seen it worth the energy so far.&lt;br /&gt;
&lt;br /&gt;
== Gotchas ==&lt;br /&gt;
&lt;br /&gt;
* Some workflow action elements are order-sensitive (!!). Ex: &amp;lt;code&amp;gt;&amp;lt;configuration&amp;gt;&amp;lt;/code&amp;gt; must come before &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;&amp;lt;pig-action&amp;gt;&amp;lt;/code&amp;gt;, and yes, the error message is oblique and unhelpful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hadoop =&lt;br /&gt;
&lt;br /&gt;
* All jobs keep performance counters and stats. These can be extremely helpful to improve job speed.&lt;br /&gt;
* Be familiar with the hdfs shell tool -- it&#039;s a lot more expressive than you might expect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tutorials and Guides =&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/coalesce_wf|The Coalesce Workflow]]: Concatenate and rename job results&lt;br /&gt;
* [[Analytics/Kraken/rollup_wf|The Rollup Workflow]]: Aggregate a result field into a rollup&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=680697</id>
		<title>Analytics/Kraken</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=680697"/>
		<updated>2013-04-29T19:03:33Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wikimedia engineering project information&lt;br /&gt;
| name        = Analytics infrastructure&lt;br /&gt;
| description = A robust, distributed computing and data services platform.&lt;br /&gt;
| start       = 2011-05-22&lt;br /&gt;
| end         = &lt;br /&gt;
| group       = Analytics&lt;br /&gt;
| lead        = &lt;br /&gt;
| team        = [[User:Ottomata|Andrew Otto]], [[User:Dsc|David Schoonover]], [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
| previous    = &lt;br /&gt;
| next        = &lt;br /&gt;
| projectpage = Analytics/Infrastructure&lt;br /&gt;
| display     = {{{display|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Kraken is the code-name for the robust distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
= [[{{FULLPAGENAME}}/status|Status]] =&lt;br /&gt;
&lt;br /&gt;
{{Wikimedia project status line|{{FULLPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
= Rationale =&lt;br /&gt;
&lt;br /&gt;
The Wiki Movement has a chronic need for analytics. We need it to understand our editors, to encourage growth, to engender diversity, to focus our resources, to improve our engineering efforts, and to measure our success. It permeates nearly all our goals, yet our current analytics capabilities are underdeveloped: we lack infrastructure to capture editor, visitor, clickstream, and device data in a way that is easily accessible; our efforts are distributed among different departments; our data is fragmented over different systems and databases; our tools are ad-hoc.&lt;br /&gt;
&lt;br /&gt;
Rather than merely improve existing jobs and data pipelines, the Analytics Team aims to construct a Data Services Platform capable of mining intelligence from all datastreams of interest, providing this insight in real time, and exposing it via an API to power applications, mash up into websites, and stream to devices.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Access|Getting Access]]&lt;br /&gt;
* [[Analytics/Kraken/Overview|Overview]]&lt;br /&gt;
** [[Analytics/Kraken/Overview/Software|Software Overview]]&lt;br /&gt;
** [http://upload.wikimedia.org/wikipedia/mediawiki/1/1b/Kraken_flow_diagram-2.png Cluster Dataflow Diagram]&lt;br /&gt;
* &#039;&#039;&#039;Data&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Streams|Data Streams]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Blurbs|Blurbs About Kraken]]&lt;br /&gt;
** [https://docs.google.com/a/wikimedia.org/spreadsheet/ccc?key=0AvpRkIqSY9hNdEtRLVNoQWNvQzNleHBtTXR5emI3Z2c&amp;amp;pli=1#gid=5 Kraken Benchmarks]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsHadoopSetupNotes Hadoop Setup Notes]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsKrakenTestClusterSetup Test Cluster Setup Notes]&lt;br /&gt;
* &#039;&#039;&#039;[[Analytics/Kraken/Meetings|Meeting Notes]]&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Meetings/SecurityReview|Security Review Meeting]]&lt;br /&gt;
** [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Pixel_Service|Pixel Service]] and [[Analytics/Kraken/Request_Logging|Request Logging]] ==&lt;br /&gt;
&lt;br /&gt;
Public data import endpoint, and system for capturing the incoming firehose from our front-end servers.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
** [[Analytics/Kraken/Request_Logging|System Recommendation]]&lt;br /&gt;
** [[Analytics/Kraken/Logging_Solutions_Overview|Distributed Logging Systems Research]]&lt;br /&gt;
** [https://docs.google.com/spreadsheet/pub?key=0AvpRkIqSY9hNdFNoYWFIX29hMnFuenV1ckRvYzEzUVE&amp;amp;gid=3 Feature Comparison Spreadsheet]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Work with Ori, Patrick, &amp;amp; ops to figure out Kafka producer situation for production [otto, dsc, ori, preilly, ops]&lt;br /&gt;
* MediaWiki EventLogging integration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/ETL|ETL Topology]] ==&lt;br /&gt;
&lt;br /&gt;
The [http://storm-project.net Storm] topology that processes incoming data (aka, &amp;quot;Extract-Transform-Load&amp;quot; in data warehousing jargon).&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/ETL|ETL Topology]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Maven + Nexus setup w/ storm pom [dsc]&lt;br /&gt;
* Storm Bolts:&lt;br /&gt;
** Consume from Kafka (by topic?)&lt;br /&gt;
** Serialize &amp;amp; canonicalize record using Avro schema&lt;br /&gt;
** GeoIP annotation&lt;br /&gt;
** Mobile carrier annotation (by IP)&lt;br /&gt;
** IP anonymization (where does the salt live? how often should we change it?)&lt;br /&gt;
** Append record to per-hour files in HDFS (path using timestamp, topic)&lt;br /&gt;
** Notifier Bolt to update Kafka consumer checkpoint (and/or publish event for external hooks)&lt;br /&gt;
* Define Avro schemas:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
*** Figure out convention for EventData packets to self-identify with a more specific schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Core_Jobs|Core Jobs]] ==&lt;br /&gt;
&lt;br /&gt;
Core data processing jobs for processing web requests and event data, maintained by the Analytics team.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Figure out request tagging -- how can we avoid mutating records?&lt;br /&gt;
* Reportcard Oozie workflow [DvL]&lt;br /&gt;
** Pig Macro for &amp;quot;typical request analytics&amp;quot;&lt;br /&gt;
* Figure out indexing scheme:&lt;br /&gt;
** Aggregated time buckets&lt;br /&gt;
** Referrer chains&lt;br /&gt;
** Event aggregations&lt;br /&gt;
** Funnel Analysis&lt;br /&gt;
*** A/B testing event data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Data_Tools|Data Tools]] ==&lt;br /&gt;
&lt;br /&gt;
Data processing library and toolkit provided &amp;amp; maintained by the Analytics team, esp for use with Kraken.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Infrastructure/Hadoop Tools|Tips and Notes on Hadoop Tools]]&lt;br /&gt;
* [[Analytics/Kraken/Oozie|Oozie Tutorial]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Setup regular sqoop imports [DvL]&lt;br /&gt;
* Avro De/Serialization storage format compatibility:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
* Build re-usable pig/hive library, outsource this to analysts as much as possible [DvL]&lt;br /&gt;
* KV-Pairs parsing tools&lt;br /&gt;
* Conversion funnel analysis tools&lt;br /&gt;
** A/B testing analysis tools&lt;br /&gt;
* MW EventLogging extension integration&lt;br /&gt;
* Investigate Ori&#039;s Mediawiki extension for instrumentation, sending event/edit data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Infrastructure|Infrastructure]] ==&lt;br /&gt;
&lt;br /&gt;
Bucket for general cluster infrastructure and maintenance tasks.&lt;br /&gt;
* [[Analytics/Kraken/Puppet|Kraken Puppetization]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Ports|JMX Ports]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Monitoring|JMX Monitoring Research]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeting Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Meetings/SecurityReview|Security Review Meeting]]&lt;br /&gt;
* [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fix the one busted Cisco machine (an07) [otto]&lt;br /&gt;
* Continue puppetization [otto]&lt;br /&gt;
* JMX Monitoring [otto, dsc]&lt;br /&gt;
* Investigate / experiment / benchmark Hadoop stack [DvL]&lt;br /&gt;
* Data owner services -- export, dashboard, visualizations (on Hue?) [dsc, dan]&lt;br /&gt;
** Hue plugin for Limn integration? [dsc]&lt;br /&gt;
* Get analysts experimenting with Hive/Pig [DvL]&lt;br /&gt;
* General purpose job-runner using Kafka+Storm&lt;br /&gt;
* Setup Hadoop FairScheduler [DvL]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Research =&lt;br /&gt;
&lt;br /&gt;
== Bundling ==&lt;br /&gt;
&lt;br /&gt;
Investigate size of savings of structure sharing via a short-term (between 1-30sec window) queue.&lt;br /&gt;
&lt;br /&gt;
* Reorder within window by timestamp? Seq number?&lt;br /&gt;
* Parameters of experiment:&lt;br /&gt;
** Buffer time: 1s, 2s, 5s, 10s&lt;br /&gt;
** Sharded by server&lt;br /&gt;
** Bundle by IP, UA, IP+UA&lt;br /&gt;
* Pull-up fields for structure sharing: &lt;br /&gt;
** Invariant: ip, ua, accept-lang, carrier&lt;br /&gt;
** Often invariant: method, status, referer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Hbase&lt;br /&gt;
* Hive&lt;br /&gt;
* Hue plugins&lt;br /&gt;
* Cascading -- do we even need this as we have Oozie?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
[[Category:WMF Projects/Analytics]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Requirements_Checklist&amp;diff=668793</id>
		<title>Analytics/Requirements Checklist</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Requirements_Checklist&amp;diff=668793"/>
		<updated>2013-04-04T19:29:02Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Created page with &amp;quot;= User Story &amp;amp; Expectations =  * What: Captures the narrative as presented by the user (with little-to-no interpretation or cleanup) * Goal: Understand the user&amp;#039;s needs, desir...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= User Story &amp;amp; Expectations =&lt;br /&gt;
&lt;br /&gt;
* What: Captures the narrative as presented by the user (with little-to-no interpretation or cleanup)&lt;br /&gt;
* Goal: Understand the user&#039;s needs, desires, and expectations.&lt;br /&gt;
** The raw narrative is useful even if it doesn&#039;t really make sense! -- It helps to know where we started in the process to grok their expectations.&lt;br /&gt;
** Honestly great to have a literal description of the deliverable in their own words&lt;br /&gt;
* Key Questions:&lt;br /&gt;
** What is their goal? Why do they want to achieve that? Gains/Pains. What are possible scale-backs?&lt;br /&gt;
** Who surfaced this desire (actual person) and in what context? Who do we ultimately deliver to?&lt;br /&gt;
** How clear was the user&#039;s vision of the feature, the deliverable and the reqs?&lt;br /&gt;
** What sort of expectations did they have *before* coming us about the LoE of their request and/or the timeline?&lt;br /&gt;
** Are there any external deadlines? Does this block anything?&lt;br /&gt;
&lt;br /&gt;
= User Feature Requirements &amp;amp; Acceptance Criterion =&lt;br /&gt;
&lt;br /&gt;
* What: Cleaned and clarified description of the deliverable, broken out into features that make sense to everyone.&lt;br /&gt;
** Ideally, we want both the high-level, easy-to-grok description, and the low-level, precise breakout.&lt;br /&gt;
** eg. &amp;quot;Web dashboard w/ 2 tabs -- &amp;quot;Mobile Site&amp;quot;, and &amp;quot;Mobile Apps&amp;quot;. A contains 6 graphs: 1. Pageviews to Mobile Site (line, logscale, step=1mo), with metrics (all pageviews / month): total across all sites, alpha site, beta site. 2. ...&amp;quot;&lt;br /&gt;
* Goal: Consensus around the concrete deliverable and especially its scope, including: &lt;br /&gt;
** Clear and precise enumeration capabilities/limitations&lt;br /&gt;
** Expectations around behavior and appearance&lt;br /&gt;
** Rough expectations around a timeline, and some boxing on level-of-effort/the time commitment&lt;br /&gt;
* Components:&lt;br /&gt;
** Data Requirements, specified as precisely as possible.&lt;br /&gt;
*** We don&#039;t necessarily need to make the user sit through us hashing this out, but (imo) we do need to get them to explicitly sign off on the result.&lt;br /&gt;
*** I think we should consider it a hard requirement that any feature which requires new metric work have descriptions for:&lt;br /&gt;
**** Definitions for all metric dimensions (with datatypes) -- this means &amp;quot;counts&amp;quot; should explicitly say what dimensions are grouped and counted&lt;br /&gt;
**** Data output shape -- define rows/columns with types (including the step between rows); what defines a &amp;quot;key&amp;quot;, and is it row-major or col-major?; cardinality/storage estimate; drill-downs/aggregations/rollups&lt;br /&gt;
**** Data source(s) -- both the data necessary for the computation and the origin of said data. For example, if the expectation is that we use a stream into Kraken, it is a different feature to fall back on the sampled Squid logs, as the whole implementation toolchain is different.&lt;br /&gt;
**** Data output format(s) -- can&#039;t just assume tsv if we aim to deliver certain visualizations (esp geo) -- is json, xml, or avro ok? how will the data be published? does it need to be public, or can we cron files into a shared space on stat1001?&lt;br /&gt;
**** Minimally required frequency of recomputation -- note this is different from the timestep for rows and/or rollups; this is how stale the data can be (aka, how often the job runs)&lt;br /&gt;
** Presentation/Visualization Requirements, including any graphs, dashboards, domains, or other presentation features (pointing to existing examples if possible).&lt;br /&gt;
*** Dashboards: names, contents for each, their tabs, and the visualizations in each tab.&lt;br /&gt;
*** Questions for each visualization: graph type (line, bar, geo, etc); any specific formatting/appearance requests (custom labels? scale? timespan?)&lt;br /&gt;
*** Are any new Limn features needed?&lt;br /&gt;
&lt;br /&gt;
= Solution Options w/ Tasks &amp;amp; LoE Estimate =&lt;br /&gt;
&lt;br /&gt;
* What: List several technical solutions as options for satisfying the requirements, assessing the tasks required and the level-of-effort involved.&lt;br /&gt;
* Goal: Find the best way to make the user happy while conserving dev effort and advancing along the trajectory of our strategy to provide insight via a robust, automated, self-service platform.&lt;br /&gt;
* If necessary, Engineering Lead coordinates team expertise and presents results.&lt;br /&gt;
* Everyone works together to assess, revise, and prioritize (planning poker, etc).&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics&amp;diff=668789</id>
		<title>Analytics</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics&amp;diff=668789"/>
		<updated>2013-04-04T19:25:55Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:WMF_Analytics_-_Ring_Logo_(thick).svg|200px|right|wmf analytics: logos mean srs bsns]] Howdy from the Wikimedia Analytics team! We&#039;re currently working on building a Data Services Platform (codenamed Kraken) to power the next-generation of intelligence and analytics, as well as a new and wondrous [http://reportcard.wmflabs.org/ Reportcard].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re enthusiastic about analytics, you might want to [http://blog.wikimedia.org/2012/07/25/meet-the-analytics-team/ meet the team], or subscribe to the [https://lists.wikimedia.org/mailman/listinfo/analytics Analytics Mailing List] (don&#039;t worry, it&#039;s low-traffic).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
* [[User:DAndreescu|Dan Andreescu]]&lt;br /&gt;
* [[User:Ottomata|Andrew Otto]]&lt;br /&gt;
* [[User:Dsc|Dave Schoonover]]&lt;br /&gt;
* [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
* [[User:Erik_Zachte|Erik Zachte]]&lt;br /&gt;
* [[User:Kparkinson|Kraig Parkinson]]&lt;br /&gt;
* Stefan Petrea&lt;br /&gt;
&lt;br /&gt;
== Planning ==&lt;br /&gt;
* [[Analytics/Roadmap|Roadmap]]&lt;br /&gt;
** [[Roadmap#Analytics|Analytics on the Platform Roadmap]]&lt;br /&gt;
* [[Analytics/Roadmap/PlanningMeetings|Meeting Notes]]&lt;br /&gt;
* [[Analytics/Roadmap/2012-2013|2012-2013 Planning]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stakeholder Corner ==&lt;br /&gt;
* [[Analytics/Product_Codes|Product Codes]] &amp;amp;mdash; required application identifier needed to get data into the cluster.&lt;br /&gt;
* [[Analytics/Metric_definitions|Metrics Definitions]] &amp;amp;mdash; canonical definition of metrics.&lt;br /&gt;
* [[Analytics/Dreams|Dreams]] &amp;amp;mdash; features, metrics/queries, and visualizations people would like to see someday. Importantly, don&#039;t worry about these things being reasonable, well-scoped, or put in the right place. Just add stuff here you think would be useful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Kraken|Kraken]] ===&lt;br /&gt;
* &amp;quot;Kraken&amp;quot; is the codename for the cluster and software which powers the Data Services Platform.&lt;br /&gt;
* [[Analytics/Kraken|Project Info]]&lt;br /&gt;
* [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
* [https://upload.wikimedia.org/wikipedia/mediawiki/3/38/Kraken_flow_diagram.png Cluster Dataflow Diagram]&lt;br /&gt;
** [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
** [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning docs]]&lt;br /&gt;
** [[Analytics/Distributed_Logging_Solutions|Distributed Logging]]&lt;br /&gt;
** [[Analytics/Kraken/Infrastructure|Kraken Server Hardware &amp;amp; Infrastructure]]&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Kraken}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Limn|Limn]] ===&lt;br /&gt;
* Limn is a drop-in GUI toolkit for building visualizations. It powers the [http://reportcard.wmflabs.org/ WMF Monthly Reportcard].&lt;br /&gt;
* [[Analytics/Limn|Project Info]]&lt;br /&gt;
* Source: https://github.com/wikimedia/limn&lt;br /&gt;
* Issues: https://github.com/wikimedia/limn/issues&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Limn}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Reportcard|Reportcard]] ===&lt;br /&gt;
* The [http://reportcard.wmflabs.org/ WMF Monthly Reportcard] is a visual dashboard of high-level metrics on the health and success of the various Wikimedia projects.&lt;br /&gt;
* [[Analytics/Reportcard|Project Info]]&lt;br /&gt;
* Site: http://reportcard.wmflabs.org/&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Reportcard}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Wikistats|Wikistats]] ===&lt;br /&gt;
* [[Analytics/Wikistats|Project Info]]&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Wikistats}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Logging infrastructure|Logging Infrastructure]] ===&lt;br /&gt;
* [[Analytics/Logging infrastructure|Project Info]]&lt;br /&gt;
* Components:&lt;br /&gt;
** [[Analytics/Logging infrastructure|UDP Logging]]&lt;br /&gt;
** [[Analytics/UDP-filters|UDP Log Filters]]&lt;br /&gt;
* Resources:&lt;br /&gt;
** [[Analytics/Infrastructure/Stat1|&amp;lt;code&amp;gt;stat1&amp;lt;/code&amp;gt; server]]&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Logging infrastructure}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Data_Releases|Data Releases]] ===&lt;br /&gt;
* [[Analytics/Data_Releases|Project Info]]&lt;br /&gt;
* [[Analytics/Pageviews|Page View Analytics]]&lt;br /&gt;
** [[Analytics/Pageviews/Mobile|Mobile]]&lt;br /&gt;
** [[Analytics/Pageviews/GLAM|GLAM]]&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Data Releases}}&lt;br /&gt;
&lt;br /&gt;
=== See Also ===&lt;br /&gt;
* [[Developers/Maintainers#Analytics|Project Maintainers]]&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Research|Research]] &amp;amp; Notes ==&lt;br /&gt;
* [[Analytics/Research|Research Hub]]&lt;br /&gt;
* [http://pinboard.in/u:wmfa Team Bookmarks on Pinboard]&lt;br /&gt;
* [[Analytics/Requirements_Checklist|Requirements Checklist]]&lt;br /&gt;
* Across WMF:&lt;br /&gt;
** [[OAuth]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Management|Management]] ==&lt;br /&gt;
&lt;br /&gt;
* Using Mingle to track improvements: https://mingle.corp.wikimedia.org/projects/analytics/wiki/Engaging_in_Continuous_Improvement&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Meetings/2013-03-21&amp;diff=661923</id>
		<title>Meetings/2013-03-21</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Meetings/2013-03-21&amp;diff=661923"/>
		<updated>2013-03-20T22:43:25Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav&lt;br /&gt;
 | title = Wikimedia Open Tech Chats&lt;br /&gt;
 | previous = &#039;&#039;&#039;[[Meetings/2013-02-28|28 February]]&#039;&#039;&#039;&lt;br /&gt;
 | next = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 120%;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 15%; background-color:#CC99CC&amp;quot; | What&lt;br /&gt;
|  HipHop/HHVM&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color:#D8BFD8&amp;quot; | How&lt;br /&gt;
| We&#039;re using a combination of Google Hangout on Air (an open YouTube stream from the 6th floor of the WMF office) + potential additional Hangout guest speakers + IRC for text-based communication. There&#039;s no attendance limit. You don&#039;t need Hangout to participate -- if you can play YouTube videos and join IRC, you&#039;re fine.&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color:#CC99CC&amp;quot; | When&lt;br /&gt;
| Thursday, March 21, 2013, 19:00 [http://timeanddate.com/worldclock/fixedtime.html?msg=WMF+Open+Tech+Chat&amp;amp;iso=20130117T12&amp;amp;p1=224&amp;amp;ah=1 UTC] (12:00 PDT), 60 minutes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color:#D8BFD8&amp;quot; | Where&lt;br /&gt;
| &lt;br /&gt;
* Physical space: 6th floor SF office, &amp;quot;Collab&amp;quot; space&lt;br /&gt;
* IRC: {{irc|wikimedia-dev}}&lt;br /&gt;
* YouTube stream: https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=isq-jid4ujQ&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#CC99CC&amp;quot; |Food&lt;br /&gt;
| Please [https://office.wikimedia.org/wiki/Lunch_2013-03-21 sign up for lunch] if you&#039;re attending in San Francisco&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
Drew Paroski from Facebook will be joining us for this week&#039;s open tech chat on HipHop/HHVM&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
Add your name, tell your friends!&lt;br /&gt;
&lt;br /&gt;
* [[User:Asher Feldman|Asher Feldman]] ([[User talk:Asher Feldman|talk]]) 22:15, 18 March 2013 (UTC)&lt;br /&gt;
* [[User:MaxSem|Max Semenik]] ([[User talk:MaxSem|talk]]) 22:27, 18 March 2013 (UTC)&lt;br /&gt;
* [[User:Brion VIBBER|brion]] ([[User talk:Brion VIBBER|talk]])&lt;br /&gt;
* [[User:RobLa-WMF|RobLa-WMF]] ([[User talk:RobLa-WMF|talk]])&lt;br /&gt;
* [[User:Ssastry|Ssastry]] ([[User talk:Ssastry|talk]]) 23:39, 18 March 2013 (UTC)&lt;br /&gt;
* [[User:Renklauf|Ryan Faulkner]] 2013-03-19 02:06:18 UTC&lt;br /&gt;
* [[User:ABaso(WMF)|ABaso(WMF)]] ([[User talk:ABaso(WMF)|talk]]) 22:51, 19 March 2013 (UTC)&lt;br /&gt;
* [[User:GWicke|Gabriel Wicke (GWicke)]] ([[User talk:GWicke|talk]]) 17:23, 20 March 2013 (UTC)&lt;br /&gt;
* [[User:Inez|Inez Korczyński]] ([[User talk:Inez|talk]]) 18:05, 20 March 2013 (UTC)&lt;br /&gt;
* [[User:Bsitu|Bsitu]] ([[User talk:Bsitu|talk]]) 19:15, 20 March 2013 (UTC)&lt;br /&gt;
* [[User:Dsc|dsc]] ([[User talk:Dsc|§]]) {{CURRENTTIME}}, {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} (UTC)&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=661884</id>
		<title>Analytics/Kraken</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=661884"/>
		<updated>2013-03-20T19:05:55Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wikimedia engineering project information&lt;br /&gt;
| name        = Kraken (Analytics Cluster)&lt;br /&gt;
| description = A robust, distributed computing and data services platform.&lt;br /&gt;
| start       = 2011-05-22&lt;br /&gt;
| end         = &lt;br /&gt;
| group       = Analytics&lt;br /&gt;
| lead        = &lt;br /&gt;
| team        = [[User:Ottomata|Andrew Otto]], [[User:Dsc|David Schoonover]], [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
| previous    = &lt;br /&gt;
| next        = &lt;br /&gt;
| projectpage = Analytics/Kraken&lt;br /&gt;
| display     = {{{display|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Kraken is the code-name for the robust distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
= [[{{FULLPAGENAME}}/status|Status]] =&lt;br /&gt;
&lt;br /&gt;
{{Wikimedia project status line|{{FULLPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
= Rationale =&lt;br /&gt;
&lt;br /&gt;
The Wiki Movement has a chronic need for analytics. We need it to understand our editors, to encourage growth, to engender diversity, to focus our resources, to improve our engineering efforts, and to measure our success. It permeates nearly all our goals, yet our current analytics capabilities are underdeveloped: we lack infrastructure to capture editor, visitor, clickstream, and device data in a way that is easily accessible; our efforts are distributed among different departments; our data is fragmented over different systems and databases; our tools are ad-hoc.&lt;br /&gt;
&lt;br /&gt;
Rather than merely improve existing jobs and data pipelines, the Analytics Team aims to construct a Data Services Platform capable of mining intelligence from all datastreams of interest, providing this insight in real time, and exposing it via an API to power applications, mash up into websites, and stream to devices.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Access|Getting Access]]&lt;br /&gt;
* [[Analytics/Kraken/Overview|Overview]]&lt;br /&gt;
** [[Analytics/Kraken/Overview/Software|Software Overview]]&lt;br /&gt;
** [http://upload.wikimedia.org/wikipedia/mediawiki/1/1b/Kraken_flow_diagram-2.png Cluster Dataflow Diagram]&lt;br /&gt;
* &#039;&#039;&#039;Data&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Streams|Data Streams]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Blurbs|Blurbs About Kraken]]&lt;br /&gt;
** [https://docs.google.com/a/wikimedia.org/spreadsheet/ccc?key=0AvpRkIqSY9hNdEtRLVNoQWNvQzNleHBtTXR5emI3Z2c&amp;amp;pli=1#gid=5 Kraken Benchmarks]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsHadoopSetupNotes Hadoop Setup Notes]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsKrakenTestClusterSetup Test Cluster Setup Notes]&lt;br /&gt;
* &#039;&#039;&#039;[[Analytics/Kraken/Meetings|Meeting Notes]]&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Meetings/SecurityReview|Security Review Meeting]]&lt;br /&gt;
** [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Pixel_Service|Pixel Service]] and [[Analytics/Kraken/Request_Logging|Request Logging]] ==&lt;br /&gt;
&lt;br /&gt;
Public data import endpoint, and system for capturing the incoming firehose from our front-end servers.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
** [[Analytics/Kraken/Request_Logging|System Recommendation]]&lt;br /&gt;
** [[Analytics/Kraken/Logging_Solutions_Overview|Distributed Logging Systems Research]]&lt;br /&gt;
** [https://docs.google.com/spreadsheet/pub?key=0AvpRkIqSY9hNdFNoYWFIX29hMnFuenV1ckRvYzEzUVE&amp;amp;gid=3 Feature Comparison Spreadsheet]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Work with Ori, Patrick, &amp;amp; ops to figure out Kafka producer situation for production [otto, dsc, ori, preilly, ops]&lt;br /&gt;
* MediaWiki EventLogging integration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/ETL|ETL Topology]] ==&lt;br /&gt;
&lt;br /&gt;
The [http://storm-project.net Storm] topology that processes incoming data (aka, &amp;quot;Extract-Transform-Load&amp;quot; in data warehousing jargon).&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/ETL|ETL Topology]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Maven + Nexus setup w/ storm pom [dsc]&lt;br /&gt;
* Storm Bolts:&lt;br /&gt;
** Consume from Kafka (by topic?)&lt;br /&gt;
** Serialize &amp;amp; canonicalize record using Avro schema&lt;br /&gt;
** GeoIP annotation&lt;br /&gt;
** Mobile carrier annotation (by IP)&lt;br /&gt;
** IP anonymization (where does the salt live? how often should we change it?)&lt;br /&gt;
** Append record to per-hour files in HDFS (path using timestamp, topic)&lt;br /&gt;
** Notifier Bolt to update Kafka consumer checkpoint (and/or publish event for external hooks)&lt;br /&gt;
* Define Avro schemas:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
*** Figure out convention for EventData packets to self-identify with a more specific schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Core_Jobs|Core Jobs]] ==&lt;br /&gt;
&lt;br /&gt;
Core data processing jobs for processing web requests and event data, maintained by the Analytics team.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Figure out request tagging -- how can we avoid mutating records?&lt;br /&gt;
* Reportcard Oozie workflow [DvL]&lt;br /&gt;
** Pig Macro for &amp;quot;typical request analytics&amp;quot;&lt;br /&gt;
* Figure out indexing scheme:&lt;br /&gt;
** Aggregated time buckets&lt;br /&gt;
** Referrer chains&lt;br /&gt;
** Event aggregations&lt;br /&gt;
** Funnel Analysis&lt;br /&gt;
*** A/B testing event data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Data_Tools|Data Tools]] ==&lt;br /&gt;
&lt;br /&gt;
Data processing library and toolkit provided &amp;amp; maintained by the Analytics team, esp for use with Kraken.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Oozie|Oozie Tutorial]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Setup regular sqoop imports [DvL]&lt;br /&gt;
* Avro De/Serialization storage format compatibility:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
* Build re-usable pig/hive library, outsource this to analysts as much as possible [DvL]&lt;br /&gt;
* KV-Pairs parsing tools&lt;br /&gt;
* Conversion funnel analysis tools&lt;br /&gt;
** A/B testing analysis tools&lt;br /&gt;
* MW EventLogging extension integration&lt;br /&gt;
* Investigate Ori&#039;s Mediawiki extension for instrumentation, sending event/edit data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Infrastructure|Infrastructure]] ==&lt;br /&gt;
&lt;br /&gt;
Bucket for general cluster infrastructure and maintenance tasks.&lt;br /&gt;
* [[Analytics/Kraken/Puppet|Kraken Puppetization]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Ports|JMX Ports]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Monitoring|JMX Monitoring Research]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeting Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Meetings/SecurityReview|Security Review Meeting]]&lt;br /&gt;
* [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fix the one busted Cisco machine (an07) [otto]&lt;br /&gt;
* Continue puppetization [otto]&lt;br /&gt;
* JMX Monitoring [otto, dsc]&lt;br /&gt;
* Investigate / experiment / benchmark Hadoop stack [DvL]&lt;br /&gt;
* Data owner services -- export, dashboard, visualizations (on Hue?) [dsc, dan]&lt;br /&gt;
** Hue plugin for Limn integration? [dsc]&lt;br /&gt;
* Get analysts experimenting with Hive/Pig [DvL]&lt;br /&gt;
* General purpose job-runner using Kafka+Storm&lt;br /&gt;
* Setup Hadoop FairScheduler [DvL]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Research =&lt;br /&gt;
&lt;br /&gt;
== Bundling ==&lt;br /&gt;
&lt;br /&gt;
Investigate size of savings of structure sharing via a short-term (between 1-30sec window) queue.&lt;br /&gt;
&lt;br /&gt;
* Reorder within window by timestamp? Seq number?&lt;br /&gt;
* Parameters of experiment:&lt;br /&gt;
** Buffer time: 1s, 2s, 5s, 10s&lt;br /&gt;
** Sharded by server&lt;br /&gt;
** Bundle by IP, UA, IP+UA&lt;br /&gt;
* Pull-up fields for structure sharing: &lt;br /&gt;
** Invariant: ip, ua, accept-lang, carrier&lt;br /&gt;
** Often invariant: method, status, referer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Hbase&lt;br /&gt;
* Hive&lt;br /&gt;
* Hue plugins&lt;br /&gt;
* Cascading -- do we even need this as we have Oozie?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
[[Category:WMF Projects/Analytics]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Oozie&amp;diff=661512</id>
		<title>Analytics/Archive/Infrastructure/Oozie</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Oozie&amp;diff=661512"/>
		<updated>2013-03-19T15:46:19Z</updated>

		<summary type="html">&lt;p&gt;Dsc: fixes the awful analytics1010.wikimedia.org typo so that none-else must suffer for the greater good&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apache [http://oozie.apache.org/ Oozie] is a workflow scheduler system to manage Apache Hadoop jobs.&lt;br /&gt;
&lt;br /&gt;
Oozie is a job scheduler with fancy features.  Most relevantly, jobs may be scheduled based on the existence of data in HDFS.  This allows jobs to be scheduled to be run not based only on a current timestamp, but for when the data needed to run a particular job is available.&lt;br /&gt;
&lt;br /&gt;
= Terms =&lt;br /&gt;
;action&lt;br /&gt;
:An action generally represents a single step in a job workflow.  Examples include pig scripts, failure notifications, map-reduce jobs, etc.&lt;br /&gt;
&lt;br /&gt;
;workflow&lt;br /&gt;
:Workflows are used to chain actions together.  A workflow is synonymous with a job.  Workflows describe how actions should run, and how actions should flow.  Actions can be chained based on success and failure conditions.&lt;br /&gt;
&lt;br /&gt;
;coordinator&lt;br /&gt;
:Coordinators are used to schedule recurring runs of workflows.  They can abstractly describe input and output datasets based on on periodicity.  Coordinators will submit workflow jobs based on the existence of data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= An Example =&lt;br /&gt;
For our simple example, we&#039;ll create a workflow that runs a Pig script, takes any number of files/directories as input, and saves its output to a file.  A second pig script that will take the output of the first as its input, and concatenate it all together in a single file.  We&#039;ll then learn to use a coordinator to hourly schedule this workflow based on the existence of input data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Actions ==&lt;br /&gt;
Our actions are just two Pig scripts.  It isn&#039;t important what they do, except that they take input and output files as CLI parameters.  Our example Pig scripts also take in an a regular expression, &#039;$hour_regex&#039; as a CLI parameter.  This allows us to filter out content that doesn&#039;t match the hour for which we want to generate statistics.&lt;br /&gt;
&lt;br /&gt;
This example was written while referring to [https://github.com/wikimedia/kraken/blob/master/pig/webrequest_loss_hourly.pig webrequest_loss_hourly.pig] and [https://github.com/wikimedia/kraken/blob/master/pig/concat_sort.pig concat_sort.pig].&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
We can define and parameterize a workflow before we start to schedule it for regular runs using a coordinator.&lt;br /&gt;
&lt;br /&gt;
A workflow is just a series of parameterized actions.  Parameters can be set on the Oozie CLI, in a .properties file, or by the coordinator XML file.&lt;br /&gt;
&lt;br /&gt;
In workflow.xml, first we name the workflow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;workflow-app name=&amp;quot;webrequest_loss_by_hour_workflow&amp;quot; xmlns=&amp;quot;uri:oozie:workflow:0.4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then we tell the workflow which action should be run first:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;start to=&amp;quot;webrequest_loss_by_hour_action&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
Now we define our actions and their flow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;action name=&amp;quot;webrequest_loss_by_hour_action&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;pig&amp;gt;&lt;br /&gt;
              &amp;lt;job-tracker&amp;gt;${jobTracker}&amp;lt;/job-tracker&amp;gt;&lt;br /&gt;
              &amp;lt;name-node&amp;gt;${nameNode}&amp;lt;/name-node&amp;gt;&lt;br /&gt;
              &amp;lt;script&amp;gt;/user/dummy/pig/webrequest_loss_hourly.pig&amp;lt;/script&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;-p&amp;lt;/argument&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;input=${INPUT}&amp;lt;/argument&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;-p&amp;lt;/argument&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;output=${OUTPUT}&amp;lt;/argument&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;-p&amp;lt;/argument&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;hour_regex=${HOUR_REGEX}&amp;lt;/argument&amp;gt;&lt;br /&gt;
          &amp;lt;/pig&amp;gt;&lt;br /&gt;
          &amp;lt;ok to=&amp;quot;concat&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;error to=&amp;quot;kill&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/action&amp;gt;&lt;br /&gt;
      &amp;lt;action name=&amp;quot;concat&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;pig&amp;gt;&lt;br /&gt;
              &amp;lt;job-tracker&amp;gt;${jobTracker}&amp;lt;/job-tracker&amp;gt;&lt;br /&gt;
              &amp;lt;name-node&amp;gt;${nameNode}&amp;lt;/name-node&amp;gt;&lt;br /&gt;
              &amp;lt;script&amp;gt;/libs/kraken/pig/concat_sort.pig&amp;lt;/script&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;-p&amp;lt;/argument&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;input=${CONCAT_INPUT}&amp;lt;/argument&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;-p&amp;lt;/argument&amp;gt;&lt;br /&gt;
              &amp;lt;argument&amp;gt;dest=${DEST}&amp;lt;/argument&amp;gt;&lt;br /&gt;
          &amp;lt;/pig&amp;gt;&lt;br /&gt;
          &amp;lt;ok to=&amp;quot;end&amp;quot;/&amp;gt;&lt;br /&gt;
          &amp;lt;error to=&amp;quot;kill&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/action&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the if the &amp;quot;webrequest_loss_by_hour_action&amp;quot; finishes with an &amp;quot;ok&amp;quot; status, the &amp;quot;concat&amp;quot; action will be run.&lt;br /&gt;
&lt;br /&gt;
And finally the end failure and success end conditions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;kill name=&amp;quot;kill&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;message&amp;gt;Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]&amp;lt;/message&amp;gt;&lt;br /&gt;
      &amp;lt;/kill&amp;gt;&lt;br /&gt;
      &amp;lt;end name=&amp;quot;end&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/workflow-app&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full file can be found [https://github.com/wikimedia/kraken/blob/master/oozie/webrequest_loss_by_hour/workflow.xml here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This workflow can be manually submitted via the Oozie CLI.  You&#039;ll need to create a job.properties file in which you set the parameterized values, as well as some properties that Oozie requires you to have to run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
oozie.wf.application.path=${nameNode}/user/dummy/oozie/webrequest_loss_by_hour&lt;br /&gt;
jobTracker=analytics1010.eqiad.wmnet:8032&lt;br /&gt;
nameNode=hdfs://analytics1010.eqiad.wmnet:8020&lt;br /&gt;
oozie.use.system.libpath=true&lt;br /&gt;
oozie.libpath=${nameNode}/user/oozie/share/lib/,${nameNode}/libs/,${nameNode}/user/dummy/pig&lt;br /&gt;
INPUT=hdfs://analytics1010.eqiad.wmnet:8020/path/to/input/2013-02-25_09.45,hdfs://analytics1010.eqiad.wmnet:8020/path/to/input/2013-02-25_10.00,hdfs://analytics1010.eqiad.wmnet:8020/path/to/input/2013-02-25_10.15,hdfs://analytics1010.eqiad.wmnet:8020/path/to/input/2013-02-25_10.30,hdfs://analytics1010.eqiad.wmnet:8020/path/to/input/2013-02-25_10.45,hdfs://analytics1010.eqiad.wmnet:8020/path/to/input/2013-02-25_11.00&lt;br /&gt;
OUTPUT=hdfs://analytics1010.eqiad.wmnet:8020/path/to/output/2013-02-25_10.00.00&lt;br /&gt;
HOUR_REGEX=2013-02-25_10&lt;br /&gt;
CONCAT_INPUT=hdfs://analytics1010.eqiad.wmnet:8020/path/to/output/2013-02-25_10.00.00&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The oozie.wf.application.path is important.  It tells Oozie where to find your workflow.xml definition.  You&#039;ll need to copy your workflow.xml file to this directory, and then use the above job.properties file to submit the workflow:&lt;br /&gt;
&lt;br /&gt;
Note also that oozie.libpath includes /user/dummy/pig.  If your Pig script imports any external Pig scripts, make sure that those external scripts are in HDFS and in the oozie.libpath.&lt;br /&gt;
&lt;br /&gt;
In this example job.propeties file, we are generating statistics for the 10:00 hour on February 25th.  Since our data is imported every 15 minutes, for each hour we will want to take 6 individual imports as our INPUT data.  For the 10:00 hour, that will be 09:45, 10:00, 10:15, 10:30, 10:45, and 11:00.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# upload the workflow.xml file to your oozie.wf.application.path&lt;br /&gt;
hadoop fs -put workflow.xml /user/dummy/oozie/webrequest_loss_by_hour/&lt;br /&gt;
# submit the job.properties file to oozie and start it (-run == -submit &amp;amp;&amp;amp; -start)&lt;br /&gt;
oozie job -oozie http://analytics1027.eqiad.wmnet:11000/oozie -run -config ./job.properties&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You can use the &amp;quot;-info&amp;quot; and other oozie commands to get information about the running job.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Coordinator ==&lt;br /&gt;
A coordinator is submitted to Oozie in the same way as a workflow, but defined differently.&lt;br /&gt;
&lt;br /&gt;
First we name our coordinator and specify how often we want it to run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;coordinator-app name=&amp;quot;webrequest_loss_by_hour&amp;quot;&lt;br /&gt;
  frequency=&amp;quot;${coord:hours(1)}&amp;quot;&lt;br /&gt;
  start=&amp;quot;2013-02-01T01:00Z&amp;quot; end=&amp;quot;2020-01-01T23:00Z&amp;quot; timezone=&amp;quot;Universal&amp;quot;&lt;br /&gt;
  xmlns=&amp;quot;uri:oozie:coordinator:0.1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Defining coordinator datasets and input events ===&lt;br /&gt;
Our example input data set is imported every 15 minutes.  This data is saved in directories that are named based on timestamp, but the data is not bucketed in these directories by the timestamps in the data content.  For example, we cannot guarantee that the data stored in a directory named 2013-02-25_10.15.00 contains only data for the 10:00 - 10:15 range.  It most likely will contain some few logs from minutes before or after.&lt;br /&gt;
&lt;br /&gt;
==== Datasets ====&lt;br /&gt;
The Oozie coordinator needs to know the path and import frequency of our input dataset, as well as when our dataset begins.  Note that the initial-instance attribute is not in the same format as the input directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;datasets&amp;gt;&lt;br /&gt;
    &amp;lt;dataset name=&amp;quot;webrequest-wikipedia-mobile&amp;quot; frequency=&amp;quot;${coord:minutes(15)}&amp;quot;&lt;br /&gt;
             initial-instance=&amp;quot;2013-02-01T00:00Z&amp;quot; timezone=&amp;quot;Universal&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;uri-template&amp;gt;hdfs://analytics1010.eqiad.wmnet:8020/path/to/input/${YEAR}-${MONTH}-${DAY}_${HOUR}.${MINUTE}.00&amp;lt;/uri-template&amp;gt;&lt;br /&gt;
      &amp;lt;done-flag&amp;gt;&amp;lt;/done-flag&amp;gt;&lt;br /&gt;
    &amp;lt;/dataset&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We also need to define our output dataset.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;dataset name=&amp;quot;webrequest_loss&amp;quot; frequency=&amp;quot;${coord:minutes(15)}&amp;quot;&lt;br /&gt;
             initial-instance=&amp;quot;2013-02-01T00:00Z&amp;quot; timezone=&amp;quot;Universal&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;uri-template&amp;gt;hdfs://analytics1010.eqiad.wmnet:8020/path/to/output/${YEAR}-${MONTH}-${DAY}_${HOUR}.${MINUTE}.00&amp;lt;/uri-template&amp;gt;&lt;br /&gt;
      &amp;lt;done-flag&amp;gt;&amp;lt;/done-flag&amp;gt;&lt;br /&gt;
    &amp;lt;/dataset&amp;gt;&lt;br /&gt;
  &amp;lt;/datasets&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: I&#039;m not sure that a frequency of 15 minutes is correct here.  We will be running this coordinator every hour, so defining this dataset with a frequency of 15 minutes is probably incorrect.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Input/Output Events ====&lt;br /&gt;
Now that we&#039;ve described how the data on disk looks, we can now define input and output events based on ranges of this data.&lt;br /&gt;
&lt;br /&gt;
The following defines the input event.  We tell it that this input event is made up of the webrequest-wikipedia-mobile dataset we defined above.  We also then give a range of data that belongs to to this input event.  current(0) will resolve to the current hour at which we are running.  For example, if the current hour is 11:00, we will want to look at the previous 6 data imports to generate statistics for the 10:00 hour.  So the start-instance is current - 5 (11:00 - 5 * 15 minute intervals == 09:45), and the end-instance is the current hour.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input-events&amp;gt;&lt;br /&gt;
    &amp;lt;data-in name=&amp;quot;INPUT&amp;quot; dataset=&amp;quot;webrequest-wikipedia-mobile&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;start-instance&amp;gt;${coord:current(-5)}&amp;lt;/start-instance&amp;gt;&lt;br /&gt;
      &amp;lt;end-instance&amp;gt;${coord:current(0)}&amp;lt;/end-instance&amp;gt;&lt;br /&gt;
    &amp;lt;/data-in&amp;gt;&lt;br /&gt;
  &amp;lt;/input-events&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We also define an output event so that the coordinator knows what each workflow run should output.  If the coordinator is scheduling a run at 11:00, then current(-4) will be 10:00, which will eventually be in the name of the output directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;output-events&amp;gt;&lt;br /&gt;
    &amp;lt;data-out name=&amp;quot;OUTPUT&amp;quot; dataset=&amp;quot;webrequest_loss&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;instance&amp;gt;${coord:current(-4)}&amp;lt;/instance&amp;gt;&lt;br /&gt;
    &amp;lt;/data-out&amp;gt;&lt;br /&gt;
  &amp;lt;/output-events&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, we need to tell the coordinator the workflow that it should submit for each run.   By setting app-path to ${wf_application_path}, we tell Oozie to look for workflow.xml in that directory (which we specify in a .properties file later).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;action&amp;gt;&lt;br /&gt;
    &amp;lt;workflow&amp;gt;&lt;br /&gt;
      &amp;lt;app-path&amp;gt;${wf_application_path}&amp;lt;/app-path&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now for the workflow configuration.  The workflow works with variable parameters based on which time period is being computed, so we need to set those based on named input and output events.  We also set HOUR_REGEX to the hour for which each run generates statistics to the current hour minus one our (11:00 - 1 == 10:00).  (Remember that this is a peculiarity/feature of our Pig script.)  CONCAT_INPUT is defined to be the whole of all output data, and DEST a single .tsv file that will contain all of the output data in a single file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configuration&amp;gt;&lt;br /&gt;
          &amp;lt;property&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;INPUT&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;value&amp;gt;${coord:dataIn(&#039;INPUT&#039;)}&amp;lt;/value&amp;gt;&lt;br /&gt;
          &amp;lt;/property&amp;gt;&lt;br /&gt;
        &amp;lt;property&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;OUTPUT&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;${coord:dataOut(&#039;OUTPUT&#039;)}&amp;lt;/value&amp;gt;&lt;br /&gt;
        &amp;lt;/property&amp;gt;&lt;br /&gt;
        &amp;lt;property&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;HOUR_REGEX&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, &#039;HOUR&#039;), &#039;yyyy-MM-dd_HH&#039;)}&amp;lt;/value&amp;gt;&lt;br /&gt;
        &amp;lt;/property&amp;gt;&lt;br /&gt;
        &amp;lt;property&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;CONCAT_INPUT&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;hdfs://analytics1010.eqiad.wmnet:8020/path/to/output&amp;lt;/value&amp;gt;&lt;br /&gt;
        &amp;lt;/property&amp;gt;&lt;br /&gt;
        &amp;lt;property&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;DEST&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;value&amp;gt;hdfs://analytics1010.eqiad.wmnet:8020/path/to/webrequest_loss_by_hour.tsv&amp;lt;/value&amp;gt;&lt;br /&gt;
        &amp;lt;/property&amp;gt;&lt;br /&gt;
      &amp;lt;/configuration&amp;gt;&lt;br /&gt;
   &amp;lt;/workflow&amp;gt;&lt;br /&gt;
  &amp;lt;/action&amp;gt;&lt;br /&gt;
&amp;lt;/coordinator-app&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we&#039;ve got our coordinator.xml file, we can copy it (and workflow.xml) to HDFS and create a coordinator.properties file to use for submission to Oozie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
oozie.coord.application.path=${nameNode}/user/dummy/oozie/webrequest_loss_by_hour&lt;br /&gt;
wf_application_path=${oozie.coord.application.path}&lt;br /&gt;
jobTracker=analytics1010.eqiad.wmnet:8032&lt;br /&gt;
nameNode=hdfs://analytics1010.eqiad.wmnet:8020&lt;br /&gt;
oozie.use.system.libpath=true&lt;br /&gt;
oozie.libpath=${nameNode}/user/oozie/share/lib/,${nameNode}/libs/,${nameNode}/user/dummy/pig&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# copy the .xml files to HDFS&lt;br /&gt;
hadoop fs -put coordinator.xml workflow.xml /user/dummy/oozie/webrequest_loss_by_hour/&lt;br /&gt;
# Submit the coordinator.  Oozie will submit and run worfklows based on input events.&lt;br /&gt;
oozie job -oozie http://analytics1027.eqiad.wmnet:11000/oozie -submit -config ./coordinator.properties&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Full versions of these .property and .xml files can be found at https://github.com/wikimedia/kraken/tree/master/oozie/webrequest_loss_by_hour.&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/ArchitectureReview&amp;diff=655117</id>
		<title>Analytics/Archive/Infrastructure/Meetings/ArchitectureReview</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/ArchitectureReview&amp;diff=655117"/>
		<updated>2013-03-04T18:22:37Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* Date: March 1, 2013 (2:30p - 3:30p)&lt;br /&gt;
* Present: Mark, Faidon, Tim, Ryan, Ori, Ryan, Robla, Kraig, Dan, David, Andrew, Diederik&lt;br /&gt;
* Slides: [https://upload.wikimedia.org/wikipedia/mediawiki/c/cb/Kraken_Arch_Review_Slides.pdf (pdf)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
* Project page: https://www.mediawiki.org/wiki/Analytics/Kraken&lt;br /&gt;
* Documentation:&lt;br /&gt;
** Overview: https://www.mediawiki.org/wiki/Analytics/Kraken/Overview&lt;br /&gt;
** Software Overview: https://www.mediawiki.org/wiki/Analytics/Kraken/Overview/Software&lt;br /&gt;
** Services and Ports: https://www.mediawiki.org/wiki/Analytics/Kraken/Ports&lt;br /&gt;
** Infrastructure / Hardware: https://www.mediawiki.org/wiki/Analytics/Kraken/Infrastructure&lt;br /&gt;
* Related:&lt;br /&gt;
** ACL Ticket: https://rt.wikimedia.org/Ticket/Display.html?id=4433&lt;br /&gt;
** Security Meeting Notes: https://www.mediawiki.org/wiki/Analytics/Kraken/Meetings/SecurityReview&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Meeting Notes =&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Cluster ==&lt;br /&gt;
&lt;br /&gt;
Our first goal is get to a &amp;quot;minimum viable&amp;quot; cluster setup.&lt;br /&gt;
To meet our stakeholder obligations, we&#039;ll need:&lt;br /&gt;
&lt;br /&gt;
* Unsampled storage of Mobile pageview requests as txt files&lt;br /&gt;
* Unsampled storage of EventLogging data as JSON or txt files&lt;br /&gt;
* Importing MediaWiki databases&lt;br /&gt;
* Ability to access raw datafiles by WMF employees&lt;br /&gt;
* Ability to query data using Pig, Hive, MapReduce, and Hadoop streaming&lt;br /&gt;
* Ability to schedule jobs and workflows (Oozie)&lt;br /&gt;
* Automated recovery of data importers (Zookeeper)&lt;br /&gt;
&lt;br /&gt;
Not part of MVC – deferring for later discussion:&lt;br /&gt;
* Realtime processing layer (Storm)&lt;br /&gt;
* Guaranteed delivery of web-request data (Kafka producers and future of udp2log) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dataflow Outline ==&lt;br /&gt;
&lt;br /&gt;
* Mark: Asher says mediawiki import cannot be part of MVC -- he said it can be done, but I don&#039;t have all the details. Maybe something about a &amp;quot;binlog API&amp;quot;?&lt;br /&gt;
* Faidon: This doesn&#039;t seem like a very efficient use of hardware...&lt;br /&gt;
** Yeah, totally not. It&#039;s an evolutionary deployment, but this is a description of how things stand today. The end goal (and scope) looks very different. This was a way to simulate a production setup (including Kafka on the edge) without making production changes. A &amp;quot;production setup&amp;quot; is not a near-term goal any more (as we&#039;ve scoped out ETL for now), so this looks a bit weird.&lt;br /&gt;
* Faidon: Rolling resetup/reimage means some number of machines should be detached from the current cluster for the process of reviewing and rebuilding off the mainline puppet&lt;br /&gt;
** Kraig: Yeah, but unfortunately the team has limited bandwidth to maintain and work on two cluster, two setups, and so on -- as well as meeting our deliverables.&lt;br /&gt;
** Faidon: Well, Ops should probably be contributing more time to this project.&lt;br /&gt;
** Otto: Also, if we&#039;re not perf testing, we can totally do most of this in labs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Analyst Access ==&lt;br /&gt;
&lt;br /&gt;
* Otto: Only people who currently need access are WMF employees who have shell access. But it&#039;s a bit onerous to access all the different services needed to administer the cluster or debug jobs (as they&#039;re on many different machines with many different ports) via a bunch of SSH tunnels.&lt;br /&gt;
** Mark: Okay, so let&#039;s deal with that by restricting access to shell accounts, and talk about the future.&lt;br /&gt;
* NN user issue: use kerberos for inter-node auth, or iptables on NN to protect data comm ports. Ops will def help in making that happen ASAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Privacy &amp;amp; Anonymization ==&lt;br /&gt;
&lt;br /&gt;
* Everyone agrees this privacy &amp;amp; anonymization is a critical requirement, and it needs to happen as part of the Base Cluster.&lt;br /&gt;
* Hash(IP+Salt) is the standard; definitely need to rotate the salt regularly, not keep records, etc.&lt;br /&gt;
** (Note: The salt will need to live in ZK to be accessible and consistent across processing nodes, but mark the key it as volatile so it isn&#039;t persisted anywhere.)&lt;br /&gt;
&lt;br /&gt;
* Tim: Currently, we keep 3 months of IPs in checkuser; if we keep IPs around for longer than that, it would be problematic.&lt;br /&gt;
* Mark: Performing anonymization on the edge is feasible, and probably preferable for a bunch of reasons -- especially from ESAMS. We should look into this.&lt;br /&gt;
** Might also be able to do it in MediaWiki, but that wouldn&#039;t touch all traffic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Followups ==&lt;br /&gt;
&lt;br /&gt;
=== Kafka Contractor ===&lt;br /&gt;
&lt;br /&gt;
[http://edenhill.se/ Magnus Edenhill], who wrote the [https://github.com/edenhill/librdkafka librdkafka], the major C library for the Kafka protocol with both producer and consumer support. Patrick reached out to him; he quoted us a super, incredibly reasonable price for:&lt;br /&gt;
&lt;br /&gt;
* varnishncsa logging module&lt;br /&gt;
* Zookeeper support&lt;br /&gt;
* Offered to add 0.8 protocol support pro-bono&lt;br /&gt;
&lt;br /&gt;
To decide if we want to go forward with this work, we need to decide whether there&#039;s any meaningful interest in replacing udp2log, especially as Analytics doesn&#039;t have the time or bandwidth to manage this guy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
&lt;br /&gt;
* Cost is low, and benefit is huge&lt;br /&gt;
* Could use LVS to loadbalance the TCP connections&lt;br /&gt;
** Would be lumpy, as connections are long-lived, and it wouldn&#039;t be balancing on bytes&lt;br /&gt;
** Would make ZK support unnecessary&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
&lt;br /&gt;
* Definitely followup with the dude&lt;br /&gt;
* Ops (Mark) will manage/review the work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Minimal Viable Cluster ===&lt;br /&gt;
&lt;br /&gt;
Immediate work:&lt;br /&gt;
&lt;br /&gt;
* Network ACL (Ops)&lt;br /&gt;
* Set up iptables on the NN to only whitelist cluster nodes on the data ports (Otto)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Initial Base Cluster ===&lt;br /&gt;
&lt;br /&gt;
At what point should the cutover happen between the MVC (current running cluster), and the newly built Base Cluster? That is: When do we cut over the data import stream?&lt;br /&gt;
&lt;br /&gt;
* Puppetization of all components, Op Friendship&lt;br /&gt;
* Security is satisfactory&lt;br /&gt;
* Anonymization of IPs&lt;br /&gt;
&lt;br /&gt;
Who on Ops is going to be involved in setting this up and reviewing it? Volunteers:&lt;br /&gt;
* Mark, Faidon, possibly others&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusions &amp;amp; Next Steps ==&lt;br /&gt;
&lt;br /&gt;
* Keep current cluster running as-is&lt;br /&gt;
* Continue puppet work on Initial Base Cluster&lt;br /&gt;
** Find machines: either pull out ~5 datanodes, or do it in labs (prefer labs)&lt;br /&gt;
** Start building new cluster&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/ArchitectureReview&amp;diff=655116</id>
		<title>Analytics/Archive/Infrastructure/Meetings/ArchitectureReview</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/ArchitectureReview&amp;diff=655116"/>
		<updated>2013-03-04T18:21:57Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Slides.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* Date: March 1, 2013 (2:30p - 3:30p)&lt;br /&gt;
* Present: Mark, Faidon, Tim, Ryan, Ori, Ryan, Robla, Kraig, Dan, David, Andrew, Diederik&lt;br /&gt;
* Slides: [[File:Kraken_Arch_Review_Slides.pdf|(pdf)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
* Project page: https://www.mediawiki.org/wiki/Analytics/Kraken&lt;br /&gt;
* Documentation:&lt;br /&gt;
** Overview: https://www.mediawiki.org/wiki/Analytics/Kraken/Overview&lt;br /&gt;
** Software Overview: https://www.mediawiki.org/wiki/Analytics/Kraken/Overview/Software&lt;br /&gt;
** Services and Ports: https://www.mediawiki.org/wiki/Analytics/Kraken/Ports&lt;br /&gt;
** Infrastructure / Hardware: https://www.mediawiki.org/wiki/Analytics/Kraken/Infrastructure&lt;br /&gt;
* Related:&lt;br /&gt;
** ACL Ticket: https://rt.wikimedia.org/Ticket/Display.html?id=4433&lt;br /&gt;
** Security Meeting Notes: https://www.mediawiki.org/wiki/Analytics/Kraken/Meetings/SecurityReview&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Meeting Notes =&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Cluster ==&lt;br /&gt;
&lt;br /&gt;
Our first goal is get to a &amp;quot;minimum viable&amp;quot; cluster setup.&lt;br /&gt;
To meet our stakeholder obligations, we&#039;ll need:&lt;br /&gt;
&lt;br /&gt;
* Unsampled storage of Mobile pageview requests as txt files&lt;br /&gt;
* Unsampled storage of EventLogging data as JSON or txt files&lt;br /&gt;
* Importing MediaWiki databases&lt;br /&gt;
* Ability to access raw datafiles by WMF employees&lt;br /&gt;
* Ability to query data using Pig, Hive, MapReduce, and Hadoop streaming&lt;br /&gt;
* Ability to schedule jobs and workflows (Oozie)&lt;br /&gt;
* Automated recovery of data importers (Zookeeper)&lt;br /&gt;
&lt;br /&gt;
Not part of MVC – deferring for later discussion:&lt;br /&gt;
* Realtime processing layer (Storm)&lt;br /&gt;
* Guaranteed delivery of web-request data (Kafka producers and future of udp2log) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dataflow Outline ==&lt;br /&gt;
&lt;br /&gt;
* Mark: Asher says mediawiki import cannot be part of MVC -- he said it can be done, but I don&#039;t have all the details. Maybe something about a &amp;quot;binlog API&amp;quot;?&lt;br /&gt;
* Faidon: This doesn&#039;t seem like a very efficient use of hardware...&lt;br /&gt;
** Yeah, totally not. It&#039;s an evolutionary deployment, but this is a description of how things stand today. The end goal (and scope) looks very different. This was a way to simulate a production setup (including Kafka on the edge) without making production changes. A &amp;quot;production setup&amp;quot; is not a near-term goal any more (as we&#039;ve scoped out ETL for now), so this looks a bit weird.&lt;br /&gt;
* Faidon: Rolling resetup/reimage means some number of machines should be detached from the current cluster for the process of reviewing and rebuilding off the mainline puppet&lt;br /&gt;
** Kraig: Yeah, but unfortunately the team has limited bandwidth to maintain and work on two cluster, two setups, and so on -- as well as meeting our deliverables.&lt;br /&gt;
** Faidon: Well, Ops should probably be contributing more time to this project.&lt;br /&gt;
** Otto: Also, if we&#039;re not perf testing, we can totally do most of this in labs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Analyst Access ==&lt;br /&gt;
&lt;br /&gt;
* Otto: Only people who currently need access are WMF employees who have shell access. But it&#039;s a bit onerous to access all the different services needed to administer the cluster or debug jobs (as they&#039;re on many different machines with many different ports) via a bunch of SSH tunnels.&lt;br /&gt;
** Mark: Okay, so let&#039;s deal with that by restricting access to shell accounts, and talk about the future.&lt;br /&gt;
* NN user issue: use kerberos for inter-node auth, or iptables on NN to protect data comm ports. Ops will def help in making that happen ASAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Privacy &amp;amp; Anonymization ==&lt;br /&gt;
&lt;br /&gt;
* Everyone agrees this privacy &amp;amp; anonymization is a critical requirement, and it needs to happen as part of the Base Cluster.&lt;br /&gt;
* Hash(IP+Salt) is the standard; definitely need to rotate the salt regularly, not keep records, etc.&lt;br /&gt;
** (Note: The salt will need to live in ZK to be accessible and consistent across processing nodes, but mark the key it as volatile so it isn&#039;t persisted anywhere.)&lt;br /&gt;
&lt;br /&gt;
* Tim: Currently, we keep 3 months of IPs in checkuser; if we keep IPs around for longer than that, it would be problematic.&lt;br /&gt;
* Mark: Performing anonymization on the edge is feasible, and probably preferable for a bunch of reasons -- especially from ESAMS. We should look into this.&lt;br /&gt;
** Might also be able to do it in MediaWiki, but that wouldn&#039;t touch all traffic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Followups ==&lt;br /&gt;
&lt;br /&gt;
=== Kafka Contractor ===&lt;br /&gt;
&lt;br /&gt;
[http://edenhill.se/ Magnus Edenhill], who wrote the [https://github.com/edenhill/librdkafka librdkafka], the major C library for the Kafka protocol with both producer and consumer support. Patrick reached out to him; he quoted us a super, incredibly reasonable price for:&lt;br /&gt;
&lt;br /&gt;
* varnishncsa logging module&lt;br /&gt;
* Zookeeper support&lt;br /&gt;
* Offered to add 0.8 protocol support pro-bono&lt;br /&gt;
&lt;br /&gt;
To decide if we want to go forward with this work, we need to decide whether there&#039;s any meaningful interest in replacing udp2log, especially as Analytics doesn&#039;t have the time or bandwidth to manage this guy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
&lt;br /&gt;
* Cost is low, and benefit is huge&lt;br /&gt;
* Could use LVS to loadbalance the TCP connections&lt;br /&gt;
** Would be lumpy, as connections are long-lived, and it wouldn&#039;t be balancing on bytes&lt;br /&gt;
** Would make ZK support unnecessary&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
&lt;br /&gt;
* Definitely followup with the dude&lt;br /&gt;
* Ops (Mark) will manage/review the work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Minimal Viable Cluster ===&lt;br /&gt;
&lt;br /&gt;
Immediate work:&lt;br /&gt;
&lt;br /&gt;
* Network ACL (Ops)&lt;br /&gt;
* Set up iptables on the NN to only whitelist cluster nodes on the data ports (Otto)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Initial Base Cluster ===&lt;br /&gt;
&lt;br /&gt;
At what point should the cutover happen between the MVC (current running cluster), and the newly built Base Cluster? That is: When do we cut over the data import stream?&lt;br /&gt;
&lt;br /&gt;
* Puppetization of all components, Op Friendship&lt;br /&gt;
* Security is satisfactory&lt;br /&gt;
* Anonymization of IPs&lt;br /&gt;
&lt;br /&gt;
Who on Ops is going to be involved in setting this up and reviewing it? Volunteers:&lt;br /&gt;
* Mark, Faidon, possibly others&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusions &amp;amp; Next Steps ==&lt;br /&gt;
&lt;br /&gt;
* Keep current cluster running as-is&lt;br /&gt;
* Continue puppet work on Initial Base Cluster&lt;br /&gt;
** Find machines: either pull out ~5 datanodes, or do it in labs (prefer labs)&lt;br /&gt;
** Start building new cluster&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=File:Kraken_Arch_Review_Slides.pdf&amp;diff=655113</id>
		<title>File:Kraken Arch Review Slides.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=File:Kraken_Arch_Review_Slides.pdf&amp;diff=655113"/>
		<updated>2013-03-04T18:16:09Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Slides from the Kraken Arch Review meeting. 

== Licensing ==
{{PD-self|Diederik van Liere}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Slides from the [[Analytics/Kraken/Meetings/ArchitectureReview|Kraken Arch Review meeting]]. &lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
{{PD-self|Diederik van Liere}}&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings&amp;diff=654642</id>
		<title>Analytics/Roadmap/PlanningMeetings</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings&amp;diff=654642"/>
		<updated>2013-03-03T02:49:23Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Meeting notes for Team Analytics planning.&lt;br /&gt;
&lt;br /&gt;
= 2012 =&lt;br /&gt;
&lt;br /&gt;
* (Sept 20) [[Analytics/Roadmap/PlanningMeetings/2012_Sept_20|Autumnal Planning]] - Data Release Process; Sept-Oct Milestone Planning&lt;br /&gt;
* (Dec 12) [[Analytics/Roadmap/PlanningMeetings/2012_Q2_Quarterly_Review|Q2 Quarterly Review]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2013 =&lt;br /&gt;
&lt;br /&gt;
* (2013) [[Analytics/Roadmap/PlanningMeetings/2013_Scrum|Daily Scrum Notes]]&lt;br /&gt;
* (Feb 12) [[Analytics/Kraken/Security Review Meeting|Kraken Security Review]]&lt;br /&gt;
* (Feb 27) [[Analytics/Roadmap/PlanningMeetings/2013_02_27_Reflection|Weekly Reflection]]&lt;br /&gt;
* (Mar 1) [[Analytics/Kraken/Meetings/ArchitectureReview|Kraken Architecture Review]]&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=654640</id>
		<title>Analytics/Kraken</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=654640"/>
		<updated>2013-03-03T02:46:46Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wikimedia engineering project information&lt;br /&gt;
| name        = Kraken (Analytics Cluster)&lt;br /&gt;
| description = A robust, distributed computing and data services platform.&lt;br /&gt;
| start       = 2011-05-22&lt;br /&gt;
| end         = &lt;br /&gt;
| group       = Analytics&lt;br /&gt;
| lead        = &lt;br /&gt;
| team        = [[User:Ottomata|Andrew Otto]], [[User:Dsc|David Schoonover]], [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
| previous    = &lt;br /&gt;
| next        = &lt;br /&gt;
| projectpage = Analytics/Kraken&lt;br /&gt;
| display     = {{{display|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Kraken is the code-name for the robust distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
= [[{{FULLPAGENAME}}/status|Status]] =&lt;br /&gt;
&lt;br /&gt;
{{Wikimedia project status line|{{FULLPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
= Rationale =&lt;br /&gt;
&lt;br /&gt;
The Wiki Movement has a chronic need for analytics. We need it to understand our editors, to encourage growth, to engender diversity, to focus our resources, to improve our engineering efforts, and to measure our success. It permeates nearly all our goals, yet our current analytics capabilities are underdeveloped: we lack infrastructure to capture editor, visitor, clickstream, and device data in a way that is easily accessible; our efforts are distributed among different departments; our data is fragmented over different systems and databases; our tools are ad-hoc.&lt;br /&gt;
&lt;br /&gt;
Rather than merely improve existing jobs and data pipelines, the Analytics Team aims to construct a Data Services Platform capable of mining intelligence from all datastreams of interest, providing this insight in real time, and exposing it via an API to power applications, mash up into websites, and stream to devices.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Access|Getting Access]]&lt;br /&gt;
* [[Analytics/Kraken/Overview|Overview]]&lt;br /&gt;
** [[Analytics/Kraken/Overview/Software|Software Overview]]&lt;br /&gt;
** [http://upload.wikimedia.org/wikipedia/mediawiki/1/1b/Kraken_flow_diagram-2.png Cluster Dataflow Diagram]&lt;br /&gt;
* &#039;&#039;&#039;Data&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Streams|Data Streams]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Blurbs|Blurbs About Kraken]]&lt;br /&gt;
** [https://docs.google.com/a/wikimedia.org/spreadsheet/ccc?key=0AvpRkIqSY9hNdEtRLVNoQWNvQzNleHBtTXR5emI3Z2c&amp;amp;pli=1#gid=5 Kraken Benchmarks]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsHadoopSetupNotes Hadoop Setup Notes]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsKrakenTestClusterSetup Test Cluster Setup Notes]&lt;br /&gt;
* &#039;&#039;&#039;[[Analytics/Kraken/Meetings|Meeting Notes]]&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Meetings/SecurityReview|Security Review Meeting]]&lt;br /&gt;
** [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Pixel_Service|Pixel Service]] and [[Analytics/Kraken/Request_Logging|Request Logging]] ==&lt;br /&gt;
&lt;br /&gt;
Public data import endpoint, and system for capturing the incoming firehose from our front-end servers.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
** [[Analytics/Kraken/Request_Logging|System Recommendation]]&lt;br /&gt;
** [[Analytics/Kraken/Logging_Solutions_Overview|Distributed Logging Systems Research]]&lt;br /&gt;
** [https://docs.google.com/spreadsheet/pub?key=0AvpRkIqSY9hNdFNoYWFIX29hMnFuenV1ckRvYzEzUVE&amp;amp;gid=3 Feature Comparison Spreadsheet]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Work with Ori, Patrick, &amp;amp; ops to figure out Kafka producer situation for production [otto, dsc, ori, preilly, ops]&lt;br /&gt;
* MediaWiki EventLogging integration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/ETL|ETL Topology]] ==&lt;br /&gt;
&lt;br /&gt;
The [http://storm-project.net Storm] topology that processes incoming data (aka, &amp;quot;Extract-Transform-Load&amp;quot; in data warehousing jargon).&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/ETL|ETL Topology]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Maven + Nexus setup w/ storm pom [dsc]&lt;br /&gt;
* Storm Bolts:&lt;br /&gt;
** Consume from Kafka (by topic?)&lt;br /&gt;
** Serialize &amp;amp; canonicalize record using Avro schema&lt;br /&gt;
** GeoIP annotation&lt;br /&gt;
** Mobile carrier annotation (by IP)&lt;br /&gt;
** IP anonymization (where does the salt live? how often should we change it?)&lt;br /&gt;
** Append record to per-hour files in HDFS (path using timestamp, topic)&lt;br /&gt;
** Notifier Bolt to update Kafka consumer checkpoint (and/or publish event for external hooks)&lt;br /&gt;
* Define Avro schemas:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
*** Figure out convention for EventData packets to self-identify with a more specific schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Core_Jobs|Core Jobs]] ==&lt;br /&gt;
&lt;br /&gt;
Core data processing jobs for processing web requests and event data, maintained by the Analytics team.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Figure out request tagging -- how can we avoid mutating records?&lt;br /&gt;
* Reportcard Oozie workflow [DvL]&lt;br /&gt;
** Pig Macro for &amp;quot;typical request analytics&amp;quot;&lt;br /&gt;
* Figure out indexing scheme:&lt;br /&gt;
** Aggregated time buckets&lt;br /&gt;
** Referrer chains&lt;br /&gt;
** Event aggregations&lt;br /&gt;
** Funnel Analysis&lt;br /&gt;
*** A/B testing event data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Data_Tools|Data Tools]] ==&lt;br /&gt;
&lt;br /&gt;
Data processing library and toolkit provided &amp;amp; maintained by the Analytics team, esp for use with Kraken.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Setup regular sqoop imports [DvL]&lt;br /&gt;
* Avro De/Serialization storage format compatibility:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
* Build re-usable pig/hive library, outsource this to analysts as much as possible [DvL]&lt;br /&gt;
* KV-Pairs parsing tools&lt;br /&gt;
* Conversion funnel analysis tools&lt;br /&gt;
** A/B testing analysis tools&lt;br /&gt;
* MW EventLogging extension integration&lt;br /&gt;
* Investigate Ori&#039;s Mediawiki extension for instrumentation, sending event/edit data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Infrastructure|Infrastructure]] ==&lt;br /&gt;
&lt;br /&gt;
Bucket for general cluster infrastructure and maintenance tasks.&lt;br /&gt;
* [[Analytics/Kraken/Puppet|Kraken Puppetization]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Ports|JMX Ports]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Monitoring|JMX Monitoring Research]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeting Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Meetings/SecurityReview|Security Review Meeting]]&lt;br /&gt;
* [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fix the one busted Cisco machine (an07) [otto]&lt;br /&gt;
* Continue puppetization [otto]&lt;br /&gt;
* JMX Monitoring [otto, dsc]&lt;br /&gt;
* Investigate / experiment / benchmark Hadoop stack [DvL]&lt;br /&gt;
* Data owner services -- export, dashboard, visualizations (on Hue?) [dsc, dan]&lt;br /&gt;
** Hue plugin for Limn integration? [dsc]&lt;br /&gt;
* Get analysts experimenting with Hive/Pig [DvL]&lt;br /&gt;
* General purpose job-runner using Kafka+Storm&lt;br /&gt;
* Setup Hadoop FairScheduler [DvL]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Research =&lt;br /&gt;
&lt;br /&gt;
== Bundling ==&lt;br /&gt;
&lt;br /&gt;
Investigate size of savings of structure sharing via a short-term (between 1-30sec window) queue.&lt;br /&gt;
&lt;br /&gt;
* Reorder within window by timestamp? Seq number?&lt;br /&gt;
* Parameters of experiment:&lt;br /&gt;
** Buffer time: 1s, 2s, 5s, 10s&lt;br /&gt;
** Sharded by server&lt;br /&gt;
** Bundle by IP, UA, IP+UA&lt;br /&gt;
* Pull-up fields for structure sharing: &lt;br /&gt;
** Invariant: ip, ua, accept-lang, carrier&lt;br /&gt;
** Often invariant: method, status, referer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Hbase&lt;br /&gt;
* Hive&lt;br /&gt;
* Hue plugins&lt;br /&gt;
* Cascading -- do we even need this as we have Oozie?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
[[Category:WMF Projects/Analytics]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=654639</id>
		<title>Analytics/Kraken</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=654639"/>
		<updated>2013-03-03T02:46:16Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wikimedia engineering project information&lt;br /&gt;
| name        = Kraken (Analytics Cluster)&lt;br /&gt;
| description = A robust, distributed computing and data services platform.&lt;br /&gt;
| start       = 2011-05-22&lt;br /&gt;
| end         = &lt;br /&gt;
| group       = Analytics&lt;br /&gt;
| lead        = &lt;br /&gt;
| team        = [[User:Ottomata|Andrew Otto]], [[User:Dsc|David Schoonover]], [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
| previous    = &lt;br /&gt;
| next        = &lt;br /&gt;
| projectpage = Analytics/Kraken&lt;br /&gt;
| display     = {{{display|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Kraken is the code-name for the robust distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
= [[{{FULLPAGENAME}}/status|Status]] =&lt;br /&gt;
&lt;br /&gt;
{{Wikimedia project status line|{{FULLPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
= Rationale =&lt;br /&gt;
&lt;br /&gt;
The Wiki Movement has a chronic need for analytics. We need it to understand our editors, to encourage growth, to engender diversity, to focus our resources, to improve our engineering efforts, and to measure our success. It permeates nearly all our goals, yet our current analytics capabilities are underdeveloped: we lack infrastructure to capture editor, visitor, clickstream, and device data in a way that is easily accessible; our efforts are distributed among different departments; our data is fragmented over different systems and databases; our tools are ad-hoc.&lt;br /&gt;
&lt;br /&gt;
Rather than merely improve existing jobs and data pipelines, the Analytics Team aims to construct a Data Services Platform capable of mining intelligence from all datastreams of interest, providing this insight in real time, and exposing it via an API to power applications, mash up into websites, and stream to devices.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Access|Getting Access]]&lt;br /&gt;
* [[Analytics/Kraken/Overview|Overview]]&lt;br /&gt;
** [[Analytics/Kraken/Overview/Software|Software Overview]]&lt;br /&gt;
** [http://upload.wikimedia.org/wikipedia/mediawiki/1/1b/Kraken_flow_diagram-2.png Cluster Dataflow Diagram]&lt;br /&gt;
* &#039;&#039;&#039;Data&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Streams|Data Streams]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Blurbs|Blurbs About Kraken]]&lt;br /&gt;
** [https://docs.google.com/a/wikimedia.org/spreadsheet/ccc?key=0AvpRkIqSY9hNdEtRLVNoQWNvQzNleHBtTXR5emI3Z2c&amp;amp;pli=1#gid=5 Kraken Benchmarks]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsHadoopSetupNotes Hadoop Setup Notes]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsKrakenTestClusterSetup Test Cluster Setup Notes]&lt;br /&gt;
* &#039;&#039;&#039;[[Analytics/Kraken/Meetings|Meeting Notes]]&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Meetings/SecurityReview|Security Review Meeting]]&lt;br /&gt;
** [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Pixel_Service|Pixel Service]] and [[Analytics/Kraken/Request_Logging|Request Logging]] ==&lt;br /&gt;
&lt;br /&gt;
Public data import endpoint, and system for capturing the incoming firehose from our front-end servers.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
** [[Analytics/Kraken/Request_Logging|System Recommendation]]&lt;br /&gt;
** [[Analytics/Kraken/Logging_Solutions_Overview|Distributed Logging Systems Research]]&lt;br /&gt;
** [https://docs.google.com/spreadsheet/pub?key=0AvpRkIqSY9hNdFNoYWFIX29hMnFuenV1ckRvYzEzUVE&amp;amp;gid=3 Feature Comparison Spreadsheet]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Work with Ori, Patrick, &amp;amp; ops to figure out Kafka producer situation for production [otto, dsc, ori, preilly, ops]&lt;br /&gt;
* MediaWiki EventLogging integration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/ETL|ETL Topology]] ==&lt;br /&gt;
&lt;br /&gt;
The [http://storm-project.net Storm] topology that processes incoming data (aka, &amp;quot;Extract-Transform-Load&amp;quot; in data warehousing jargon).&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/ETL|ETL Topology]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Maven + Nexus setup w/ storm pom [dsc]&lt;br /&gt;
* Storm Bolts:&lt;br /&gt;
** Consume from Kafka (by topic?)&lt;br /&gt;
** Serialize &amp;amp; canonicalize record using Avro schema&lt;br /&gt;
** GeoIP annotation&lt;br /&gt;
** Mobile carrier annotation (by IP)&lt;br /&gt;
** IP anonymization (where does the salt live? how often should we change it?)&lt;br /&gt;
** Append record to per-hour files in HDFS (path using timestamp, topic)&lt;br /&gt;
** Notifier Bolt to update Kafka consumer checkpoint (and/or publish event for external hooks)&lt;br /&gt;
* Define Avro schemas:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
*** Figure out convention for EventData packets to self-identify with a more specific schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Core_Jobs|Core Jobs]] ==&lt;br /&gt;
&lt;br /&gt;
Core data processing jobs for processing web requests and event data, maintained by the Analytics team.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Figure out request tagging -- how can we avoid mutating records?&lt;br /&gt;
* Reportcard Oozie workflow [DvL]&lt;br /&gt;
** Pig Macro for &amp;quot;typical request analytics&amp;quot;&lt;br /&gt;
* Figure out indexing scheme:&lt;br /&gt;
** Aggregated time buckets&lt;br /&gt;
** Referrer chains&lt;br /&gt;
** Event aggregations&lt;br /&gt;
** Funnel Analysis&lt;br /&gt;
*** A/B testing event data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Data_Tools|Data Tools]] ==&lt;br /&gt;
&lt;br /&gt;
Data processing library and toolkit provided &amp;amp; maintained by the Analytics team, esp for use with Kraken.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Setup regular sqoop imports [DvL]&lt;br /&gt;
* Avro De/Serialization storage format compatibility:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
* Build re-usable pig/hive library, outsource this to analysts as much as possible [DvL]&lt;br /&gt;
* KV-Pairs parsing tools&lt;br /&gt;
* Conversion funnel analysis tools&lt;br /&gt;
** A/B testing analysis tools&lt;br /&gt;
* MW EventLogging extension integration&lt;br /&gt;
* Investigate Ori&#039;s Mediawiki extension for instrumentation, sending event/edit data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Infrastructure|Infrastructure]] ==&lt;br /&gt;
&lt;br /&gt;
Bucket for general cluster infrastructure and maintenance tasks.&lt;br /&gt;
* [[Analytics/Kraken/Puppet|Kraken Puppetization]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Ports|JMX Ports]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Monitoring|JMX Monitoring Research]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeting Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Meetings/Security_Review_Meeting|Security Review Meeting]]&lt;br /&gt;
* [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fix the one busted Cisco machine (an07) [otto]&lt;br /&gt;
* Continue puppetization [otto]&lt;br /&gt;
* JMX Monitoring [otto, dsc]&lt;br /&gt;
* Investigate / experiment / benchmark Hadoop stack [DvL]&lt;br /&gt;
* Data owner services -- export, dashboard, visualizations (on Hue?) [dsc, dan]&lt;br /&gt;
** Hue plugin for Limn integration? [dsc]&lt;br /&gt;
* Get analysts experimenting with Hive/Pig [DvL]&lt;br /&gt;
* General purpose job-runner using Kafka+Storm&lt;br /&gt;
* Setup Hadoop FairScheduler [DvL]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Research =&lt;br /&gt;
&lt;br /&gt;
== Bundling ==&lt;br /&gt;
&lt;br /&gt;
Investigate size of savings of structure sharing via a short-term (between 1-30sec window) queue.&lt;br /&gt;
&lt;br /&gt;
* Reorder within window by timestamp? Seq number?&lt;br /&gt;
* Parameters of experiment:&lt;br /&gt;
** Buffer time: 1s, 2s, 5s, 10s&lt;br /&gt;
** Sharded by server&lt;br /&gt;
** Bundle by IP, UA, IP+UA&lt;br /&gt;
* Pull-up fields for structure sharing: &lt;br /&gt;
** Invariant: ip, ua, accept-lang, carrier&lt;br /&gt;
** Often invariant: method, status, referer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Hbase&lt;br /&gt;
* Hive&lt;br /&gt;
* Hue plugins&lt;br /&gt;
* Cascading -- do we even need this as we have Oozie?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
[[Category:WMF Projects/Analytics]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/ArchitectureReview&amp;diff=654638</id>
		<title>Analytics/Archive/Infrastructure/Meetings/ArchitectureReview</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/ArchitectureReview&amp;diff=654638"/>
		<updated>2013-03-03T02:45:33Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Created page with &amp;quot; * Date: March 1, 2013 (2:30p - 3:30p) * Present: Mark, Faidon, Tim, Ryan, Ori, Ryan, Robla, Kraig, Dan, David, Andrew, Diederik * Slides: XXX   == Background ==  * Project pa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* Date: March 1, 2013 (2:30p - 3:30p)&lt;br /&gt;
* Present: Mark, Faidon, Tim, Ryan, Ori, Ryan, Robla, Kraig, Dan, David, Andrew, Diederik&lt;br /&gt;
* Slides: XXX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
* Project page: https://www.mediawiki.org/wiki/Analytics/Kraken&lt;br /&gt;
* Documentation:&lt;br /&gt;
** Overview: https://www.mediawiki.org/wiki/Analytics/Kraken/Overview&lt;br /&gt;
** Software Overview: https://www.mediawiki.org/wiki/Analytics/Kraken/Overview/Software&lt;br /&gt;
** Services and Ports: https://www.mediawiki.org/wiki/Analytics/Kraken/Ports&lt;br /&gt;
** Infrastructure / Hardware: https://www.mediawiki.org/wiki/Analytics/Kraken/Infrastructure&lt;br /&gt;
* Related:&lt;br /&gt;
** ACL Ticket: https://rt.wikimedia.org/Ticket/Display.html?id=4433&lt;br /&gt;
** Security Meeting Notes: https://www.mediawiki.org/wiki/Analytics/Kraken/Meetings/SecurityReview&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Meeting Notes =&lt;br /&gt;
&lt;br /&gt;
== Minimum Viable Cluster ==&lt;br /&gt;
&lt;br /&gt;
Our first goal is get to a &amp;quot;minimum viable&amp;quot; cluster setup.&lt;br /&gt;
To meet our stakeholder obligations, we&#039;ll need:&lt;br /&gt;
&lt;br /&gt;
* Unsampled storage of Mobile pageview requests as txt files&lt;br /&gt;
* Unsampled storage of EventLogging data as JSON or txt files&lt;br /&gt;
* Importing MediaWiki databases&lt;br /&gt;
* Ability to access raw datafiles by WMF employees&lt;br /&gt;
* Ability to query data using Pig, Hive, MapReduce, and Hadoop streaming&lt;br /&gt;
* Ability to schedule jobs and workflows (Oozie)&lt;br /&gt;
* Automated recovery of data importers (Zookeeper)&lt;br /&gt;
&lt;br /&gt;
Not part of MVC – deferring for later discussion:&lt;br /&gt;
* Realtime processing layer (Storm)&lt;br /&gt;
* Guaranteed delivery of web-request data (Kafka producers and future of udp2log) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dataflow Outline ==&lt;br /&gt;
&lt;br /&gt;
* Mark: Asher says mediawiki import cannot be part of MVC -- he said it can be done, but I don&#039;t have all the details. Maybe something about a &amp;quot;binlog API&amp;quot;?&lt;br /&gt;
* Faidon: This doesn&#039;t seem like a very efficient use of hardware...&lt;br /&gt;
** Yeah, totally not. It&#039;s an evolutionary deployment, but this is a description of how things stand today. The end goal (and scope) looks very different. This was a way to simulate a production setup (including Kafka on the edge) without making production changes. A &amp;quot;production setup&amp;quot; is not a near-term goal any more (as we&#039;ve scoped out ETL for now), so this looks a bit weird.&lt;br /&gt;
* Faidon: Rolling resetup/reimage means some number of machines should be detached from the current cluster for the process of reviewing and rebuilding off the mainline puppet&lt;br /&gt;
** Kraig: Yeah, but unfortunately the team has limited bandwidth to maintain and work on two cluster, two setups, and so on -- as well as meeting our deliverables.&lt;br /&gt;
** Faidon: Well, Ops should probably be contributing more time to this project.&lt;br /&gt;
** Otto: Also, if we&#039;re not perf testing, we can totally do most of this in labs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Analyst Access ==&lt;br /&gt;
&lt;br /&gt;
* Otto: Only people who currently need access are WMF employees who have shell access. But it&#039;s a bit onerous to access all the different services needed to administer the cluster or debug jobs (as they&#039;re on many different machines with many different ports) via a bunch of SSH tunnels.&lt;br /&gt;
** Mark: Okay, so let&#039;s deal with that by restricting access to shell accounts, and talk about the future.&lt;br /&gt;
* NN user issue: use kerberos for inter-node auth, or iptables on NN to protect data comm ports. Ops will def help in making that happen ASAP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Privacy &amp;amp; Anonymization ==&lt;br /&gt;
&lt;br /&gt;
* Everyone agrees this privacy &amp;amp; anonymization is a critical requirement, and it needs to happen as part of the Base Cluster.&lt;br /&gt;
* Hash(IP+Salt) is the standard; definitely need to rotate the salt regularly, not keep records, etc.&lt;br /&gt;
** (Note: The salt will need to live in ZK to be accessible and consistent across processing nodes, but mark the key it as volatile so it isn&#039;t persisted anywhere.)&lt;br /&gt;
&lt;br /&gt;
* Tim: Currently, we keep 3 months of IPs in checkuser; if we keep IPs around for longer than that, it would be problematic.&lt;br /&gt;
* Mark: Performing anonymization on the edge is feasible, and probably preferable for a bunch of reasons -- especially from ESAMS. We should look into this.&lt;br /&gt;
** Might also be able to do it in MediaWiki, but that wouldn&#039;t touch all traffic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Followups ==&lt;br /&gt;
&lt;br /&gt;
=== Kafka Contractor ===&lt;br /&gt;
&lt;br /&gt;
[http://edenhill.se/ Magnus Edenhill], who wrote the [https://github.com/edenhill/librdkafka librdkafka], the major C library for the Kafka protocol with both producer and consumer support. Patrick reached out to him; he quoted us a super, incredibly reasonable price for:&lt;br /&gt;
&lt;br /&gt;
* varnishncsa logging module&lt;br /&gt;
* Zookeeper support&lt;br /&gt;
* Offered to add 0.8 protocol support pro-bono&lt;br /&gt;
&lt;br /&gt;
To decide if we want to go forward with this work, we need to decide whether there&#039;s any meaningful interest in replacing udp2log, especially as Analytics doesn&#039;t have the time or bandwidth to manage this guy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
&lt;br /&gt;
* Cost is low, and benefit is huge&lt;br /&gt;
* Could use LVS to loadbalance the TCP connections&lt;br /&gt;
** Would be lumpy, as connections are long-lived, and it wouldn&#039;t be balancing on bytes&lt;br /&gt;
** Would make ZK support unnecessary&lt;br /&gt;
&lt;br /&gt;
Conclusion:&lt;br /&gt;
&lt;br /&gt;
* Definitely followup with the dude&lt;br /&gt;
* Ops (Mark) will manage/review the work&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Minimal Viable Cluster ===&lt;br /&gt;
&lt;br /&gt;
Immediate work:&lt;br /&gt;
&lt;br /&gt;
* Network ACL (Ops)&lt;br /&gt;
* Set up iptables on the NN to only whitelist cluster nodes on the data ports (Otto)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Initial Base Cluster ===&lt;br /&gt;
&lt;br /&gt;
At what point should the cutover happen between the MVC (current running cluster), and the newly built Base Cluster? That is: When do we cut over the data import stream?&lt;br /&gt;
&lt;br /&gt;
* Puppetization of all components, Op Friendship&lt;br /&gt;
* Security is satisfactory&lt;br /&gt;
* Anonymization of IPs&lt;br /&gt;
&lt;br /&gt;
Who on Ops is going to be involved in setting this up and reviewing it? Volunteers:&lt;br /&gt;
* Mark, Faidon, possibly others&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusions &amp;amp; Next Steps ==&lt;br /&gt;
&lt;br /&gt;
* Keep current cluster running as-is&lt;br /&gt;
* Continue puppet work on Initial Base Cluster&lt;br /&gt;
** Find machines: either pull out ~5 datanodes, or do it in labs (prefer labs)&lt;br /&gt;
** Start building new cluster&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings&amp;diff=654075</id>
		<title>Analytics/Archive/Infrastructure/Meetings</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings&amp;diff=654075"/>
		<updated>2013-03-02T00:34:13Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Meeting notes from Kraken planning.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Meetings/SecurityReview|Security Review Meeting]]&lt;br /&gt;
* [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Infrastructure/Security_Review_Meeting&amp;diff=654073</id>
		<title>Analytics/Infrastructure/Security Review Meeting</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Infrastructure/Security_Review_Meeting&amp;diff=654073"/>
		<updated>2013-03-02T00:33:41Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Dsc moved page Analytics/Kraken/Security Review Meeting to Analytics/Kraken/Meetings/SecurityReview&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Analytics/Kraken/Meetings/SecurityReview]]&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/SecurityReview&amp;diff=654072</id>
		<title>Analytics/Archive/Infrastructure/Meetings/SecurityReview</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/SecurityReview&amp;diff=654072"/>
		<updated>2013-03-02T00:33:41Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Dsc moved page Analytics/Kraken/Security Review Meeting to Analytics/Kraken/Meetings/SecurityReview&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Original Suggested Agenda =&lt;br /&gt;
&lt;br /&gt;
This is an outline of information and topics that might be of interest to discuss. It&#039;s not intended as comprehensive, just a starting point. Feel free to add/edit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
There&#039;s been some discussion of swapping this meeting with the Arch Review meeting, so we can work out any questions with the components before discussing their security implications. Either way, we&#039;ll probably want a brief overview of the architecture before moving forward.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cluster Security ==&lt;br /&gt;
&lt;br /&gt;
=== Public Surfaces ===&lt;br /&gt;
&lt;br /&gt;
* ACL as outlined in the [https://rt.wikimedia.org/Ticket/Display.html?id=4433 RT ticket].&lt;br /&gt;
* Cross-datacenter connectivity (esams) requires a solution (public IP, or perhaps the existing bridge?)&lt;br /&gt;
&lt;br /&gt;
=== Services and Access Needs ===&lt;br /&gt;
&lt;br /&gt;
Many internal service dashboards and control panels:&lt;br /&gt;
&lt;br /&gt;
* Hue: HDFS web access; Hadoop job scheduling (via Oozie); Hive query dashboard (Beeswax)&lt;br /&gt;
** Hue WebUI Login authentication uses LDAP&lt;br /&gt;
** Can control privileges within the dashboard to granularly restrict access to particular services, &lt;br /&gt;
** Limited control can be exerted on resource use&lt;br /&gt;
** Dashboard access needed by analysts need access for job monitoring/control, and data access&lt;br /&gt;
* Hadoop Admin pages&lt;br /&gt;
** NameNode: Provides HDFS logs and system health overview. Cluster administrator access only.&lt;br /&gt;
** JobTracker, DataNode: provides logs and debugging output for Hadoop jobs. Access needed by analysts to debug.&lt;br /&gt;
* Storm&#039;s Nimbus: storm job monitoring and scheduling. Cluster administrator access only.&lt;br /&gt;
* Graphite: Application and host monitoring for the cluster. Cluster administrator access only.&lt;br /&gt;
&lt;br /&gt;
=== HDFS ===&lt;br /&gt;
&lt;br /&gt;
* http://blog.cloudera.com/blog/2012/03/authorization-and-authentication-in-hadoop/&lt;br /&gt;
* &amp;lt;code&amp;gt;hdfs&amp;lt;/code&amp;gt; is the superuser within the HDFS file system. Hadoop piggybacks on Unix users/groups, but uses its own protocols for communication, not the shell (ssh). This means being logged in as the &amp;lt;code&amp;gt;hdfs&amp;lt;/code&amp;gt; Unix account is sufficient to take actions using the Hadoop shell tools as &amp;lt;code&amp;gt;hdfs&amp;lt;/code&amp;gt;, the superuser. Hadoop provides an optional Kerberos layer to provide authentication, but there are other solutions, such as firewalling off the NameNode using iptables to ensure only whitelisted nodes from connecting to the HDFS cluster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Retention ==&lt;br /&gt;
&lt;br /&gt;
=== What Potentially Private or Sensitive Data is there? ===&lt;br /&gt;
&lt;br /&gt;
* IP addresses&lt;br /&gt;
* Browsing activity (including edits) correlated with Usernames &amp;amp; IPs&lt;br /&gt;
* Data leakage via search queries / referrers&lt;br /&gt;
* Low-entropy Data:&lt;br /&gt;
** Precise geographic information about all activity&lt;br /&gt;
** Login/Logout by IP across all web properties&lt;br /&gt;
&lt;br /&gt;
=== Raw Logs ===&lt;br /&gt;
&lt;br /&gt;
* First persistantly stored in Kafka brokers; buffer window is 7 days ([http://kafka.apache.org/configuration.html log.retention.hours]=168), and automatically deleted afterward&lt;br /&gt;
* ETL anonymization pipeline sees raw data, removes IPs (salted hash) after geo lookup&lt;br /&gt;
&lt;br /&gt;
=== Policies ===&lt;br /&gt;
&lt;br /&gt;
* Never publish raw logs or unaggregated datasets&lt;br /&gt;
* Raw logs only accessible by those who have signed the Data NDA.&lt;br /&gt;
** Can control HDFS file permissions via LDAP groups, allowing segregation of NDA/non-NDA data access, private data import, etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legacy ==&lt;br /&gt;
&lt;br /&gt;
This pertains only to the current, legacy system, but raw archival logs currently exist back to 2011 containing unsanitized IPs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Something must be done about this!&#039;&#039;&#039; GeoIP then hash the IPs, and replace them in the logs! Offsite the files if we &#039;&#039;&#039;really&#039;&#039;&#039; need backups?&lt;br /&gt;
* wikistats processes all of time at once, and frequently has errors that require recomputation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Meeting Notes =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
Quick summary of notes / take-aways from the Analytics (Kraken) security review meeting.&lt;br /&gt;
&lt;br /&gt;
* analytics1001 has been wiped and reimaged (restoring /home from backup)&lt;br /&gt;
* All proxies and externally-facing services have been disabled.&lt;br /&gt;
* Work is under way to bring everything that was puppetized under the analytics1001 puppetmaster into operations-puppet after proper review. Andrew is working closely with a number of people in ops to make this happen.&lt;br /&gt;
* All future deployments to the cluster will be puppetized and go through normal code review. Other than performance testing, these puppet confs will be tested in labs.&lt;br /&gt;
* The rest of the cluster will be wiped and reimaged out of puppet; data in HDFS will be preserved. This can be a rolling process allowing work to proceed while its under way.&lt;br /&gt;
* Schedule an Architectural Review meeting sometime during the SF Ops hackathon, including a look at  additional services and auth methods that provide access to internal dashboards like Hue &amp;amp;such.&lt;br /&gt;
* Ensure all current &amp;quot;application&amp;quot; code (stuff written by WMF) gets reviewed:&lt;br /&gt;
** Cron doing HDFS import from Kafka&lt;br /&gt;
** Pig UDFs and other data tools used in processing&lt;br /&gt;
** Future: Storm ETL layer&lt;br /&gt;
&lt;br /&gt;
We all agreed the overall goal is to get to an acceptable security state. During that process, the Analytics team still needs to continue to meet stakeholder needs and deliver on promises. We decided on keeping running a &amp;quot;minimum viable cluster&amp;quot; while reimaging boxes and civilizing cluster configuration:&lt;br /&gt;
&lt;br /&gt;
* Wall off some portion of the boxes to continue recieving data and running jobs; all other boxes can be wiped (preserving HDFS partitions). Boxes would be incrementally removed from the &amp;quot;unsanitary&amp;quot; cluster, reimaged, and then added to the &amp;quot;sanitary&amp;quot; cluster. Stupid bathroom-related jokes to be avoided.&lt;br /&gt;
* Team Analytics to enumerate data processing jobs that will be running in the intermediate period; their configurations and tooling will be reviewed.&lt;br /&gt;
* Analytics and Ops engineers continue to have shell access. Jobs can be submitted and managed using the CLI tools; internal dashboards can be accessed via SSH tunnelling. Analysts working on the cluster will be approved for shell access on a case-by-case basis (afaik, just Evan Rosen (full-time analyst for Grantmaking &amp;amp; Programs), and Stefan Petrea (contractor for Analytics)).&lt;br /&gt;
* No public, external access of any box in either zone (including proxied, dashboards like Hue, or even static files) that hasn&#039;t gone through review.&lt;br /&gt;
* Analytics and Ops will work together to find a simple, acceptable mechanism for data export.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Next Steps ==&lt;br /&gt;
&lt;br /&gt;
* Analytics puppet manfiests fully reviewed and merged into master operations-puppet repository&lt;br /&gt;
** Andrew to come pow-wow before the SF Ops hackathon and buddy it up with ops to plow through some of this.&lt;br /&gt;
* Schedule Architecture Review&lt;br /&gt;
* Rolling reimaging of all analytics boxes (including hadoop data nodes but preserving data) implementing this &amp;quot;minimal viable cluster&amp;quot; plan.&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics&amp;diff=654071</id>
		<title>Analytics</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics&amp;diff=654071"/>
		<updated>2013-03-02T00:32:55Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:WMF_Analytics_-_Ring_Logo_(thick).svg|200px|right|wmf analytics: logos mean srs bsns]] Howdy from the Wikimedia Analytics team! We&#039;re currently working on building a Data Services Platform (codenamed Kraken) to power the next-generation of intelligence and analytics, as well as a new and wondrous [http://reportcard.wmflabs.org/ Reportcard].&lt;br /&gt;
&lt;br /&gt;
If you&#039;re enthusiastic about analytics, you might want to [http://blog.wikimedia.org/2012/07/25/meet-the-analytics-team/ meet the team], or subscribe to the [https://lists.wikimedia.org/mailman/listinfo/analytics Analytics Mailing List] (don&#039;t worry, it&#039;s low-traffic).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
* [[User:DAndreescu|Dan Andreescu]]&lt;br /&gt;
* [[User:Ottomata|Andrew Otto]]&lt;br /&gt;
* [[User:Dsc|Dave Schoonover]]&lt;br /&gt;
* [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
* [[User:Erik_Zachte|Erik Zachte]]&lt;br /&gt;
* [[User:Kparkinson|Kraig Parkinson]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planning ==&lt;br /&gt;
* [[Analytics/Roadmap|Roadmap]]&lt;br /&gt;
** [[Roadmap#Analytics|Analytics on the Platform Roadmap]]&lt;br /&gt;
* [[Analytics/Roadmap/PlanningMeetings|Meeting Notes]]&lt;br /&gt;
* [[Analytics/Roadmap/2012-2013|2012-2013 Planning]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stakeholder Corner ==&lt;br /&gt;
* [[Analytics/Product_Codes|Product Codes]] &amp;amp;mdash; required application identifier needed to get data into the cluster.&lt;br /&gt;
* [[Analytics/Metric_definitions|Metrics Definitions]] &amp;amp;mdash; canonical definition of metrics.&lt;br /&gt;
* [[Analytics/Dreams|Dreams]] &amp;amp;mdash; features, metrics/queries, and visualizations people would like to see someday. Importantly, don&#039;t worry about these things being reasonable, well-scoped, or put in the right place. Just add stuff here you think would be useful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Kraken|Kraken]] ===&lt;br /&gt;
* &amp;quot;Kraken&amp;quot; is the codename for the cluster and software which powers the Data Services Platform.&lt;br /&gt;
* [[Analytics/Kraken|Project Info]]&lt;br /&gt;
* [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
* [https://upload.wikimedia.org/wikipedia/mediawiki/3/38/Kraken_flow_diagram.png Cluster Dataflow Diagram]&lt;br /&gt;
** [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
** [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning docs]]&lt;br /&gt;
** [[Analytics/Distributed_Logging_Solutions|Distributed Logging]]&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Kraken}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Limn|Limn]] ===&lt;br /&gt;
* Limn is a drop-in GUI toolkit for building visualizations. It powers the [http://reportcard.wmflabs.org/ WMF Monthly Reportcard].&lt;br /&gt;
* [[Analytics/Limn|Project Info]]&lt;br /&gt;
* Source: https://github.com/wikimedia/limn&lt;br /&gt;
* Issues: https://github.com/wikimedia/limn/issues&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Limn}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Reportcard|Reportcard]] ===&lt;br /&gt;
* The [http://reportcard.wmflabs.org/ WMF Monthly Reportcard] is a visual dashboard of high-level metrics on the health and success of the various Wikimedia projects.&lt;br /&gt;
* [[Analytics/Reportcard|Project Info]]&lt;br /&gt;
* Site: http://reportcard.wmflabs.org/&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Reportcard}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Wikistats|Wikistats]] ===&lt;br /&gt;
* [[Analytics/Wikistats|Project Info]]&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Wikistats}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Legacy_Logging|Legacy Log Collection]] ===&lt;br /&gt;
* [[Analytics/Legacy_Logging|Project Info]]&lt;br /&gt;
* Components:&lt;br /&gt;
** [[Analytics/udp2log_pageview_logging|UDP Logging]]&lt;br /&gt;
** [[Analytics/UDP-filters|UDP Log Filters]]&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Pageview logging}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Data_Releases|Data Releases]] ===&lt;br /&gt;
* [[Analytics/Data_Releases|Project Info]]&lt;br /&gt;
* [[Analytics/Pageviews|Page View Analytics]]&lt;br /&gt;
** [[Analytics/Pageviews/Mobile|Mobile]]&lt;br /&gt;
** [[Analytics/Pageviews/GLAM|GLAM]]&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Data Releases}}&lt;br /&gt;
&lt;br /&gt;
=== [[Analytics/Infrastructure|Infrastructure]] ===&lt;br /&gt;
* [[Analytics/Infrastructure|Project Info]]&lt;br /&gt;
* Resources:&lt;br /&gt;
** [[Analytics/Infrastructure/Stat1|&amp;lt;code&amp;gt;stat1&amp;lt;/code&amp;gt; server]]&lt;br /&gt;
** [[Analytics/Kraken/Infrastructure|Kraken Server Hardware &amp;amp; Infrastructure]]&lt;br /&gt;
* Latest status: {{Wikimedia project status line|Analytics/Infrastructure}}&lt;br /&gt;
&lt;br /&gt;
=== See Also ===&lt;br /&gt;
&lt;br /&gt;
* [[Developers/Maintainers#Analytics|Project Maintainers]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Research|Research]] ==&lt;br /&gt;
* [[Analytics/Research|Research Hub]]&lt;br /&gt;
* [http://pinboard.in/u:wmfa Team Bookmarks on Pinboard]&lt;br /&gt;
* Across WMF:&lt;br /&gt;
** [[OAuth]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Continuous Improvement|Continuous Improvement]] ==&lt;br /&gt;
&lt;br /&gt;
* Using Mingle to track improvements: https://mingle.corp.wikimedia.org/projects/analytics/wiki/Engaging_in_Continuous_Improvement&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings&amp;diff=654070</id>
		<title>Analytics/Archive/Infrastructure/Meetings</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings&amp;diff=654070"/>
		<updated>2013-03-02T00:30:55Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Created page with &amp;quot;Meeting notes from Kraken planning.  * Security Review Meeting * Analytics/Kraken/Meetings/ArchitectureReview|Architect...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Meeting notes from Kraken planning.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Meetings/Security_Review_Meeting|Security Review Meeting]]&lt;br /&gt;
* [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=654069</id>
		<title>Analytics/Kraken</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=654069"/>
		<updated>2013-03-02T00:30:01Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wikimedia engineering project information&lt;br /&gt;
| name        = Kraken (Analytics Cluster)&lt;br /&gt;
| description = A robust, distributed computing and data services platform.&lt;br /&gt;
| start       = 2011-05-22&lt;br /&gt;
| end         = &lt;br /&gt;
| group       = Analytics&lt;br /&gt;
| lead        = &lt;br /&gt;
| team        = [[User:Ottomata|Andrew Otto]], [[User:Dsc|David Schoonover]], [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
| previous    = &lt;br /&gt;
| next        = &lt;br /&gt;
| projectpage = Analytics/Kraken&lt;br /&gt;
| display     = {{{display|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Kraken is the code-name for the robust distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
= [[{{FULLPAGENAME}}/status|Status]] =&lt;br /&gt;
&lt;br /&gt;
{{Wikimedia project status line|{{FULLPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
= Rationale =&lt;br /&gt;
&lt;br /&gt;
The Wiki Movement has a chronic need for analytics. We need it to understand our editors, to encourage growth, to engender diversity, to focus our resources, to improve our engineering efforts, and to measure our success. It permeates nearly all our goals, yet our current analytics capabilities are underdeveloped: we lack infrastructure to capture editor, visitor, clickstream, and device data in a way that is easily accessible; our efforts are distributed among different departments; our data is fragmented over different systems and databases; our tools are ad-hoc.&lt;br /&gt;
&lt;br /&gt;
Rather than merely improve existing jobs and data pipelines, the Analytics Team aims to construct a Data Services Platform capable of mining intelligence from all datastreams of interest, providing this insight in real time, and exposing it via an API to power applications, mash up into websites, and stream to devices.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Access|Getting Access]]&lt;br /&gt;
* [[Analytics/Kraken/Overview|Overview]]&lt;br /&gt;
** [[Analytics/Kraken/Overview/Software|Software Overview]]&lt;br /&gt;
** [http://upload.wikimedia.org/wikipedia/mediawiki/1/1b/Kraken_flow_diagram-2.png Cluster Dataflow Diagram]&lt;br /&gt;
* &#039;&#039;&#039;Data&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Streams|Data Streams]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Blurbs|Blurbs About Kraken]]&lt;br /&gt;
** [https://docs.google.com/a/wikimedia.org/spreadsheet/ccc?key=0AvpRkIqSY9hNdEtRLVNoQWNvQzNleHBtTXR5emI3Z2c&amp;amp;pli=1#gid=5 Kraken Benchmarks]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsHadoopSetupNotes Hadoop Setup Notes]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsKrakenTestClusterSetup Test Cluster Setup Notes]&lt;br /&gt;
* &#039;&#039;&#039;[[Analytics/Kraken/Meetings|Meeting Notes]]&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Meetings/Security_Review_Meeting|Security Review Meeting]]&lt;br /&gt;
** [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Pixel_Service|Pixel Service]] and [[Analytics/Kraken/Request_Logging|Request Logging]] ==&lt;br /&gt;
&lt;br /&gt;
Public data import endpoint, and system for capturing the incoming firehose from our front-end servers.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
** [[Analytics/Kraken/Request_Logging|System Recommendation]]&lt;br /&gt;
** [[Analytics/Kraken/Logging_Solutions_Overview|Distributed Logging Systems Research]]&lt;br /&gt;
** [https://docs.google.com/spreadsheet/pub?key=0AvpRkIqSY9hNdFNoYWFIX29hMnFuenV1ckRvYzEzUVE&amp;amp;gid=3 Feature Comparison Spreadsheet]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Work with Ori, Patrick, &amp;amp; ops to figure out Kafka producer situation for production [otto, dsc, ori, preilly, ops]&lt;br /&gt;
* MediaWiki EventLogging integration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/ETL|ETL Topology]] ==&lt;br /&gt;
&lt;br /&gt;
The [http://storm-project.net Storm] topology that processes incoming data (aka, &amp;quot;Extract-Transform-Load&amp;quot; in data warehousing jargon).&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/ETL|ETL Topology]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Maven + Nexus setup w/ storm pom [dsc]&lt;br /&gt;
* Storm Bolts:&lt;br /&gt;
** Consume from Kafka (by topic?)&lt;br /&gt;
** Serialize &amp;amp; canonicalize record using Avro schema&lt;br /&gt;
** GeoIP annotation&lt;br /&gt;
** Mobile carrier annotation (by IP)&lt;br /&gt;
** IP anonymization (where does the salt live? how often should we change it?)&lt;br /&gt;
** Append record to per-hour files in HDFS (path using timestamp, topic)&lt;br /&gt;
** Notifier Bolt to update Kafka consumer checkpoint (and/or publish event for external hooks)&lt;br /&gt;
* Define Avro schemas:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
*** Figure out convention for EventData packets to self-identify with a more specific schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Core_Jobs|Core Jobs]] ==&lt;br /&gt;
&lt;br /&gt;
Core data processing jobs for processing web requests and event data, maintained by the Analytics team.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Figure out request tagging -- how can we avoid mutating records?&lt;br /&gt;
* Reportcard Oozie workflow [DvL]&lt;br /&gt;
** Pig Macro for &amp;quot;typical request analytics&amp;quot;&lt;br /&gt;
* Figure out indexing scheme:&lt;br /&gt;
** Aggregated time buckets&lt;br /&gt;
** Referrer chains&lt;br /&gt;
** Event aggregations&lt;br /&gt;
** Funnel Analysis&lt;br /&gt;
*** A/B testing event data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Data_Tools|Data Tools]] ==&lt;br /&gt;
&lt;br /&gt;
Data processing library and toolkit provided &amp;amp; maintained by the Analytics team, esp for use with Kraken.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Setup regular sqoop imports [DvL]&lt;br /&gt;
* Avro De/Serialization storage format compatibility:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
* Build re-usable pig/hive library, outsource this to analysts as much as possible [DvL]&lt;br /&gt;
* KV-Pairs parsing tools&lt;br /&gt;
* Conversion funnel analysis tools&lt;br /&gt;
** A/B testing analysis tools&lt;br /&gt;
* MW EventLogging extension integration&lt;br /&gt;
* Investigate Ori&#039;s Mediawiki extension for instrumentation, sending event/edit data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Infrastructure|Infrastructure]] ==&lt;br /&gt;
&lt;br /&gt;
Bucket for general cluster infrastructure and maintenance tasks.&lt;br /&gt;
* [[Analytics/Kraken/Puppet|Kraken Puppetization]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Ports|JMX Ports]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Monitoring|JMX Monitoring Research]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Meeting Notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Meetings/Security_Review_Meeting|Security Review Meeting]]&lt;br /&gt;
* [[Analytics/Kraken/Meetings/ArchitectureReview|Architecture Review Meeting]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fix the one busted Cisco machine (an07) [otto]&lt;br /&gt;
* Continue puppetization [otto]&lt;br /&gt;
* JMX Monitoring [otto, dsc]&lt;br /&gt;
* Investigate / experiment / benchmark Hadoop stack [DvL]&lt;br /&gt;
* Data owner services -- export, dashboard, visualizations (on Hue?) [dsc, dan]&lt;br /&gt;
** Hue plugin for Limn integration? [dsc]&lt;br /&gt;
* Get analysts experimenting with Hive/Pig [DvL]&lt;br /&gt;
* General purpose job-runner using Kafka+Storm&lt;br /&gt;
* Setup Hadoop FairScheduler [DvL]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Research =&lt;br /&gt;
&lt;br /&gt;
== Bundling ==&lt;br /&gt;
&lt;br /&gt;
Investigate size of savings of structure sharing via a short-term (between 1-30sec window) queue.&lt;br /&gt;
&lt;br /&gt;
* Reorder within window by timestamp? Seq number?&lt;br /&gt;
* Parameters of experiment:&lt;br /&gt;
** Buffer time: 1s, 2s, 5s, 10s&lt;br /&gt;
** Sharded by server&lt;br /&gt;
** Bundle by IP, UA, IP+UA&lt;br /&gt;
* Pull-up fields for structure sharing: &lt;br /&gt;
** Invariant: ip, ua, accept-lang, carrier&lt;br /&gt;
** Often invariant: method, status, referer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Hbase&lt;br /&gt;
* Hive&lt;br /&gt;
* Hue plugins&lt;br /&gt;
* Cascading -- do we even need this as we have Oozie?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
[[Category:WMF Projects/Analytics]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Meetings/2013-02-28&amp;diff=653057</id>
		<title>Meetings/2013-02-28</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Meetings/2013-02-28&amp;diff=653057"/>
		<updated>2013-02-28T01:06:32Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav&lt;br /&gt;
 | title = Wikimedia Open Tech Chats&lt;br /&gt;
 | previous = &#039;&#039;&#039;[[Meetings/2012-12-13|13 December]]&#039;&#039;&#039;&lt;br /&gt;
 | next = &#039;&#039;&#039;[[Meetings/2013-02-28|28 February]]&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 120%;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | What&lt;br /&gt;
| Selenium , Gerrit,  Lua and friends&lt;br /&gt;
|-&lt;br /&gt;
! How&lt;br /&gt;
| We&#039;re using a combination of Google Hangout on Air (an open YouTube stream from the 6th floor of the WMF office) + potential additional Hangout guest speakers + IRC for text-based communication. There&#039;s no attendance limit. You don&#039;t need Hangout to participate -- if you can play YouTube videos and join IRC, you&#039;re fine.&lt;br /&gt;
|-&lt;br /&gt;
! When&lt;br /&gt;
| Thursday, February 28, 2013, 20:30 [http://timeanddate.com/worldclock/fixedtime.html?msg=WMF+Open+Tech+Chat&amp;amp;iso=20130117T12&amp;amp;p1=224&amp;amp;ah=1 UTC] (12:30 PST), 60 minutes&lt;br /&gt;
|-&lt;br /&gt;
! Where&lt;br /&gt;
| &lt;br /&gt;
* Physical space: Wikimedia Foundation Inc., 149 New Montgomery Street, 3rd Floor, San Francisco, CA 94105, USA, 6th floor SF office, &amp;quot;Collab&amp;quot; space&lt;br /&gt;
* IRC: {{irc|wikimedia-dev}}&lt;br /&gt;
* YouTube stream: to be announced on IRC&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
! Food&lt;br /&gt;
| Brown bag - bring your own&lt;br /&gt;
|-&lt;br /&gt;
! Moderator&lt;br /&gt;
| Erik Moeller&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
&lt;br /&gt;
* Browser automation with Selenium and friends. (Chris/Zeljko)&lt;br /&gt;
* Gerrit 2.6: What&#039;s new / what&#039;s coming? (AKA: a gradual reduction in suckiness) (Chad)&lt;br /&gt;
* Converting templates to Lua (Brad)&lt;br /&gt;
* LevelUp - how you can learn, teach, &amp;amp; get stuff done (Sumana)&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
Add your name, tell your friends!&lt;br /&gt;
&lt;br /&gt;
* [[User:Zeljko.filipin(WMF)|Zeljko.filipin(WMF)]] ([[User talk:Zeljko.filipin(WMF)|talk]]) 22:31, 25 February 2013 (UTC)&lt;br /&gt;
* [[User:Cmcmahon(WMF)|Cmcmahon(WMF)]] ([[User talk:Cmcmahon(WMF)|talk]]) 21:51, 27 February 2013 (UTC)&lt;br /&gt;
* [[User:Greg (WMF)|Greg (WMF)]] ([[User talk:Greg (WMF)|talk]]) 00:11, 28 February 2013 (UTC)&lt;br /&gt;
* [[User:Username|dsc]] ([[User talk:Dsc|talk]])  01:06, 28 February 2013 (UTC)&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Meetings/2013-02-28&amp;diff=653056</id>
		<title>Meetings/2013-02-28</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Meetings/2013-02-28&amp;diff=653056"/>
		<updated>2013-02-28T01:06:00Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav&lt;br /&gt;
 | title = Wikimedia Open Tech Chats&lt;br /&gt;
 | previous = &#039;&#039;&#039;[[Meetings/2012-12-13|13 December]]&#039;&#039;&#039;&lt;br /&gt;
 | next = &#039;&#039;&#039;[[Meetings/2013-02-28|28 February]]&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 120%;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 15%;&amp;quot; | What&lt;br /&gt;
| Selenium , Gerrit,  Lua and friends&lt;br /&gt;
|-&lt;br /&gt;
! How&lt;br /&gt;
| We&#039;re using a combination of Google Hangout on Air (an open YouTube stream from the 6th floor of the WMF office) + potential additional Hangout guest speakers + IRC for text-based communication. There&#039;s no attendance limit. You don&#039;t need Hangout to participate -- if you can play YouTube videos and join IRC, you&#039;re fine.&lt;br /&gt;
|-&lt;br /&gt;
! When&lt;br /&gt;
| Thursday, February 28, 2013, 20:30 [http://timeanddate.com/worldclock/fixedtime.html?msg=WMF+Open+Tech+Chat&amp;amp;iso=20130117T12&amp;amp;p1=224&amp;amp;ah=1 UTC] (12:30 PST), 60 minutes&lt;br /&gt;
|-&lt;br /&gt;
! Where&lt;br /&gt;
| &lt;br /&gt;
* Physical space: Wikimedia Foundation Inc., 149 New Montgomery Street, 3rd Floor, San Francisco, CA 94105, USA, 6th floor SF office, &amp;quot;Collab&amp;quot; space&lt;br /&gt;
* IRC: {{irc|wikimedia-dev}}&lt;br /&gt;
* YouTube stream: to be announced on IRC&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
! Food&lt;br /&gt;
| Brown bag - bring your own&lt;br /&gt;
|-&lt;br /&gt;
! Moderator&lt;br /&gt;
| Erik Moeller&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
&lt;br /&gt;
* Browser automation with Selenium and friends. (Chris/Zeljko)&lt;br /&gt;
* Gerrit 2.6: What&#039;s new / what&#039;s coming? (AKA: a gradual reduction in suckiness) (Chad)&lt;br /&gt;
* Converting templates to Lua (Brad)&lt;br /&gt;
* LevelUp - how you can learn, teach, &amp;amp; get stuff done (Sumana)&lt;br /&gt;
&lt;br /&gt;
== Attendees ==&lt;br /&gt;
&lt;br /&gt;
Add your name, tell your friends!&lt;br /&gt;
&lt;br /&gt;
* [[User:Zeljko.filipin(WMF)|Zeljko.filipin(WMF)]] ([[User talk:Zeljko.filipin(WMF)|talk]]) 22:31, 25 February 2013 (UTC)&lt;br /&gt;
* [[User:Cmcmahon(WMF)|Cmcmahon(WMF)]] ([[User talk:Cmcmahon(WMF)|talk]]) 21:51, 27 February 2013 (UTC)&lt;br /&gt;
* [[User:Greg (WMF)|Greg (WMF)]] ([[User talk:Greg (WMF)|talk]]) 00:11, 28 February 2013 (UTC)&lt;br /&gt;
* &amp;amp;nbsp;&amp;amp;nbsp; &#039;&#039;&#039;§&#039;&#039;&#039; &amp;amp;nbsp;&amp;amp;nbsp; [[User:Username|dsc]] ([[User talk:Dsc|talk]])  01:06, 28 February 2013 (UTC)&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_02_27_Reflection&amp;diff=653051</id>
		<title>Analytics/Roadmap/PlanningMeetings/2013 02 27 Reflection</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_02_27_Reflection&amp;diff=653051"/>
		<updated>2013-02-28T00:52:11Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reflecting on the Meeting for Reflecting on our Weekly Status ==&lt;br /&gt;
&lt;br /&gt;
* dsc volunteers to help put together a stakeholder feedback survey; ez will help construct a community feedback survey as well&lt;br /&gt;
* ez: we should make sure our process collects feedback from the editor and research communities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Review of [https://mingle.corp.wikimedia.org/projects/analytics/cards/list?color_by=complexity&amp;amp;filters%5B%5D=%5BType%5D%5Bis%5D%5BImprovement+Idea%5D&amp;amp;group_by%5Blane%5D=improvement+idea+status&amp;amp;group_by%5Brow%5D=responsible&amp;amp;lanes=To+Do%2CIn+Progress%2CObservation%2FReview&amp;amp;style=list&amp;amp;tab=WIP+-+Improvement+Ideas Improvement Idea Inbox] ==&lt;br /&gt;
&lt;br /&gt;
Cynefin categories reminder:&lt;br /&gt;
* Simple: obvious to all&lt;br /&gt;
* Complicated: requires analysis or some other form of investigation&lt;br /&gt;
* Complex: can only be perceived in retrospect, but not in advance&lt;br /&gt;
* Chaotic: no relationship between cause and effect at systems level&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== #1: Improve business solutioning elements of analytics delivery ===&lt;br /&gt;
https://mingle.corp.wikimedia.org/projects/analytics/cards/1&lt;br /&gt;
&lt;br /&gt;
* Many elements of delivering on this:&lt;br /&gt;
** visioning with an eye toward integrated solution delivery&lt;br /&gt;
** planning for incremental releases&lt;br /&gt;
** gathering concrete requirements, communicating them clearly and explicitly, and managing expections&lt;br /&gt;
* Vote: do&lt;br /&gt;
* Domain:&lt;br /&gt;
** Diederik: complex&lt;br /&gt;
** Kraig: complex&lt;br /&gt;
** EZachte: complicated / complex&lt;br /&gt;
** otto: complex&lt;br /&gt;
** dsc: complex&lt;br /&gt;
** dan: complicated&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== #3: Improve discipline of work prioritization &amp;amp; scheduling ===&lt;br /&gt;
https://mingle.corp.wikimedia.org/projects/analytics/cards/3&lt;br /&gt;
&lt;br /&gt;
* dsc: Is this focused on improving the view of feature-work, or task-work? (This also relates to the management tools question.)&lt;br /&gt;
** K: primarily organizing/prioritizing, clarifying, and scheduling feature work (as seen from stakeholders)&lt;br /&gt;
* ez: re: prioritization. We have production bugs that have gone unfixed. this can&#039;t just be about new fewture development!&lt;br /&gt;
** K: we&#039;ll talk more about this with the work service levels card later&lt;br /&gt;
* Vote: do&lt;br /&gt;
* Domain:&lt;br /&gt;
** dan: complicated&lt;br /&gt;
** dsc: complicated&lt;br /&gt;
** otto: ditto&lt;br /&gt;
** drdee: complicated&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== #4: Introduce Lean management practices for leadership roles ===&lt;br /&gt;
https://mingle.corp.wikimedia.org/projects/analytics/cards/4&lt;br /&gt;
&lt;br /&gt;
* Not 6 sigma oriented  (which focuses on routine processes)&lt;br /&gt;
* drdee: let&#039;s not experiment with too many things at once.&lt;br /&gt;
* dsc: totally agreed. finite bandwidth -- code must be written.&lt;br /&gt;
* Vote: do&lt;br /&gt;
* Domain:&lt;br /&gt;
** dsc: complicated&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_02_27_Reflection&amp;diff=653050</id>
		<title>Analytics/Roadmap/PlanningMeetings/2013 02 27 Reflection</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_02_27_Reflection&amp;diff=653050"/>
		<updated>2013-02-28T00:50:13Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Reflecting on Reflecting on our Weekly Status Meeting Meeting =&lt;br /&gt;
&lt;br /&gt;
* dsc volunteers to help put together a stakeholder feedback survey; ez will help construct a community feedback survey as well&lt;br /&gt;
* ez: we should make sure our process collects feedback from the editor and research communities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Review of Idea Inbox =&lt;br /&gt;
&lt;br /&gt;
Cynefin categories reminder:&lt;br /&gt;
* Simple: obvious to all&lt;br /&gt;
* Complicated: requires analysis or some other form of investigation&lt;br /&gt;
* Complex: can only be perceived in retrospect, but not in advance&lt;br /&gt;
* Chaotic: no relationship between cause and effect at systems level&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== #1: Improve business solutioning elements of analytics delivery ==&lt;br /&gt;
https://mingle.corp.wikimedia.org/projects/analytics/cards/1&lt;br /&gt;
&lt;br /&gt;
* Many elements of delivering on this:&lt;br /&gt;
** visioning with an eye toward integrated solution delivery&lt;br /&gt;
** planning for incremental releases&lt;br /&gt;
** gathering concrete requirements, communicating them clearly and explicitly, and managing expections&lt;br /&gt;
* Vote: do&lt;br /&gt;
* Domain:&lt;br /&gt;
** Diederik: complex&lt;br /&gt;
** Kraig: complex&lt;br /&gt;
** EZachte: complicated / complex&lt;br /&gt;
** otto: complex&lt;br /&gt;
** dsc: complex&lt;br /&gt;
** dan: complicated&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== #3: Improve discipline of work prioritization &amp;amp; scheduling ==&lt;br /&gt;
https://mingle.corp.wikimedia.org/projects/analytics/cards/3&lt;br /&gt;
&lt;br /&gt;
* dsc: Is this focused on improving the view of feature-work, or task-work? (This also relates to the management tools question.)&lt;br /&gt;
** K: primarily organizing/prioritizing, clarifying, and scheduling feature work (as seen from stakeholders)&lt;br /&gt;
* ez: re: prioritization. We have production bugs that have gone unfixed. this can&#039;t just be about new fewture development!&lt;br /&gt;
** K: we&#039;ll talk more about this with the work service levels card later&lt;br /&gt;
* Vote: do&lt;br /&gt;
* Domain:&lt;br /&gt;
** dan: complicated&lt;br /&gt;
** dsc: complicated&lt;br /&gt;
** otto: ditto&lt;br /&gt;
** drdee: complicated&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== #4: Introduce Lean management practices for leadership roles ==&lt;br /&gt;
https://mingle.corp.wikimedia.org/projects/analytics/cards/4&lt;br /&gt;
&lt;br /&gt;
* Not 6 sigma oriented  (which focuses on routine processes)&lt;br /&gt;
* drdee: let&#039;s not experiment with too many things at once.&lt;br /&gt;
* dsc: totally agreed. finite bandwidth -- code must be written.&lt;br /&gt;
* Vote: do&lt;br /&gt;
* Domain:&lt;br /&gt;
** dsc: complicated&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_02_27_Reflection&amp;diff=653049</id>
		<title>Analytics/Roadmap/PlanningMeetings/2013 02 27 Reflection</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_02_27_Reflection&amp;diff=653049"/>
		<updated>2013-02-28T00:49:33Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Created page with &amp;quot;= Weekly Reflection Meeting - 27 Feb 2013 =   == Reflecting on Reflecting on our Weekly Status Meeting Meeting ==  * dsc volunteers to help put together a stakeholder feedback...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Weekly Reflection Meeting - 27 Feb 2013 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reflecting on Reflecting on our Weekly Status Meeting Meeting ==&lt;br /&gt;
&lt;br /&gt;
* dsc volunteers to help put together a stakeholder feedback survey; ez will help construct a community feedback survey as well&lt;br /&gt;
* ez: we should make sure our process collects feedback from the editor and research communities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Review of Idea Inbox ==&lt;br /&gt;
&lt;br /&gt;
Cynefin categories reminder:&lt;br /&gt;
* Simple: obvious to all&lt;br /&gt;
* Complicated: requires analysis or some other form of investigation&lt;br /&gt;
* Complex: can only be perceived in retrospect, but not in advance&lt;br /&gt;
* Chaotic: no relationship between cause and effect at systems level&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== #1: Improve business solutioning elements of analytics delivery ===&lt;br /&gt;
https://mingle.corp.wikimedia.org/projects/analytics/cards/1&lt;br /&gt;
&lt;br /&gt;
* Many elements of delivering on this:&lt;br /&gt;
** visioning with an eye toward integrated solution delivery&lt;br /&gt;
** planning for incremental releases&lt;br /&gt;
** gathering concrete requirements, communicating them clearly and explicitly, and managing expections&lt;br /&gt;
* Vote: do&lt;br /&gt;
* Domain:&lt;br /&gt;
** Diederik: complex&lt;br /&gt;
** Kraig: complex&lt;br /&gt;
** EZachte: complicated / complex&lt;br /&gt;
** otto: complex&lt;br /&gt;
** dsc: complex&lt;br /&gt;
** dan: complicated&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== #3: Improve discipline of work prioritization &amp;amp; scheduling ===&lt;br /&gt;
https://mingle.corp.wikimedia.org/projects/analytics/cards/3&lt;br /&gt;
&lt;br /&gt;
* dsc: Is this focused on improving the view of feature-work, or task-work? (This also relates to the management tools question.)&lt;br /&gt;
** K: primarily organizing/prioritizing, clarifying, and scheduling feature work (as seen from stakeholders)&lt;br /&gt;
* ez: re: prioritization. We have production bugs that have gone unfixed. this can&#039;t just be about new fewture development!&lt;br /&gt;
** K: we&#039;ll talk more about this with the work service levels card later&lt;br /&gt;
* Vote: do&lt;br /&gt;
* Domain:&lt;br /&gt;
** dan: complicated&lt;br /&gt;
** dsc: complicated&lt;br /&gt;
** otto: ditto&lt;br /&gt;
** drdee: complicated&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== #4: Introduce Lean management practices for leadership roles ===&lt;br /&gt;
https://mingle.corp.wikimedia.org/projects/analytics/cards/4&lt;br /&gt;
&lt;br /&gt;
* Not 6 sigma oriented  (which focuses on routine processes)&lt;br /&gt;
* drdee: let&#039;s not experiment with too many things at once.&lt;br /&gt;
* dsc: totally agreed. finite bandwidth -- code must be written.&lt;br /&gt;
* Vote: do&lt;br /&gt;
* Domain:&lt;br /&gt;
** dsc: complicated&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings&amp;diff=653047</id>
		<title>Analytics/Roadmap/PlanningMeetings</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings&amp;diff=653047"/>
		<updated>2013-02-28T00:48:19Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Meeting notes for Team Analytics planning.&lt;br /&gt;
&lt;br /&gt;
= 2012 =&lt;br /&gt;
&lt;br /&gt;
* (Sept 20) [[Analytics/Roadmap/PlanningMeetings/2012_Sept_20|Autumnal Planning]] - Data Release Process; Sept-Oct Milestone Planning&lt;br /&gt;
* (Dec 12) [[Analytics/Roadmap/PlanningMeetings/2012_Q2_Quarterly_Review|Q2 Quarterly Review]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2013 =&lt;br /&gt;
&lt;br /&gt;
* (2013) [[Analytics/Roadmap/PlanningMeetings/2013_Scrum|Daily Scrum Notes]]&lt;br /&gt;
* (Feb 12) [[Analytics/Kraken/Security Review Meeting|Kraken Security Review]]&lt;br /&gt;
* (Feb 27) [[Analytics/Roadmap/PlanningMeetings/2013_02_27_Reflection|Weekly Reflection]]&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=653045</id>
		<title>Analytics/Kraken</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=653045"/>
		<updated>2013-02-28T00:46:33Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wikimedia engineering project information&lt;br /&gt;
| name        = Kraken (Analytics Cluster)&lt;br /&gt;
| description = A robust, distributed computing and data services platform.&lt;br /&gt;
| start       = 2011-05-22&lt;br /&gt;
| end         = &lt;br /&gt;
| group       = Analytics&lt;br /&gt;
| lead        = &lt;br /&gt;
| team        = [[User:Ottomata|Andrew Otto]], [[User:Dsc|David Schoonover]], [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
| previous    = &lt;br /&gt;
| next        = &lt;br /&gt;
| projectpage = Analytics/Kraken&lt;br /&gt;
| display     = {{{display|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Kraken is the code-name for the robust distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
= [[{{FULLPAGENAME}}/status|Status]] =&lt;br /&gt;
&lt;br /&gt;
{{Wikimedia project status line|{{FULLPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
= Rationale =&lt;br /&gt;
&lt;br /&gt;
The Wiki Movement has a chronic need for analytics. We need it to understand our editors, to encourage growth, to engender diversity, to focus our resources, to improve our engineering efforts, and to measure our success. It permeates nearly all our goals, yet our current analytics capabilities are underdeveloped: we lack infrastructure to capture editor, visitor, clickstream, and device data in a way that is easily accessible; our efforts are distributed among different departments; our data is fragmented over different systems and databases; our tools are ad-hoc.&lt;br /&gt;
&lt;br /&gt;
Rather than merely improve existing jobs and data pipelines, the Analytics Team aims to construct a Data Services Platform capable of mining intelligence from all datastreams of interest, providing this insight in real time, and exposing it via an API to power applications, mash up into websites, and stream to devices.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Access|Getting Access]]&lt;br /&gt;
* [[Analytics/Kraken/Overview|Overview]]&lt;br /&gt;
** [[Analytics/Kraken/Overview/Software|Software Overview]]&lt;br /&gt;
** [http://upload.wikimedia.org/wikipedia/mediawiki/1/1b/Kraken_flow_diagram-2.png Cluster Dataflow Diagram]&lt;br /&gt;
* &#039;&#039;&#039;Data&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Streams|Data Streams]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Security_Review_Meeting|Security Review Meeting notes]]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsKrakenTestClusterSetup Test Cluster Setup Notes]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsHadoopSetupNotes Hadoop Setup Notes]&lt;br /&gt;
** [[Analytics/Kraken/Blurbs|Blurbs About Kraken]]&lt;br /&gt;
** [https://docs.google.com/a/wikimedia.org/spreadsheet/ccc?key=0AvpRkIqSY9hNdEtRLVNoQWNvQzNleHBtTXR5emI3Z2c&amp;amp;pli=1#gid=5 Kraken Benchmarks]&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Pixel_Service|Pixel Service]] and [[Analytics/Kraken/Request_Logging|Request Logging]] ==&lt;br /&gt;
&lt;br /&gt;
Public data import endpoint, and system for capturing the incoming firehose from our front-end servers.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
** [[Analytics/Kraken/Request_Logging|System Recommendation]]&lt;br /&gt;
** [[Analytics/Kraken/Logging_Solutions_Overview|Distributed Logging Systems Research]]&lt;br /&gt;
** [https://docs.google.com/spreadsheet/pub?key=0AvpRkIqSY9hNdFNoYWFIX29hMnFuenV1ckRvYzEzUVE&amp;amp;gid=3 Feature Comparison Spreadsheet]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Work with Ori, Patrick, &amp;amp; ops to figure out Kafka producer situation for production [otto, dsc, ori, preilly, ops]&lt;br /&gt;
* MediaWiki EventLogging integration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/ETL|ETL Topology]] ==&lt;br /&gt;
&lt;br /&gt;
The [http://storm-project.net Storm] topology that processes incoming data (aka, &amp;quot;Extract-Transform-Load&amp;quot; in data warehousing jargon).&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/ETL|ETL Topology]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Maven + Nexus setup w/ storm pom [dsc]&lt;br /&gt;
* Storm Bolts:&lt;br /&gt;
** Consume from Kafka (by topic?)&lt;br /&gt;
** Serialize &amp;amp; canonicalize record using Avro schema&lt;br /&gt;
** GeoIP annotation&lt;br /&gt;
** Mobile carrier annotation (by IP)&lt;br /&gt;
** IP anonymization (where does the salt live? how often should we change it?)&lt;br /&gt;
** Append record to per-hour files in HDFS (path using timestamp, topic)&lt;br /&gt;
** Notifier Bolt to update Kafka consumer checkpoint (and/or publish event for external hooks)&lt;br /&gt;
* Define Avro schemas:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
*** Figure out convention for EventData packets to self-identify with a more specific schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Core_Jobs|Core Jobs]] ==&lt;br /&gt;
&lt;br /&gt;
Core data processing jobs for processing web requests and event data, maintained by the Analytics team.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Figure out request tagging -- how can we avoid mutating records?&lt;br /&gt;
* Reportcard Oozie workflow [DvL]&lt;br /&gt;
** Pig Macro for &amp;quot;typical request analytics&amp;quot;&lt;br /&gt;
* Figure out indexing scheme:&lt;br /&gt;
** Aggregated time buckets&lt;br /&gt;
** Referrer chains&lt;br /&gt;
** Event aggregations&lt;br /&gt;
** Funnel Analysis&lt;br /&gt;
*** A/B testing event data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Data_Tools|Data Tools]] ==&lt;br /&gt;
&lt;br /&gt;
Data processing library and toolkit provided &amp;amp; maintained by the Analytics team, esp for use with Kraken.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Setup regular sqoop imports [DvL]&lt;br /&gt;
* Avro De/Serialization storage format compatibility:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
* Build re-usable pig/hive library, outsource this to analysts as much as possible [DvL]&lt;br /&gt;
* KV-Pairs parsing tools&lt;br /&gt;
* Conversion funnel analysis tools&lt;br /&gt;
** A/B testing analysis tools&lt;br /&gt;
* MW EventLogging extension integration&lt;br /&gt;
* Investigate Ori&#039;s Mediawiki extension for instrumentation, sending event/edit data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Infrastructure|Infrastructure]] ==&lt;br /&gt;
&lt;br /&gt;
Bucket for general cluster infrastructure and maintenance tasks.&lt;br /&gt;
* [[Analytics/Kraken/Puppet|Kraken Puppetization]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Ports|JMX Ports]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Monitoring|JMX Monitoring Research]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fix the one busted Cisco machine (an07) [otto]&lt;br /&gt;
* Continue puppetization [otto]&lt;br /&gt;
* JMX Monitoring [otto, dsc]&lt;br /&gt;
* Investigate / experiment / benchmark Hadoop stack [DvL]&lt;br /&gt;
* Data owner services -- export, dashboard, visualizations (on Hue?) [dsc, dan]&lt;br /&gt;
** Hue plugin for Limn integration? [dsc]&lt;br /&gt;
* Get analysts experimenting with Hive/Pig [DvL]&lt;br /&gt;
* General purpose job-runner using Kafka+Storm&lt;br /&gt;
* Setup Hadoop FairScheduler [DvL]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Research =&lt;br /&gt;
&lt;br /&gt;
== Bundling ==&lt;br /&gt;
&lt;br /&gt;
Investigate size of savings of structure sharing via a short-term (between 1-30sec window) queue.&lt;br /&gt;
&lt;br /&gt;
* Reorder within window by timestamp? Seq number?&lt;br /&gt;
* Parameters of experiment:&lt;br /&gt;
** Buffer time: 1s, 2s, 5s, 10s&lt;br /&gt;
** Sharded by server&lt;br /&gt;
** Bundle by IP, UA, IP+UA&lt;br /&gt;
* Pull-up fields for structure sharing: &lt;br /&gt;
** Invariant: ip, ua, accept-lang, carrier&lt;br /&gt;
** Often invariant: method, status, referer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Hbase&lt;br /&gt;
* Hive&lt;br /&gt;
* Hue plugins&lt;br /&gt;
* Cascading -- do we even need this as we have Oozie?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
[[Category:WMF Projects/Analytics]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Software&amp;diff=653044</id>
		<title>Analytics/Kraken/Software</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Software&amp;diff=653044"/>
		<updated>2013-02-28T00:45:25Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is meant to be a brief overview of the software and libraries used to build [[Analytics/Kraken|Kraken]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Major Software and Libraries ==&lt;br /&gt;
&lt;br /&gt;
* Hadoop&lt;br /&gt;
** HDFS: NameNode, DataNode&lt;br /&gt;
** YARN: NodeManager, ResourceManager&lt;br /&gt;
* Hadoop tools:&lt;br /&gt;
** Hue&lt;br /&gt;
** Oozie&lt;br /&gt;
** Pig, Hive&lt;br /&gt;
** HTTPfs, webhdfs&lt;br /&gt;
** LDAP integration?&lt;br /&gt;
** Kerberos integration?&lt;br /&gt;
* Storm&lt;br /&gt;
** Nimbus, Supervisors, Bolts, Spouts&lt;br /&gt;
** (We will be writing bolts to perform the ETL tasks, and configuring the topology that links them together)&lt;br /&gt;
* ETL libraries:&lt;br /&gt;
** MaxMind GeoIP database&lt;br /&gt;
** dClass: User Agent parser&lt;br /&gt;
** Avro: Data serialization framework&lt;br /&gt;
** Camus: Kafka -&amp;gt; HDFS library&lt;br /&gt;
* Kafka&lt;br /&gt;
* Zookeeper&lt;br /&gt;
** Required by Hadoop, Storm, and Kafka&lt;br /&gt;
* Monitoring tools:&lt;br /&gt;
** jmxtrans&lt;br /&gt;
** Ganglia&lt;br /&gt;
** Graphite&lt;br /&gt;
&lt;br /&gt;
See the [[Analytics/Kraken/Overview|Kraken Overview]] for a glossary of terms and detail on how these pieces are connected into components.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Today ===&lt;br /&gt;
&lt;br /&gt;
* Hadoop + tools, the Kafka brokers, and Zookeeper are all set up&lt;br /&gt;
* &amp;lt;code&amp;gt;udp2log&amp;lt;/code&amp;gt; logs from the edge -&amp;gt; awk -&amp;gt; Kafka&lt;br /&gt;
* no ETL: cron import to HDFS from Kafka via MR job (this means IPs are in logs!)&lt;br /&gt;
* User authorization: via shell account, or group membership in labs LDAP&lt;br /&gt;
* Monitoring via jmxtrans into Ganglia; no Nagios&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Network Profiles ==&lt;br /&gt;
&lt;br /&gt;
=== Network Usage ===&lt;br /&gt;
&lt;br /&gt;
Network usage by node type:&lt;br /&gt;
&lt;br /&gt;
* Kafka Brokers: 2x the full incoming stream (in from edge, out to ETL). Kafka uses its own protocol over TCP, and supports message bundling, compression, and live failover.&lt;br /&gt;
* Storm ETL workers: full stream sharded among nodes; Storm is smart about avoiding inter-node communication if a topology can completely fit on a single worker.&lt;br /&gt;
* A file in HDFS is made up of blocks; these blocks can be both local and remote to any given DataNode. HDFS replicates data 3x (configurable) for availability and durability – this means it will copy blocks between nodes to maintain the replication invariant. The NameNode acts as the coordinator for replication, and the authority for addressing files to blocks.&lt;br /&gt;
* HDFS is immutable (though it allows appends) – this means that &amp;quot;change&amp;quot; rewrites and replicates the entire block (our blocksize is configured at 256MB).&lt;br /&gt;
* A MapReduce job has two phases: the Mappers each read their section of the input from HDFS (with Hadoop ensuring the section is on local disk), and perform some work, emitting (key, value) pairs; Reducers then receive these tuples after a total ordering is applied (via the keys) and perform aggregation, each writing its result back to HDFS via the local DataNode. This result is then replicated as normal.&lt;br /&gt;
* At the moment, we plan regular data export &amp;lt;code&amp;gt;stat1001&amp;lt;/code&amp;gt;, who acts exclusively as a public webserver.&lt;br /&gt;
&lt;br /&gt;
=== Public Surfaces ===&lt;br /&gt;
&lt;br /&gt;
* ACL as outlined in the [https://rt.wikimedia.org/Ticket/Display.html?id=4433 RT ticket].&lt;br /&gt;
* Cross-datacenter connectivity (esams) requires a solution (public IP, or perhaps the existing bridge?)&lt;br /&gt;
&lt;br /&gt;
=== Services and Access Needs ===&lt;br /&gt;
&lt;br /&gt;
Many internal service dashboards and control panels:&lt;br /&gt;
&lt;br /&gt;
* Hue: HDFS web access; Hadoop job scheduling (via Oozie); Hive query dashboard (Beeswax)&lt;br /&gt;
** Hue WebUI Login authentication uses LDAP&lt;br /&gt;
** Can control privileges within the dashboard to granularly restrict access to particular services, &lt;br /&gt;
** Limited control can be exerted on resource use&lt;br /&gt;
** Dashboard access needed by analysts need access for job monitoring/control, and data access&lt;br /&gt;
* Hadoop Admin pages&lt;br /&gt;
** NameNode: Provides HDFS logs and system health overview. Cluster administrator access only.&lt;br /&gt;
** JobTracker, DataNode: provides logs and debugging output for Hadoop jobs. Access needed by analysts to debug.&lt;br /&gt;
* Storm&#039;s Nimbus: storm job monitoring and scheduling. Cluster administrator access only.&lt;br /&gt;
* Graphite: Application and host monitoring for the cluster. Cluster administrator access only.&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Software&amp;diff=653041</id>
		<title>Analytics/Kraken/Software</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Software&amp;diff=653041"/>
		<updated>2013-02-28T00:40:51Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Kraken Software Overview =&lt;br /&gt;
&lt;br /&gt;
== Software used in Kraken ==&lt;br /&gt;
&lt;br /&gt;
* Zookeeper&lt;br /&gt;
* Hadoop&lt;br /&gt;
** HDFS: NameNode, DataNode&lt;br /&gt;
** YARN: NodeManager, ResourceManager&lt;br /&gt;
* Hadoop tools:&lt;br /&gt;
** Hue&lt;br /&gt;
** Oozie&lt;br /&gt;
** Pig, Hive&lt;br /&gt;
** HTTPfs, webhdfs&lt;br /&gt;
** LDAP integration?&lt;br /&gt;
** Kerberos integration?&lt;br /&gt;
* Storm&lt;br /&gt;
** Nimbus, Supervisors, Bolts, Spouts&lt;br /&gt;
** (We will be writing bolts to perform the ETL tasks, and configuring the topology that links them together)&lt;br /&gt;
* ETL libraries:&lt;br /&gt;
** MaxMind GeoIP database&lt;br /&gt;
** dClass: User Agent parser&lt;br /&gt;
** Avro: Data serialization framework&lt;br /&gt;
** Camus: Kafka -&amp;gt; HDFS library&lt;br /&gt;
* Kafka&lt;br /&gt;
* Monitoring tools:&lt;br /&gt;
** jmxtrans&lt;br /&gt;
** Ganglia&lt;br /&gt;
** Graphite&lt;br /&gt;
&lt;br /&gt;
See the [[Analytics/Kraken/Overview|Kraken Overview]] for additional detail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Today ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;udp2log&amp;lt;/code&amp;gt; logs from the edge -&amp;gt; awk -&amp;gt; Kafka&lt;br /&gt;
* no ETL: cron import to HDFS from Kafka via MR job (this means IPs are in logs!)&lt;br /&gt;
* User authorization: via shell account, or group membership in labs LDAP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Network Profiles ==&lt;br /&gt;
&lt;br /&gt;
=== Network Usage ===&lt;br /&gt;
&lt;br /&gt;
Network usage by node type:&lt;br /&gt;
&lt;br /&gt;
* Kafka Brokers: 2x the full incoming stream (in from edge, out to ETL). Kafka uses its own protocol over TCP, and supports message bundling, compression, and live failover.&lt;br /&gt;
* Storm ETL workers: full stream sharded among nodes; Storm is smart about avoiding inter-node communication if a topology can completely fit on a single worker.&lt;br /&gt;
* A file in HDFS is made up of blocks; these blocks can be both local and remote to any given DataNode. HDFS replicates data 3x (configurable) for availability and durability – this means it will copy blocks between nodes to maintain the replication invariant. The NameNode acts as the coordinator for replication, and the authority for addressing files to blocks.&lt;br /&gt;
* HDFS is immutable (though it allows appends) – this means that &amp;quot;change&amp;quot; rewrites and replicates the entire block (our blocksize is configured at 256MB).&lt;br /&gt;
* A MapReduce job has two phases: the Mappers each read their section of the input from HDFS (with Hadoop ensuring the section is on local disk), and perform some work, emitting (key, value) pairs; Reducers then receive these tuples after a total ordering is applied (via the keys) and perform aggregation, each writing its result back to HDFS via the local DataNode. This result is then replicated as normal.&lt;br /&gt;
* At the moment, we plan regular data export &amp;lt;code&amp;gt;stat1001&amp;lt;/code&amp;gt;, who acts exclusively as a public webserver.&lt;br /&gt;
&lt;br /&gt;
=== Public Surfaces ===&lt;br /&gt;
&lt;br /&gt;
* ACL as outlined in the [https://rt.wikimedia.org/Ticket/Display.html?id=4433 RT ticket].&lt;br /&gt;
* Cross-datacenter connectivity (esams) requires a solution (public IP, or perhaps the existing bridge?)&lt;br /&gt;
&lt;br /&gt;
=== Services and Access Needs ===&lt;br /&gt;
&lt;br /&gt;
Many internal service dashboards and control panels:&lt;br /&gt;
&lt;br /&gt;
* Hue: HDFS web access; Hadoop job scheduling (via Oozie); Hive query dashboard (Beeswax)&lt;br /&gt;
** Hue WebUI Login authentication uses LDAP&lt;br /&gt;
** Can control privileges within the dashboard to granularly restrict access to particular services, &lt;br /&gt;
** Limited control can be exerted on resource use&lt;br /&gt;
** Dashboard access needed by analysts need access for job monitoring/control, and data access&lt;br /&gt;
* Hadoop Admin pages&lt;br /&gt;
** NameNode: Provides HDFS logs and system health overview. Cluster administrator access only.&lt;br /&gt;
** JobTracker, DataNode: provides logs and debugging output for Hadoop jobs. Access needed by analysts to debug.&lt;br /&gt;
* Storm&#039;s Nimbus: storm job monitoring and scheduling. Cluster administrator access only.&lt;br /&gt;
* Graphite: Application and host monitoring for the cluster. Cluster administrator access only.&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Software&amp;diff=653040</id>
		<title>Analytics/Kraken/Software</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken/Software&amp;diff=653040"/>
		<updated>2013-02-28T00:40:30Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Created page with &amp;quot;= Kraken Software Overview =  == Software used in Kraken ==  * Zookeeper * Hadoop ** HDFS: NameNode, DataNode ** YARN: NodeManager, ResourceManager * Hadoop tools: ** Hue ** O...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Kraken Software Overview =&lt;br /&gt;
&lt;br /&gt;
== Software used in Kraken ==&lt;br /&gt;
&lt;br /&gt;
* Zookeeper&lt;br /&gt;
* Hadoop&lt;br /&gt;
** HDFS: NameNode, DataNode&lt;br /&gt;
** YARN: NodeManager, ResourceManager&lt;br /&gt;
* Hadoop tools:&lt;br /&gt;
** Hue&lt;br /&gt;
** Oozie&lt;br /&gt;
** Pig, Hive&lt;br /&gt;
** HTTPfs, webhdfs&lt;br /&gt;
** LDAP integration?&lt;br /&gt;
** Kerberos integration?&lt;br /&gt;
* Storm&lt;br /&gt;
** Nimbus, Supervisors, Bolts, Spouts&lt;br /&gt;
** (We will be writing bolts to perform the ETL tasks, and configuring the topology that links them together)&lt;br /&gt;
* ETL libraries:&lt;br /&gt;
** MaxMind GeoIP database&lt;br /&gt;
** dClass: User Agent parser&lt;br /&gt;
** Avro: Data serialization framework&lt;br /&gt;
** Camus: Kafka -&amp;gt; HDFS library&lt;br /&gt;
* Kafka&lt;br /&gt;
* Monitoring tools:&lt;br /&gt;
** jmxtrans&lt;br /&gt;
** Ganglia&lt;br /&gt;
** Graphite&lt;br /&gt;
&lt;br /&gt;
See the [[Analytics/Kraken/Overview|Overview]] for additional detail.�&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Today ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;udp2log&amp;lt;/code&amp;gt; logs from the edge -&amp;gt; awk -&amp;gt; Kafka&lt;br /&gt;
* no ETL: cron import to HDFS from Kafka via MR job (this means IPs are in logs!)&lt;br /&gt;
* User authorization: via shell account, or group membership in labs LDAP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Network Profiles ==&lt;br /&gt;
&lt;br /&gt;
=== Network Usage ===&lt;br /&gt;
&lt;br /&gt;
Network usage by node type:&lt;br /&gt;
&lt;br /&gt;
* Kafka Brokers: 2x the full incoming stream (in from edge, out to ETL). Kafka uses its own protocol over TCP, and supports message bundling, compression, and live failover.&lt;br /&gt;
* Storm ETL workers: full stream sharded among nodes; Storm is smart about avoiding inter-node communication if a topology can completely fit on a single worker.&lt;br /&gt;
* A file in HDFS is made up of blocks; these blocks can be both local and remote to any given DataNode. HDFS replicates data 3x (configurable) for availability and durability – this means it will copy blocks between nodes to maintain the replication invariant. The NameNode acts as the coordinator for replication, and the authority for addressing files to blocks.&lt;br /&gt;
* HDFS is immutable (though it allows appends) – this means that &amp;quot;change&amp;quot; rewrites and replicates the entire block (our blocksize is configured at 256MB).&lt;br /&gt;
* A MapReduce job has two phases: the Mappers each read their section of the input from HDFS (with Hadoop ensuring the section is on local disk), and perform some work, emitting (key, value) pairs; Reducers then receive these tuples after a total ordering is applied (via the keys) and perform aggregation, each writing its result back to HDFS via the local DataNode. This result is then replicated as normal.&lt;br /&gt;
* At the moment, we plan regular data export &amp;lt;code&amp;gt;stat1001&amp;lt;/code&amp;gt;, who acts exclusively as a public webserver.&lt;br /&gt;
&lt;br /&gt;
=== Public Surfaces ===&lt;br /&gt;
&lt;br /&gt;
* ACL as outlined in the [https://rt.wikimedia.org/Ticket/Display.html?id=4433 RT ticket].&lt;br /&gt;
* Cross-datacenter connectivity (esams) requires a solution (public IP, or perhaps the existing bridge?)&lt;br /&gt;
&lt;br /&gt;
=== Services and Access Needs ===&lt;br /&gt;
&lt;br /&gt;
Many internal service dashboards and control panels:&lt;br /&gt;
&lt;br /&gt;
* Hue: HDFS web access; Hadoop job scheduling (via Oozie); Hive query dashboard (Beeswax)&lt;br /&gt;
** Hue WebUI Login authentication uses LDAP&lt;br /&gt;
** Can control privileges within the dashboard to granularly restrict access to particular services, &lt;br /&gt;
** Limited control can be exerted on resource use&lt;br /&gt;
** Dashboard access needed by analysts need access for job monitoring/control, and data access&lt;br /&gt;
* Hadoop Admin pages&lt;br /&gt;
** NameNode: Provides HDFS logs and system health overview. Cluster administrator access only.&lt;br /&gt;
** JobTracker, DataNode: provides logs and debugging output for Hadoop jobs. Access needed by analysts to debug.&lt;br /&gt;
* Storm&#039;s Nimbus: storm job monitoring and scheduling. Cluster administrator access only.&lt;br /&gt;
* Graphite: Application and host monitoring for the cluster. Cluster administrator access only.&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=653037</id>
		<title>Analytics/Kraken</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=653037"/>
		<updated>2013-02-28T00:35:13Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wikimedia engineering project information&lt;br /&gt;
| name        = Kraken (Analytics Cluster)&lt;br /&gt;
| description = A robust, distributed computing and data services platform.&lt;br /&gt;
| start       = 2011-05-22&lt;br /&gt;
| end         = &lt;br /&gt;
| group       = Analytics&lt;br /&gt;
| lead        = &lt;br /&gt;
| team        = [[User:Ottomata|Andrew Otto]], [[User:Dsc|David Schoonover]], [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
| previous    = &lt;br /&gt;
| next        = &lt;br /&gt;
| projectpage = Analytics/Kraken&lt;br /&gt;
| display     = {{{display|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Kraken is the code-name for the robust distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
= [[{{FULLPAGENAME}}/status|Status]] =&lt;br /&gt;
&lt;br /&gt;
{{Wikimedia project status line|{{FULLPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
= Rationale =&lt;br /&gt;
&lt;br /&gt;
The Wiki Movement has a chronic need for analytics. We need it to understand our editors, to encourage growth, to engender diversity, to focus our resources, to improve our engineering efforts, and to measure our success. It permeates nearly all our goals, yet our current analytics capabilities are underdeveloped: we lack infrastructure to capture editor, visitor, clickstream, and device data in a way that is easily accessible; our efforts are distributed among different departments; our data is fragmented over different systems and databases; our tools are ad-hoc.&lt;br /&gt;
&lt;br /&gt;
Rather than merely improve existing jobs and data pipelines, the Analytics Team aims to construct a Data Services Platform capable of mining intelligence from all datastreams of interest, providing this insight in real time, and exposing it via an API to power applications, mash up into websites, and stream to devices.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Access|Getting Access]]&lt;br /&gt;
* [[Analytics/Kraken/Overview|Overview]]&lt;br /&gt;
** [[Analytics/Kraken/Overview/Software|Software Overview]]&lt;br /&gt;
* [http://upload.wikimedia.org/wikipedia/mediawiki/1/1b/Kraken_flow_diagram-2.png Cluster Dataflow Diagram]&lt;br /&gt;
* &#039;&#039;&#039;Data&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Streams|Data Streams]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Security_Review_Meeting|Security Review Meeting notes]]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsKrakenTestClusterSetup Test Cluster Setup Notes]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsHadoopSetupNotes Hadoop Setup Notes]&lt;br /&gt;
** [[Analytics/Kraken/Blurbs|Blurbs About Kraken]]&lt;br /&gt;
** [https://docs.google.com/a/wikimedia.org/spreadsheet/ccc?key=0AvpRkIqSY9hNdEtRLVNoQWNvQzNleHBtTXR5emI3Z2c&amp;amp;pli=1#gid=5 Kraken Benchmarks]&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Pixel_Service|Pixel Service]] and [[Analytics/Kraken/Request_Logging|Request Logging]] ==&lt;br /&gt;
&lt;br /&gt;
Public data import endpoint, and system for capturing the incoming firehose from our front-end servers.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
** [[Analytics/Kraken/Request_Logging|System Recommendation]]&lt;br /&gt;
** [[Analytics/Kraken/Logging_Solutions_Overview|Distributed Logging Systems Research]]&lt;br /&gt;
** [https://docs.google.com/spreadsheet/pub?key=0AvpRkIqSY9hNdFNoYWFIX29hMnFuenV1ckRvYzEzUVE&amp;amp;gid=3 Feature Comparison Spreadsheet]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Work with Ori, Patrick, &amp;amp; ops to figure out Kafka producer situation for production [otto, dsc, ori, preilly, ops]&lt;br /&gt;
* MediaWiki EventLogging integration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/ETL|ETL Topology]] ==&lt;br /&gt;
&lt;br /&gt;
The [http://storm-project.net Storm] topology that processes incoming data (aka, &amp;quot;Extract-Transform-Load&amp;quot; in data warehousing jargon).&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/ETL|ETL Topology]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Maven + Nexus setup w/ storm pom [dsc]&lt;br /&gt;
* Storm Bolts:&lt;br /&gt;
** Consume from Kafka (by topic?)&lt;br /&gt;
** Serialize &amp;amp; canonicalize record using Avro schema&lt;br /&gt;
** GeoIP annotation&lt;br /&gt;
** Mobile carrier annotation (by IP)&lt;br /&gt;
** IP anonymization (where does the salt live? how often should we change it?)&lt;br /&gt;
** Append record to per-hour files in HDFS (path using timestamp, topic)&lt;br /&gt;
** Notifier Bolt to update Kafka consumer checkpoint (and/or publish event for external hooks)&lt;br /&gt;
* Define Avro schemas:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
*** Figure out convention for EventData packets to self-identify with a more specific schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Core_Jobs|Core Jobs]] ==&lt;br /&gt;
&lt;br /&gt;
Core data processing jobs for processing web requests and event data, maintained by the Analytics team.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Figure out request tagging -- how can we avoid mutating records?&lt;br /&gt;
* Reportcard Oozie workflow [DvL]&lt;br /&gt;
** Pig Macro for &amp;quot;typical request analytics&amp;quot;&lt;br /&gt;
* Figure out indexing scheme:&lt;br /&gt;
** Aggregated time buckets&lt;br /&gt;
** Referrer chains&lt;br /&gt;
** Event aggregations&lt;br /&gt;
** Funnel Analysis&lt;br /&gt;
*** A/B testing event data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Data_Tools|Data Tools]] ==&lt;br /&gt;
&lt;br /&gt;
Data processing library and toolkit provided &amp;amp; maintained by the Analytics team, esp for use with Kraken.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Setup regular sqoop imports [DvL]&lt;br /&gt;
* Avro De/Serialization storage format compatibility:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
* Build re-usable pig/hive library, outsource this to analysts as much as possible [DvL]&lt;br /&gt;
* KV-Pairs parsing tools&lt;br /&gt;
* Conversion funnel analysis tools&lt;br /&gt;
** A/B testing analysis tools&lt;br /&gt;
* MW EventLogging extension integration&lt;br /&gt;
* Investigate Ori&#039;s Mediawiki extension for instrumentation, sending event/edit data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Infrastructure|Infrastructure]] ==&lt;br /&gt;
&lt;br /&gt;
Bucket for general cluster infrastructure and maintenance tasks.&lt;br /&gt;
* [[Analytics/Kraken/Puppet|Kraken Puppetization]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Ports|JMX Ports]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Monitoring|JMX Monitoring Research]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fix the one busted Cisco machine (an07) [otto]&lt;br /&gt;
* Continue puppetization [otto]&lt;br /&gt;
* JMX Monitoring [otto, dsc]&lt;br /&gt;
* Investigate / experiment / benchmark Hadoop stack [DvL]&lt;br /&gt;
* Data owner services -- export, dashboard, visualizations (on Hue?) [dsc, dan]&lt;br /&gt;
** Hue plugin for Limn integration? [dsc]&lt;br /&gt;
* Get analysts experimenting with Hive/Pig [DvL]&lt;br /&gt;
* General purpose job-runner using Kafka+Storm&lt;br /&gt;
* Setup Hadoop FairScheduler [DvL]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Research =&lt;br /&gt;
&lt;br /&gt;
== Bundling ==&lt;br /&gt;
&lt;br /&gt;
Investigate size of savings of structure sharing via a short-term (between 1-30sec window) queue.&lt;br /&gt;
&lt;br /&gt;
* Reorder within window by timestamp? Seq number?&lt;br /&gt;
* Parameters of experiment:&lt;br /&gt;
** Buffer time: 1s, 2s, 5s, 10s&lt;br /&gt;
** Sharded by server&lt;br /&gt;
** Bundle by IP, UA, IP+UA&lt;br /&gt;
* Pull-up fields for structure sharing: &lt;br /&gt;
** Invariant: ip, ua, accept-lang, carrier&lt;br /&gt;
** Often invariant: method, status, referer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Hbase&lt;br /&gt;
* Hive&lt;br /&gt;
* Hue plugins&lt;br /&gt;
* Cascading -- do we even need this as we have Oozie?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
[[Category:WMF Projects/Analytics]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_Scrum&amp;diff=652939</id>
		<title>Analytics/Roadmap/PlanningMeetings/2013 Scrum</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_Scrum&amp;diff=652939"/>
		<updated>2013-02-27T19:39:49Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team Analytics scrum notes for 2013.&lt;br /&gt;
&lt;br /&gt;
= February 2013 =&lt;br /&gt;
&lt;br /&gt;
== Feb 25 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Secretary: Otto&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Merged viewport stuff into develop.&lt;br /&gt;
** Fixed bugs caused by merge (scatterplot mode, scaling, widget for fiddling with scale type).&lt;br /&gt;
** Going to work on metric definition&lt;br /&gt;
** Need to review canvas refactoring with Dan. (Geo-json, etc.)&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** Kafka puppet module reviewed and +1 by Faidon.&lt;br /&gt;
** Need review of Kafka Debianization&lt;br /&gt;
** Spent most of Friday working on git submodule puppet module merge wrapper, going to just diff files :/&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Friday&#039;s meetings&lt;br /&gt;
** getting together an agenda / format for next week&#039;s workshop on Monday and Tuesday&lt;br /&gt;
** going to review this with Erik + Gang.&lt;br /&gt;
** Following up on experiments (Mingle, improvement work)&lt;br /&gt;
** Consolodate findings with stakeholder groups.&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Gave a lightning talk about Kraken and Limn&lt;br /&gt;
** Refactored Geocoding + oozie + pig (YAY|!)&lt;br /&gt;
** Migrated only tasks we are currently working on into Mingle.&lt;br /&gt;
** Worked on Architecture review document&lt;br /&gt;
** Want to put together an overview of use cases of Kraken&lt;br /&gt;
&lt;br /&gt;
* Evan&lt;br /&gt;
** Messed around with Category Tree&lt;br /&gt;
** Trying to construct control set of articles for plagerism detection.&lt;br /&gt;
** Been working on Mediawiki -&amp;gt; git script.  &lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** Looked at David&#039;s changes for viewport canvas&lt;br /&gt;
** lots of meetings&lt;br /&gt;
** Going to finish tasks leftover from last sprint&lt;br /&gt;
** Want to realign as team to shoot for end of March to complete promises.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feb 26 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Secretary: David&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** Ops week! I am hanging out with Opsen!&lt;br /&gt;
** Wrote an Oozie tutorial as a braindump&lt;br /&gt;
** Wrapper script wrapping puppetmaster submodule creation and update. For submodules to be kosher, there needs to be a way to manually inspect the diff of the update. Submodules don&#039;t make that easy.&lt;br /&gt;
*** Bound the work at today -- not done? Weep &amp;amp; give up.&lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** Read through David&#039;s Viewport commits and merge&lt;br /&gt;
** Fixed some bugs that resulted from that&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Merged feature/viewport into develop&lt;br /&gt;
** Fixed ~11 bugs surfaced after the merge (ty to Dan for helping hunt)&lt;br /&gt;
** Today: Close the last bugs in in the Viewport refactor&lt;br /&gt;
** Add MetricDef Id to Datasource Columns&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Yesterday? Blocked! Going to Starve! due to the fact that this paycheck will arrive in TO only after I am in SF!&lt;br /&gt;
** Ported more Asana tasks to Mingle&lt;br /&gt;
** Spoke with Kraig about the architecture review meeting on Friday&lt;br /&gt;
** Started building work breakdown tree in mingle -- https://mingle.corp.wikimedia.org/projects/analytics/cards/tree?expands=81&amp;amp;tab=All&amp;amp;tree_name=Work+Breakdown+Structure&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Fleshed out Improvement Ideas in Mingle&lt;br /&gt;
** Setting up Mingle with Diederik&lt;br /&gt;
** Weekly Analytics Sync with Erik M, RobLa (Gayle out)&lt;br /&gt;
** Planned out Analytics Reboot Workshop (Mon/Tues) -- will be sharing Google Doc soon&lt;br /&gt;
** Continuing to plan Reboot (esp timing)&lt;br /&gt;
** Prep for Arch Review meeting (Diederik)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feb 27 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Secretary: Kraig&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** In ops meeting on event logging, ops seems to be OK with it&lt;br /&gt;
** Worked throughout meetings, got general approval from Faidon on deb, need Mark&#039;s review&lt;br /&gt;
** Trying to get kafka impl reviewed, told to use git build-package standards&lt;br /&gt;
** Making sure geocoding works in oozie&lt;br /&gt;
** Administration stuff from Ryan F&lt;br /&gt;
** Work out deploying Limn without running npm on target&lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** (travel)&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Fixed some bugs in Limn, rebooted Limn instances on Kripke&lt;br /&gt;
*** Permissions were wrong for /srv, causing Limn to die when trying to write browserify cache file (might have been during deploy script testing)&lt;br /&gt;
*** No monitoring on other instances on the same target server post-deploy -- deployer could validate, or could be part of process&lt;br /&gt;
** Today&lt;br /&gt;
*** Close out Limn Viewport refactoring task, including whatever Dan has for it&lt;br /&gt;
*** Start looking at creating a software Ecosystem Map for our projects &amp;amp; tech&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Hashed out more arch review meeting notes&lt;br /&gt;
** Want to work with otto on pros/cons in notes&lt;br /&gt;
** W0 Pig script&lt;br /&gt;
&lt;br /&gt;
* Evan&lt;br /&gt;
** onboarding new 2 contractors&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Planning Scheduling for analytics reboot workshop&lt;br /&gt;
** getting into more Mingle stuff, working with views etc.&lt;br /&gt;
*** Good to have a visual plan when discussing plans (diagrams, visuals, workflow maps, etc.)&lt;br /&gt;
** Today spending time on elaborating improvement ideas.&lt;br /&gt;
** Today&#039;s improvement meeting.&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_Scrum&amp;diff=652938</id>
		<title>Analytics/Roadmap/PlanningMeetings/2013 Scrum</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_Scrum&amp;diff=652938"/>
		<updated>2013-02-27T19:39:24Z</updated>

		<summary type="html">&lt;p&gt;Dsc: feb 27&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team Analytics scrum notes for 2013.&lt;br /&gt;
&lt;br /&gt;
= February 2013 =&lt;br /&gt;
&lt;br /&gt;
== Feb 25 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Secretary: Otto&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Merged viewport stuff into develop.&lt;br /&gt;
** Fixed bugs caused by merge (scatterplot mode, scaling, widget for fiddling with scale type).&lt;br /&gt;
** Going to work on metric definition&lt;br /&gt;
** Need to review canvas refactoring with Dan. (Geo-json, etc.)&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** Kafka puppet module reviewed and +1 by Faidon.&lt;br /&gt;
** Need review of Kafka Debianization&lt;br /&gt;
** Spent most of Friday working on git submodule puppet module merge wrapper, going to just diff files :/&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Friday&#039;s meetings&lt;br /&gt;
** getting together an agenda / format for next week&#039;s workshop on Monday and Tuesday&lt;br /&gt;
** going to review this with Erik + Gang.&lt;br /&gt;
** Following up on experiments (Mingle, improvement work)&lt;br /&gt;
** Consolodate findings with stakeholder groups.&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Gave a lightning talk about Kraken and Limn&lt;br /&gt;
** Refactored Geocoding + oozie + pig (YAY|!)&lt;br /&gt;
** Migrated only tasks we are currently working on into Mingle.&lt;br /&gt;
** Worked on Architecture review document&lt;br /&gt;
** Want to put together an overview of use cases of Kraken&lt;br /&gt;
&lt;br /&gt;
* Evan&lt;br /&gt;
** Messed around with Category Tree&lt;br /&gt;
** Trying to construct control set of articles for plagerism detection.&lt;br /&gt;
** Been working on Mediawiki -&amp;gt; git script.  &lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** Looked at David&#039;s changes for viewport canvas&lt;br /&gt;
** lots of meetings&lt;br /&gt;
** Going to finish tasks leftover from last sprint&lt;br /&gt;
** Want to realign as team to shoot for end of March to complete promises.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feb 26 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Secretary: David&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** Ops week! I am hanging out with Opsen!&lt;br /&gt;
** Wrote an Oozie tutorial as a braindump&lt;br /&gt;
** Wrapper script wrapping puppetmaster submodule creation and update. For submodules to be kosher, there needs to be a way to manually inspect the diff of the update. Submodules don&#039;t make that easy.&lt;br /&gt;
*** Bound the work at today -- not done? Weep &amp;amp; give up.&lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** Read through David&#039;s Viewport commits and merge&lt;br /&gt;
** Fixed some bugs that resulted from that&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Merged feature/viewport into develop&lt;br /&gt;
** Fixed ~11 bugs surfaced after the merge (ty to Dan for helping hunt)&lt;br /&gt;
** Today: Close the last bugs in in the Viewport refactor&lt;br /&gt;
** Add MetricDef Id to Datasource Columns&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Yesterday? Blocked! Going to Starve! due to the fact that this paycheck will arrive in TO only after I am in SF!&lt;br /&gt;
** Ported more Asana tasks to Mingle&lt;br /&gt;
** Spoke with Kraig about the architecture review meeting on Friday&lt;br /&gt;
** Started building work breakdown tree in mingle -- https://mingle.corp.wikimedia.org/projects/analytics/cards/tree?expands=81&amp;amp;tab=All&amp;amp;tree_name=Work+Breakdown+Structure&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Fleshed out Improvement Ideas in Mingle&lt;br /&gt;
** Setting up Mingle with Diederik&lt;br /&gt;
** Weekly Analytics Sync with Erik M, RobLa (Gayle out)&lt;br /&gt;
** Planned out Analytics Reboot Workshop (Mon/Tues) -- will be sharing Google Doc soon&lt;br /&gt;
** Continuing to plan Reboot (esp timing)&lt;br /&gt;
** Prep for Arch Review meeting (Diederik)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feb 27 ==&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** In ops meeting on event logging, ops seems to be OK with it&lt;br /&gt;
** Worked throughout meetings, got general approval from Faidon on deb, need Mark&#039;s review&lt;br /&gt;
** Trying to get kafka impl reviewed, told to use git build-package standards&lt;br /&gt;
** Making sure geocoding works in oozie&lt;br /&gt;
** Administration stuff from Ryan F&lt;br /&gt;
** Work out deploying Limn without running npm on target&lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** (travel)&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Fixed some bugs in Limn, rebooted Limn instances on Kripke&lt;br /&gt;
*** Permissions were wrong for /srv, causing Limn to die when trying to write browserify cache file (might have been during deploy script testing)&lt;br /&gt;
*** No monitoring on other instances on the same target server post-deploy -- deployer could validate, or could be part of process&lt;br /&gt;
** Today&lt;br /&gt;
*** Close out Limn Viewport refactoring task, including whatever Dan has for it&lt;br /&gt;
*** Start looking at creating a software Ecosystem Map for our projects &amp;amp; tech&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Hashed out more arch review meeting notes&lt;br /&gt;
** Want to work with otto on pros/cons in notes&lt;br /&gt;
** W0 Pig script&lt;br /&gt;
&lt;br /&gt;
* Evan&lt;br /&gt;
** onboarding new 2 contractors&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Planning Scheduling for analytics reboot workshop&lt;br /&gt;
** getting into more Mingle stuff, working with views etc.&lt;br /&gt;
*** Good to have a visual plan when discussing plans (diagrams, visuals, workflow maps, etc.)&lt;br /&gt;
** Today spending time on elaborating improvement ideas.&lt;br /&gt;
** Today&#039;s improvement meeting.&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_Scrum&amp;diff=652376</id>
		<title>Analytics/Roadmap/PlanningMeetings/2013 Scrum</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_Scrum&amp;diff=652376"/>
		<updated>2013-02-26T18:42:29Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team Analytics scrum notes for 2013.&lt;br /&gt;
&lt;br /&gt;
= February 2013 =&lt;br /&gt;
&lt;br /&gt;
== Feb 25 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Secretary: Otto&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Merged viewport stuff into develop.&lt;br /&gt;
** Fixed bugs caused by merge (scatterplot mode, scaling, widget for fiddling with scale type).&lt;br /&gt;
** Going to work on metric definition&lt;br /&gt;
** Need to review canvas refactoring with Dan. (Geo-json, etc.)&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** Kafka puppet module reviewed and +1 by Faidon.&lt;br /&gt;
** Need review of Kafka Debianization&lt;br /&gt;
** Spent most of Friday working on git submodule puppet module merge wrapper, going to just diff files :/&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Friday&#039;s meetings&lt;br /&gt;
** getting together an agenda / format for next week&#039;s workshop on Monday and Tuesday&lt;br /&gt;
** going to review this with Erik + Gang.&lt;br /&gt;
** Following up on experiments (Mingle, improvement work)&lt;br /&gt;
** Consolodate findings with stakeholder groups.&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Gave a lightning talk about Kraken and Limn&lt;br /&gt;
** Refactored Geocoding + oozie + pig (YAY|!)&lt;br /&gt;
** Migrated only tasks we are currently working on into Mingle.&lt;br /&gt;
** Worked on Architecture review document&lt;br /&gt;
** Want to put together an overview of use cases of Kraken&lt;br /&gt;
&lt;br /&gt;
* Evan&lt;br /&gt;
** Messed around with Category Tree&lt;br /&gt;
** Trying to construct control set of articles for plagerism detection.&lt;br /&gt;
** Been working on Mediawiki -&amp;gt; git script.  &lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** Looked at David&#039;s changes for viewport canvas&lt;br /&gt;
** lots of meetings&lt;br /&gt;
** Going to finish tasks leftover from last sprint&lt;br /&gt;
** Want to realign as team to shoot for end of March to complete promises.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feb 26 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Secretary: David&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** Ops week! I am hanging out with Opsen!&lt;br /&gt;
** Wrote an Oozie tutorial as a braindump&lt;br /&gt;
** Wrapper script wrapping puppetmaster submodule creation and update. For submodules to be kosher, there needs to be a way to manually inspect the diff of the update. Submodules don&#039;t make that easy.&lt;br /&gt;
*** Bound the work at today -- not done? Weep &amp;amp; give up.&lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** Read through David&#039;s Viewport commits and merge&lt;br /&gt;
** Fixed some bugs that resulted from that&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Merged feature/viewport into develop&lt;br /&gt;
** Fixed ~11 bugs surfaced after the merge (ty to Dan for helping hunt)&lt;br /&gt;
** Today: Close the last bugs in in the Viewport refactor&lt;br /&gt;
** Add MetricDef Id to Datasource Columns&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Yesterday? Blocked! Going to Starve! due to the fact that this paycheck will arrive in TO only after I am in SF!&lt;br /&gt;
** Ported more Asana tasks to Mingle&lt;br /&gt;
** Spoke with Kraig about the architecture review meeting on Friday&lt;br /&gt;
** Started building work breakdown tree in mingle -- https://mingle.corp.wikimedia.org/projects/analytics/cards/tree?expands=81&amp;amp;tab=All&amp;amp;tree_name=Work+Breakdown+Structure&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Fleshed out Improvement Ideas in Mingle&lt;br /&gt;
** Setting up Mingle with Diederik&lt;br /&gt;
** Weekly Analytics Sync with Erik M, RobLa (Gayle out)&lt;br /&gt;
** Planned out Analytics Reboot Workshop (Mon/Tues) -- will be sharing Google Doc soon&lt;br /&gt;
** Continuing to plan Reboot (esp timing)&lt;br /&gt;
** Prep for Arch Review meeting (Diederik)&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_Scrum&amp;diff=652374</id>
		<title>Analytics/Roadmap/PlanningMeetings/2013 Scrum</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings/2013_Scrum&amp;diff=652374"/>
		<updated>2013-02-26T18:41:02Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Created page with &amp;quot;Team Analytics scrum notes for 2013.  = February 2013 =  == Feb 25 ==  * David ** Merged viewport stuff into develop. ** Fixed bugs caused by merge (scatterplot mode, scaling,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Team Analytics scrum notes for 2013.&lt;br /&gt;
&lt;br /&gt;
= February 2013 =&lt;br /&gt;
&lt;br /&gt;
== Feb 25 ==&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Merged viewport stuff into develop.&lt;br /&gt;
** Fixed bugs caused by merge (scatterplot mode, scaling, widget for fiddling with scale type).&lt;br /&gt;
** Going to work on metric definition&lt;br /&gt;
** Need to review canvas refactoring with Dan. (Geo-json, etc.)&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** Kafka puppet module reviewed and +1 by Faidon.&lt;br /&gt;
** Need review of Kafka Debianization&lt;br /&gt;
** Spent most of Friday working on git submodule puppet module merge wrapper, going to just diff files :/&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Friday&#039;s meetings&lt;br /&gt;
** getting together an agenda / format for next week&#039;s workshop on Monday and Tuesday&lt;br /&gt;
** going to review this with Erik + Gang.&lt;br /&gt;
** Following up on experiments (Mingle, improvement work)&lt;br /&gt;
** Consolodate findings with stakeholder groups.&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Gave a lightning talk about Kraken and Limn&lt;br /&gt;
** Refactored Geocoding + oozie + pig (YAY|!)&lt;br /&gt;
** Migrated only tasks we are currently working on into Mingle.&lt;br /&gt;
** Worked on Architecture review document&lt;br /&gt;
** Want to put together an overview of use cases of Kraken&lt;br /&gt;
&lt;br /&gt;
* Evan&lt;br /&gt;
** Messed around with Category Tree&lt;br /&gt;
** Trying to construct control set of articles for plagerism detection.&lt;br /&gt;
** Been working on Mediawiki -&amp;gt; git script.  &lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** Looked at David&#039;s changes for viewport canvas&lt;br /&gt;
** lots of meetings&lt;br /&gt;
** Going to finish tasks leftover from last sprint&lt;br /&gt;
** Want to realign as team to shoot for end of March to complete promises.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Feb 26 ==&lt;br /&gt;
&lt;br /&gt;
* Otto&lt;br /&gt;
** Ops week! I am hanging out with Opsen!&lt;br /&gt;
** Wrote an Oozie tutorial as a braindump&lt;br /&gt;
** Wrapper script wrapping puppetmaster submodule creation and update. For submodules to be kosher, there needs to be a way to manually inspect the diff of the update. Submodules don&#039;t make that easy.&lt;br /&gt;
*** Bound the work at today -- not done? Weep &amp;amp; give up.&lt;br /&gt;
&lt;br /&gt;
* Dan&lt;br /&gt;
** Read through David&#039;s Viewport commits and merge&lt;br /&gt;
** Fixed some bugs that resulted from that&lt;br /&gt;
&lt;br /&gt;
* David&lt;br /&gt;
** Merged feature/viewport into develop&lt;br /&gt;
** Fixed ~11 bugs surfaced after the merge (ty to Dan for helping hunt)&lt;br /&gt;
** Today: Close the last bugs in in the Viewport refactor&lt;br /&gt;
** Add MetricDef Id to Datasource Columns&lt;br /&gt;
&lt;br /&gt;
* Diederik&lt;br /&gt;
** Yesterday? Blocked! Going to Starve! due to the fact that this paycheck will arrive in TO only after I am in SF!&lt;br /&gt;
** Ported more Asana tasks to Mingle&lt;br /&gt;
** Spoke with Kraig about the architecture review meeting on Friday&lt;br /&gt;
** Started building work breakdown tree in mingle -- https://mingle.corp.wikimedia.org/projects/analytics/cards/tree?expands=81&amp;amp;tab=All&amp;amp;tree_name=Work+Breakdown+Structure&lt;br /&gt;
&lt;br /&gt;
* Kraig&lt;br /&gt;
** Fleshed out Improvement Ideas in Mingle&lt;br /&gt;
** Setting up Mingle with Diederik&lt;br /&gt;
** Weekly Analytics Sync with Erik M, RobLa (Gayle out)&lt;br /&gt;
** Planned out Analytics Reboot Workshop (Mon/Tues) -- will be sharing Google Doc soon&lt;br /&gt;
** Continuing to plan Reboot (esp timing)&lt;br /&gt;
** Prep for Arch Review meeting (Diederik)&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings&amp;diff=652372</id>
		<title>Analytics/Roadmap/PlanningMeetings</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Roadmap/PlanningMeetings&amp;diff=652372"/>
		<updated>2013-02-26T18:39:26Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Adds scrum notes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Meeting notes for Team Analytics planning.&lt;br /&gt;
&lt;br /&gt;
= 2012 =&lt;br /&gt;
&lt;br /&gt;
* (Sept 20) [[Analytics/Roadmap/PlanningMeetings/2012_Sept_20|Autumnal Planning]] - Data Release Process; Sept-Oct Milestone Planning&lt;br /&gt;
* (Dec 12) [[Analytics/Roadmap/PlanningMeetings/2012_Q2_Quarterly_Review|Q2 Quarterly Review]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2013 =&lt;br /&gt;
&lt;br /&gt;
* (2013) [[Analytics/Roadmap/PlanningMeetings/2013_Scrum|Daily Scrum Notes]]&lt;br /&gt;
* (Feb 12) [[Analytics/Kraken/Security Review Meeting|Kraken Security Review]]&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Visualization,_Reporting_%26_Applications/Ideas&amp;diff=649028</id>
		<title>Analytics/Visualization, Reporting &amp; Applications/Ideas</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Visualization,_Reporting_%26_Applications/Ideas&amp;diff=649028"/>
		<updated>2013-02-19T21:28:19Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Created page with &amp;quot; == Data Repositories ==  * CKAN http://ckan.org/ -- http://docs.ckan.org/en/ckan-1.8/  === Gov-Related ===  * FEC filings from the last few decades: http://www.fec.gov/data/ ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Data Repositories ==&lt;br /&gt;
&lt;br /&gt;
* CKAN http://ckan.org/ -- http://docs.ckan.org/en/ckan-1.8/&lt;br /&gt;
&lt;br /&gt;
=== Gov-Related ===&lt;br /&gt;
&lt;br /&gt;
* FEC filings from the last few decades: http://www.fec.gov/data/&lt;br /&gt;
* Bills and legislators: http://www.govtrack.us/&lt;br /&gt;
* Lots of data, but hard to access: http://votesmart.org/&lt;br /&gt;
* A nice tool/repository for extracting and sharing data: https://scraperwiki.com/&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Overview&amp;diff=646026</id>
		<title>Analytics/Archive/Infrastructure/Overview</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Overview&amp;diff=646026"/>
		<updated>2013-02-13T22:25:25Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Glossary =&lt;br /&gt;
&lt;br /&gt;
;[[Analytics/Kraken|Kraken]]&lt;br /&gt;
: Kraken is the code-name for the distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
;[http://hadoop.apache.org/ Hadoop]&lt;br /&gt;
: A collection of services for batch processing of large data.  Core concepts are a distributed filesystem (HDFS) and MapReduce.&lt;br /&gt;
&lt;br /&gt;
;HDFS&lt;br /&gt;
: Hadoop Distributed Filesystem.&lt;br /&gt;
&lt;br /&gt;
;[http://archive.cloudera.com/cdh4/cdh/4/hadoop/hadoop-yarn/hadoop-yarn-site/YARN.html YARN]&lt;br /&gt;
: Yet-Another-Resource-Negotiator.  Compute resource manager and API for distributed applications.  MapReduce (v2) is a YARN application.  Although not technically correct, YARN is sometimes referred to as MRv2.&lt;br /&gt;
&lt;br /&gt;
;[http://en.wikipedia.org/wiki/MapReduce MapReduce]&lt;br /&gt;
: Programming model for parallelizing batch processing of large data sets.  Really good for counting things.  Hadoop ships with a Java implementation of MapReduce.&lt;br /&gt;
&lt;br /&gt;
;[http://cloudera.github.com/hue/ Hue]&lt;br /&gt;
: Hadoop User Experience.  Web GUI for various Hadoop services.  (HDFS, Oozie, Pig, Hive, etc.)  Written in Python Django.&lt;br /&gt;
&lt;br /&gt;
;[http://pig.apache.org/ Pig]&lt;br /&gt;
: High level language abstraction for common implementing MapReduce programs without thinking about the MapReduce model.  (Feels like a mix between SQL and awk).  Generates MapReduce programs that are run in Hadoop.&lt;br /&gt;
&lt;br /&gt;
;[http://hive.apache.org/ Hive]&lt;br /&gt;
: Projects structure onto flat data (text or binary) in HDFS and allows this data to be queried in an SQL like manner.  Analytics is not currently using Hive, although believe it will be useful for certain types of analysis as more clients have need.&lt;br /&gt;
&lt;br /&gt;
;[http://oozie.apache.org/ Oozie]&lt;br /&gt;
: Scheduler for Hadoop jobs.  Used for automated reporting based on data availability.&lt;br /&gt;
&lt;br /&gt;
;[http://storm-project.net/ Storm]&lt;br /&gt;
: Distributed real-time stream processing system. Useful for transformation and computation of streaming data.&lt;br /&gt;
&lt;br /&gt;
;[http://kafka.apache.org/ Kafka]&lt;br /&gt;
: Distributed pub/sub message queue.  Useful as a big ol&#039; reliable log buffer.&lt;br /&gt;
&lt;br /&gt;
;[http://zookeeper.apache.org/ Zookeeper]&lt;br /&gt;
: Highly reliable dynamic configuration store.  Instead of keeping configuration and simple state in flat files or a database, Zookeeper allows applications to be notified of configuration changes on the fly.&lt;br /&gt;
&lt;br /&gt;
;[http://www.cloudera.com/content/cloudera/en/about.html Cloudera]&lt;br /&gt;
: An organization that provides Hadoop ecosystem packages and documentation.  Kraken uses Cloudera&#039;s [https://ccp.cloudera.com/display/CDH4DOC/CDH4+Documentation CDH4] distribution.&lt;br /&gt;
&lt;br /&gt;
;webrequest log stream (aka firehose)&lt;br /&gt;
: The Analytics team has been referring to the web access logs generated from all WMF frontend cache webservers as &#039;webrequest logs&#039;.  The existent UDP stream is often referred to as the &#039;firehose&#039;, or the webrequest log stream.&lt;br /&gt;
&lt;br /&gt;
;event log stream&lt;br /&gt;
: bits varnishes are currently configured to send certain request data made to an &amp;lt;code&amp;gt;/event.gif&amp;lt;/code&amp;gt; endpoint serviced by the bits Varnish caches. This is intended to be used as a way to get generic application data into Kraken for analysis; the EventLogging extension also uses this endpoint.&lt;br /&gt;
&lt;br /&gt;
;[http://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html jmx]&lt;br /&gt;
: JMX (Java Management Extensions) is a widely-adopted JVM mechanism to expose VM and application metrics, state, and management features. Nearly all the above-listed technologies provide JMX metrics; for example, Kafka brokers expose BytesIn, BytesOut, FailedFetchRequests, FailedProduceRequests, and MessagesIn aggregated across all topics (as well as individually).  Kraken is using [https://github.com/jmxtrans/jmxtrans jmxtrans] to send relevant metrics to Ganglia and elsewhere.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
&lt;br /&gt;
First!  A summary of Kraken&#039;s current (as of Feburary 2013) setup.  The end of this document will contain a wishlist of the pieces of the architecture that we&#039;d like to change.&lt;br /&gt;
&lt;br /&gt;
Kraken can be used for many other things than processing the webrequest logs but as that is our primary source of big data and this is an overview document, the focus will be on describing the architecture to import, store, and analyze this data stream.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UDP Webrequest Log Stream ==&lt;br /&gt;
&lt;br /&gt;
Frontend cache servers (varnish, squid, and nginx) are all configured to send webrequest access logs over UDP to 3 destination hosts.  These are emery, locke, and oxygen.  oxygen is running a socat multicast relay that is consumable by nodes in eqiad.&lt;br /&gt;
&lt;br /&gt;
Analytics&#039; spring 2013 deliverables requires running analysis on unsampled mobile webrequest logs.  Node(s) in the analytics cluster run udp2log instances that filter for traffic from the 4 frontend varnish mobile hosts (cp1041-cp1044).  udp2log pipes this unsampled data into Kafka shell producers.&lt;br /&gt;
&lt;br /&gt;
== Log Buffering - Kafka ==&lt;br /&gt;
&lt;br /&gt;
Kraken is using [https://github.com/apache/kafka/blob/0.7.2/core/src/main/scala/kafka/tools/ProducerShell.scala kafka-producer-shell.sh] to send data from udp2log into Kafka.  The 2 Kafka brokers retain this data on disk for up to a week.  It is available for consumption by any Kafka consumer.  Kafka consumers specify a byte offset in a particular Kafka topic at which they would like to start reading, as well as a byte limit.  A byte limit of -1 means to read until the end of the topic is reached.&lt;br /&gt;
&lt;br /&gt;
Cron jobs running on a single analytics node are configured to ask Zookeeper for existing Kafka topics, and to consume particular topics into HDFS.  This is done via [https://github.com/wikimedia-incubator/kafka-hadoop-consumer kafka-hadoop-consumer] a Hadoop MapReduce job that consumes from Kafka and writes to HDFS.  kafka-hadoop-consumer saves its per-topic read state in Zookeeper, and uses this to know where it left off after the previous import.&lt;br /&gt;
&lt;br /&gt;
== Batch Analysis - Hadoop ==&lt;br /&gt;
&lt;br /&gt;
Raw imported data is saved in HDFS in the /wmf/raw directory.  Files in /wmf/raw are not world readable.  Analysis of these logs is done by various [https://github.com/wikimedia/kraken/tree/master/pig Pig scripts] and [https://github.com/wikimedia/kraken/tree/master/oozie Oozie job] scheduling, although we are (as of mid February 2013) working to clean and automate this process.  Hue is used extensively to browse data in HDFS and to edit and schedule and monitor Oozie jobs as they run.&lt;br /&gt;
&lt;br /&gt;
Oozie is used to schedule and chain runs of Pig scripts based on the availability of data in HDFS.  Workflows are triggered once the data is available, and are configured to provide the Pig scripts with the paths of HDFS files to use for a particular run.&lt;br /&gt;
&lt;br /&gt;
Oozie and Pig are generally configured to save the output of their analysis in /wmf/public directory of HDFS.  This directory is world readable and is intended to be available for visualization using Limn, or for analysts to download and do further custom analysis or processing.  It could also be used to trigger additional automated Oozie workflows.&lt;br /&gt;
&lt;br /&gt;
= Wishlist =&lt;br /&gt;
&lt;br /&gt;
Oh there are so many hacky pieces of this setup!  Here&#039;s what we&#039;d like to change:&lt;br /&gt;
&lt;br /&gt;
* We&#039;d love to run Kafka producers on the frontend cache webservers, rather than a single udp2log stream.  A single stream means that every NIC must receive every webrequest log byte.  Kafka is meant to be dynamically configured via Zookeeper.  Scaling it horizontally and automatic failover are built in.  If the frontends sent their data directly to Kafka, we could do away with the hacky and inefficient unsampled udp2log -&amp;gt; kafka shell producer setup we have currently.&lt;br /&gt;
&lt;br /&gt;
* The existing ETL phase has got to change.  The crappy kafka-hadoop-consumer spawned by a cron job to consume from Kafka topics into HDFS just sucks.  Replacement contenders are LinkedIn&#039;s [https://github.com/linkedin/camus Camus] and/or Storm.&lt;br /&gt;
&lt;br /&gt;
* We&#039;re importing raw webrequest logs, which contain sensitive data.  We would like to use Storm topologies to sanitize this data, as well as to do other transformations before the data is stored in HDFS.&lt;br /&gt;
&lt;br /&gt;
Below is the envisioned architecture in diagram form:&lt;br /&gt;
&lt;br /&gt;
= Envisioned Architecture Diagram =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|800px|Cluster Dataflow Diagram]]&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Overview&amp;diff=646023</id>
		<title>Analytics/Archive/Infrastructure/Overview</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Overview&amp;diff=646023"/>
		<updated>2013-02-13T22:22:42Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Adds links &amp;amp; examples for JMX.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Glossary =&lt;br /&gt;
&lt;br /&gt;
;[[Analytics/Kraken|Kraken]]&lt;br /&gt;
: Kraken is the code-name for the distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
;[http://hadoop.apache.org/ Hadoop]&lt;br /&gt;
: A collection of services for batch processing of large data.  Core concepts are a distributed filesystem (HDFS) and MapReduce.&lt;br /&gt;
&lt;br /&gt;
;HDFS&lt;br /&gt;
: Hadoop Distributed Filesystem.&lt;br /&gt;
&lt;br /&gt;
;[http://archive.cloudera.com/cdh4/cdh/4/hadoop/hadoop-yarn/hadoop-yarn-site/YARN.html YARN]&lt;br /&gt;
: Yet-Another-Resource-Negotiator.  Compute resource manager and API for distributed applications.  MapReduce (v2) is a YARN application.  Although not technically correct, YARN is sometimes referred to as MRv2.&lt;br /&gt;
&lt;br /&gt;
;[http://en.wikipedia.org/wiki/MapReduce MapReduce]&lt;br /&gt;
: Programming model for parallelizing batch processing of large data sets.  Really good for counting things.  Hadoop ships with a Java implementation of MapReduce.&lt;br /&gt;
&lt;br /&gt;
;[http://cloudera.github.com/hue/ Hue]&lt;br /&gt;
: Hadoop User Experience.  Web GUI for various Hadoop services.  (HDFS, Oozie, Pig, Hive, etc.)  Written in Python Django.&lt;br /&gt;
&lt;br /&gt;
;[http://pig.apache.org/ Pig]&lt;br /&gt;
: High level language abstraction for common implementing MapReduce programs without thinking about the MapReduce model.  (Feels like a mix between SQL and awk).  Generates MapReduce programs that are run in Hadoop.&lt;br /&gt;
&lt;br /&gt;
;[http://hive.apache.org/ Hive]&lt;br /&gt;
: Projects structure onto flat data (text or binary) in HDFS and allows this data to be queried in an SQL like manner.  Analytics is not currently using Hive, although believe it will be useful for certain types of analysis as more clients have need.&lt;br /&gt;
&lt;br /&gt;
;[http://oozie.apache.org/ Oozie]&lt;br /&gt;
: Scheduler for Hadoop jobs.  Used for automated reporting based on data availability.&lt;br /&gt;
&lt;br /&gt;
;[http://storm-project.net/ Storm]&lt;br /&gt;
: Distributed stream processing system.  Useful for transformation and computation of streaming data.&lt;br /&gt;
&lt;br /&gt;
;[http://kafka.apache.org/ Kafka]&lt;br /&gt;
: Distributed pub/sub message queue.  Useful as a big ol&#039; reliable log buffer.&lt;br /&gt;
&lt;br /&gt;
;[http://zookeeper.apache.org/ Zookeeper]&lt;br /&gt;
: Highly reliable dynamic configuration store.  Instead of keeping configuration and simple state in flat files or a database, Zookeeper allows applications to be notified of configuration changes on the fly.&lt;br /&gt;
&lt;br /&gt;
;[http://www.cloudera.com/content/cloudera/en/about.html Cloudera]&lt;br /&gt;
: An organization that provides Hadoop ecosystem packages and documentation.  Kraken uses Cloudera&#039;s [https://ccp.cloudera.com/display/CDH4DOC/CDH4+Documentation CDH4] distribution.&lt;br /&gt;
&lt;br /&gt;
;webrequest log stream (aka firehose)&lt;br /&gt;
: The Analytics team has been referring to the web access logs generated from all WMF frontend cache webservers as &#039;webrequest logs&#039;.  The existent UDP stream is often referred to as the &#039;firehose&#039;, or the webrequest log stream.&lt;br /&gt;
&lt;br /&gt;
;event log stream&lt;br /&gt;
: bits varnishes are currently configured to send certain request data made to an &amp;lt;code&amp;gt;/event.gif&amp;lt;/code&amp;gt; endpoint serviced by the bits Varnish caches. This is intended to be used as a way to get generic application data into Kraken for analysis; the EventLogging extension also uses this endpoint.&lt;br /&gt;
&lt;br /&gt;
;[http://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html jmx]&lt;br /&gt;
: JMX (Java Management Extensions) is a widely-adopted JVM mechanism to expose VM and application metrics, state, and management features. Nearly all the above-listed technologies provide JMX metrics; for example, Kafka brokers expose BytesIn, BytesOut, FailedFetchRequests, FailedProduceRequests, and MessagesIn aggregated across all topics (as well as individually).  Kraken is using [https://github.com/jmxtrans/jmxtrans jmxtrans] to send relevant metrics to Ganglia and elsewhere.&lt;br /&gt;
&lt;br /&gt;
= Architecture =&lt;br /&gt;
&lt;br /&gt;
First!  A summary of Kraken&#039;s current (as of Feburary 2013) setup.  The end of this document will contain a wishlist of the pieces of the architecture that we&#039;d like to change.&lt;br /&gt;
&lt;br /&gt;
Kraken can be used for many other things than processing the webrequest logs but as that is our primary source of big data and this is an overview document, the focus will be on describing the architecture to import, store, and analyze this data stream.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UDP Webrequest Log Stream ==&lt;br /&gt;
&lt;br /&gt;
Frontend cache servers (varnish, squid, and nginx) are all configured to send webrequest access logs over UDP to 3 destination hosts.  These are emery, locke, and oxygen.  oxygen is running a socat multicast relay that is consumable by nodes in eqiad.&lt;br /&gt;
&lt;br /&gt;
Analytics&#039; spring 2013 deliverables requires running analysis on unsampled mobile webrequest logs.  Node(s) in the analytics cluster run udp2log instances that filter for traffic from the 4 frontend varnish mobile hosts (cp1041-cp1044).  udp2log pipes this unsampled data into Kafka shell producers.&lt;br /&gt;
&lt;br /&gt;
== Log Buffering - Kafka ==&lt;br /&gt;
&lt;br /&gt;
Kraken is using [https://github.com/apache/kafka/blob/0.7.2/core/src/main/scala/kafka/tools/ProducerShell.scala kafka-producer-shell.sh] to send data from udp2log into Kafka.  The 2 Kafka brokers retain this data on disk for up to a week.  It is available for consumption by any Kafka consumer.  Kafka consumers specify a byte offset in a particular Kafka topic at which they would like to start reading, as well as a byte limit.  A byte limit of -1 means to read until the end of the topic is reached.&lt;br /&gt;
&lt;br /&gt;
Cron jobs running on a single analytics node are configured to ask Zookeeper for existing Kafka topics, and to consume particular topics into HDFS.  This is done via [https://github.com/wikimedia-incubator/kafka-hadoop-consumer kafka-hadoop-consumer] a Hadoop MapReduce job that consumes from Kafka and writes to HDFS.  kafka-hadoop-consumer saves its per-topic read state in Zookeeper, and uses this to know where it left off after the previous import.&lt;br /&gt;
&lt;br /&gt;
== Batch Analysis - Hadoop ==&lt;br /&gt;
&lt;br /&gt;
Raw imported data is saved in HDFS in the /wmf/raw directory.  Files in /wmf/raw are not world readable.  Analysis of these logs is done by various [https://github.com/wikimedia/kraken/tree/master/pig Pig scripts] and [https://github.com/wikimedia/kraken/tree/master/oozie Oozie job] scheduling, although we are (as of mid February 2013) working to clean and automate this process.  Hue is used extensively to browse data in HDFS and to edit and schedule and monitor Oozie jobs as they run.&lt;br /&gt;
&lt;br /&gt;
Oozie is used to schedule and chain runs of Pig scripts based on the availability of data in HDFS.  Workflows are triggered once the data is available, and are configured to provide the Pig scripts with the paths of HDFS files to use for a particular run.&lt;br /&gt;
&lt;br /&gt;
Oozie and Pig are generally configured to save the output of their analysis in /wmf/public directory of HDFS.  This directory is world readable and is intended to be available for visualization using Limn, or for analysts to download and do further custom analysis or processing.  It could also be used to trigger additional automated Oozie workflows.&lt;br /&gt;
&lt;br /&gt;
= Wishlist =&lt;br /&gt;
&lt;br /&gt;
Oh there are so many hacky pieces of this setup!  Here&#039;s what we&#039;d like to change:&lt;br /&gt;
&lt;br /&gt;
* We&#039;d love to run Kafka producers on the frontend cache webservers, rather than a single udp2log stream.  A single stream means that every NIC must receive every webrequest log byte.  Kafka is meant to be dynamically configured via Zookeeper.  Scaling it horizontally and automatic failover are built in.  If the frontends sent their data directly to Kafka, we could do away with the hacky and inefficient unsampled udp2log -&amp;gt; kafka shell producer setup we have currently.&lt;br /&gt;
&lt;br /&gt;
* The existing ETL phase has got to change.  The crappy kafka-hadoop-consumer spawned by a cron job to consume from Kafka topics into HDFS just sucks.  Replacement contenders are LinkedIn&#039;s [https://github.com/linkedin/camus Camus] and/or Storm.&lt;br /&gt;
&lt;br /&gt;
* We&#039;re importing raw webrequest logs, which contain sensitive data.  We would like to use Storm topologies to sanitize this data, as well as to do other transformations before the data is stored in HDFS.&lt;br /&gt;
&lt;br /&gt;
Below is the envisioned architecture in diagram form:&lt;br /&gt;
&lt;br /&gt;
= Envisioned Architecture Diagram =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|800px|Cluster Dataflow Diagram]]&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/SecurityReview&amp;diff=645282</id>
		<title>Analytics/Archive/Infrastructure/Meetings/SecurityReview</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/SecurityReview&amp;diff=645282"/>
		<updated>2013-02-13T00:01:15Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Original Suggested Agenda =&lt;br /&gt;
&lt;br /&gt;
This is an outline of information and topics that might be of interest to discuss. It&#039;s not intended as comprehensive, just a starting point. Feel free to add/edit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
There&#039;s been some discussion of swapping this meeting with the Arch Review meeting, so we can work out any questions with the components before discussing their security implications. Either way, we&#039;ll probably want a brief overview of the architecture before moving forward.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cluster Security ==&lt;br /&gt;
&lt;br /&gt;
=== Public Surfaces ===&lt;br /&gt;
&lt;br /&gt;
* ACL as outlined in the [https://rt.wikimedia.org/Ticket/Display.html?id=4433 RT ticket].&lt;br /&gt;
* Cross-datacenter connectivity (esams) requires a solution (public IP, or perhaps the existing bridge?)&lt;br /&gt;
&lt;br /&gt;
=== Services and Access Needs ===&lt;br /&gt;
&lt;br /&gt;
Many internal service dashboards and control panels:&lt;br /&gt;
&lt;br /&gt;
* Hue: HDFS web access; Hadoop job scheduling (via Oozie); Hive query dashboard (Beeswax)&lt;br /&gt;
** Hue WebUI Login authentication uses LDAP&lt;br /&gt;
** Can control privileges within the dashboard to granularly restrict access to particular services, &lt;br /&gt;
** Limited control can be exerted on resource use&lt;br /&gt;
** Dashboard access needed by analysts need access for job monitoring/control, and data access&lt;br /&gt;
* Hadoop Admin pages&lt;br /&gt;
** NameNode: Provides HDFS logs and system health overview. Cluster administrator access only.&lt;br /&gt;
** JobTracker, DataNode: provides logs and debugging output for Hadoop jobs. Access needed by analysts to debug.&lt;br /&gt;
* Storm&#039;s Nimbus: storm job monitoring and scheduling. Cluster administrator access only.&lt;br /&gt;
* Graphite: Application and host monitoring for the cluster. Cluster administrator access only.&lt;br /&gt;
&lt;br /&gt;
=== HDFS ===&lt;br /&gt;
&lt;br /&gt;
* http://blog.cloudera.com/blog/2012/03/authorization-and-authentication-in-hadoop/&lt;br /&gt;
* &amp;lt;code&amp;gt;hdfs&amp;lt;/code&amp;gt; is the superuser within the HDFS file system. Hadoop piggybacks on Unix users/groups, but uses its own protocols for communication, not the shell (ssh). This means being logged in as the &amp;lt;code&amp;gt;hdfs&amp;lt;/code&amp;gt; Unix account is sufficient to take actions using the Hadoop shell tools as &amp;lt;code&amp;gt;hdfs&amp;lt;/code&amp;gt;, the superuser. Hadoop provides an optional Kerberos layer to provide authentication, but there are other solutions, such as firewalling off the NameNode using iptables to ensure only whitelisted nodes from connecting to the HDFS cluster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Retention ==&lt;br /&gt;
&lt;br /&gt;
=== What Potentially Private or Sensitive Data is there? ===&lt;br /&gt;
&lt;br /&gt;
* IP addresses&lt;br /&gt;
* Browsing activity (including edits) correlated with Usernames &amp;amp; IPs&lt;br /&gt;
* Data leakage via search queries / referrers&lt;br /&gt;
* Low-entropy Data:&lt;br /&gt;
** Precise geographic information about all activity&lt;br /&gt;
** Login/Logout by IP across all web properties&lt;br /&gt;
&lt;br /&gt;
=== Raw Logs ===&lt;br /&gt;
&lt;br /&gt;
* First persistantly stored in Kafka brokers; buffer window is 7 days ([http://kafka.apache.org/configuration.html log.retention.hours]=168), and automatically deleted afterward&lt;br /&gt;
* ETL anonymization pipeline sees raw data, removes IPs (salted hash) after geo lookup&lt;br /&gt;
&lt;br /&gt;
=== Policies ===&lt;br /&gt;
&lt;br /&gt;
* Never publish raw logs or unaggregated datasets&lt;br /&gt;
* Raw logs only accessible by those who have signed the Data NDA.&lt;br /&gt;
** Can control HDFS file permissions via LDAP groups, allowing segregation of NDA/non-NDA data access, private data import, etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legacy ==&lt;br /&gt;
&lt;br /&gt;
This pertains only to the current, legacy system, but raw archival logs currently exist back to 2011 containing unsanitized IPs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Something must be done about this!&#039;&#039;&#039; GeoIP then hash the IPs, and replace them in the logs! Offsite the files if we &#039;&#039;&#039;really&#039;&#039;&#039; need backups?&lt;br /&gt;
* wikistats processes all of time at once, and frequently has errors that require recomputation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Meeting Notes =&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
Quick summary of notes / take-aways from the Analytics (Kraken) security review meeting.&lt;br /&gt;
&lt;br /&gt;
* analytics1001 has been wiped and reimaged (restoring /home from backup)&lt;br /&gt;
* All proxies and externally-facing services have been disabled.&lt;br /&gt;
* Work is under way to bring everything that was puppetized under the analytics1001 puppetmaster into operations-puppet after proper review. Andrew is working closely with a number of people in ops to make this happen.&lt;br /&gt;
* All future deployments to the cluster will be puppetized and go through normal code review. Other than performance testing, these puppet confs will be tested in labs.&lt;br /&gt;
* The rest of the cluster will be wiped and reimaged out of puppet; data in HDFS will be preserved. This can be a rolling process allowing work to proceed while its under way.&lt;br /&gt;
* Schedule an Architectural Review meeting sometime during the SF Ops hackathon, including a look at  additional services and auth methods that provide access to internal dashboards like Hue &amp;amp;such.&lt;br /&gt;
* Ensure all current &amp;quot;application&amp;quot; code (stuff written by WMF) gets reviewed:&lt;br /&gt;
** Cron doing HDFS import from Kafka&lt;br /&gt;
** Pig UDFs and other data tools used in processing&lt;br /&gt;
** Future: Storm ETL layer&lt;br /&gt;
&lt;br /&gt;
We all agreed the overall goal is to get to an acceptable security state. During that process, the Analytics team still needs to continue to meet stakeholder needs and deliver on promises. We decided on keeping running a &amp;quot;minimum viable cluster&amp;quot; while reimaging boxes and civilizing cluster configuration:&lt;br /&gt;
&lt;br /&gt;
* Wall off some portion of the boxes to continue recieving data and running jobs; all other boxes can be wiped (preserving HDFS partitions). Boxes would be incrementally removed from the &amp;quot;unsanitary&amp;quot; cluster, reimaged, and then added to the &amp;quot;sanitary&amp;quot; cluster. Stupid bathroom-related jokes to be avoided.&lt;br /&gt;
* Team Analytics to enumerate data processing jobs that will be running in the intermediate period; their configurations and tooling will be reviewed.&lt;br /&gt;
* Analytics and Ops engineers continue to have shell access. Jobs can be submitted and managed using the CLI tools; internal dashboards can be accessed via SSH tunnelling. Analysts working on the cluster will be approved for shell access on a case-by-case basis (afaik, just Evan Rosen (full-time analyst for Grantmaking &amp;amp; Programs), and Stefan Petrea (contractor for Analytics)).&lt;br /&gt;
* No public, external access of any box in either zone (including proxied, dashboards like Hue, or even static files) that hasn&#039;t gone through review.&lt;br /&gt;
* Analytics and Ops will work together to find a simple, acceptable mechanism for data export.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Next Steps ==&lt;br /&gt;
&lt;br /&gt;
* Analytics puppet manfiests fully reviewed and merged into master operations-puppet repository&lt;br /&gt;
** Andrew to come pow-wow before the SF Ops hackathon and buddy it up with ops to plow through some of this.&lt;br /&gt;
* Schedule Architecture Review&lt;br /&gt;
* Rolling reimaging of all analytics boxes (including hadoop data nodes but preserving data) implementing this &amp;quot;minimal viable cluster&amp;quot; plan.&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/SecurityReview&amp;diff=645279</id>
		<title>Analytics/Archive/Infrastructure/Meetings/SecurityReview</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Archive/Infrastructure/Meetings/SecurityReview&amp;diff=645279"/>
		<updated>2013-02-13T00:00:43Z</updated>

		<summary type="html">&lt;p&gt;Dsc: Meeting Notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Original Suggested Agenda =&lt;br /&gt;
&lt;br /&gt;
This is an outline of information and topics that might be of interest to discuss. It&#039;s not intended as comprehensive, just a starting point. Feel free to add/edit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
There&#039;s been some discussion of swapping this meeting with the Arch Review meeting, so we can work out any questions with the components before discussing their security implications. Either way, we&#039;ll probably want a brief overview of the architecture before moving forward.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cluster Security ==&lt;br /&gt;
&lt;br /&gt;
=== Public Surfaces ===&lt;br /&gt;
&lt;br /&gt;
* ACL as outlined in the [https://rt.wikimedia.org/Ticket/Display.html?id=4433 RT ticket].&lt;br /&gt;
* Cross-datacenter connectivity (esams) requires a solution (public IP, or perhaps the existing bridge?)&lt;br /&gt;
&lt;br /&gt;
=== Services and Access Needs ===&lt;br /&gt;
&lt;br /&gt;
Many internal service dashboards and control panels:&lt;br /&gt;
&lt;br /&gt;
* Hue: HDFS web access; Hadoop job scheduling (via Oozie); Hive query dashboard (Beeswax)&lt;br /&gt;
** Hue WebUI Login authentication uses LDAP&lt;br /&gt;
** Can control privileges within the dashboard to granularly restrict access to particular services, &lt;br /&gt;
** Limited control can be exerted on resource use&lt;br /&gt;
** Dashboard access needed by analysts need access for job monitoring/control, and data access&lt;br /&gt;
* Hadoop Admin pages&lt;br /&gt;
** NameNode: Provides HDFS logs and system health overview. Cluster administrator access only.&lt;br /&gt;
** JobTracker, DataNode: provides logs and debugging output for Hadoop jobs. Access needed by analysts to debug.&lt;br /&gt;
* Storm&#039;s Nimbus: storm job monitoring and scheduling. Cluster administrator access only.&lt;br /&gt;
* Graphite: Application and host monitoring for the cluster. Cluster administrator access only.&lt;br /&gt;
&lt;br /&gt;
=== HDFS ===&lt;br /&gt;
&lt;br /&gt;
* http://blog.cloudera.com/blog/2012/03/authorization-and-authentication-in-hadoop/&lt;br /&gt;
* &amp;lt;code&amp;gt;hdfs&amp;lt;/code&amp;gt; is the superuser within the HDFS file system. Hadoop piggybacks on Unix users/groups, but uses its own protocols for communication, not the shell (ssh). This means being logged in as the &amp;lt;code&amp;gt;hdfs&amp;lt;/code&amp;gt; Unix account is sufficient to take actions using the Hadoop shell tools as &amp;lt;code&amp;gt;hdfs&amp;lt;/code&amp;gt;, the superuser. Hadoop provides an optional Kerberos layer to provide authentication, but there are other solutions, such as firewalling off the NameNode using iptables to ensure only whitelisted nodes from connecting to the HDFS cluster.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Data Retention ==&lt;br /&gt;
&lt;br /&gt;
=== What Potentially Private or Sensitive Data is there? ===&lt;br /&gt;
&lt;br /&gt;
* IP addresses&lt;br /&gt;
* Browsing activity (including edits) correlated with Usernames &amp;amp; IPs&lt;br /&gt;
* Data leakage via search queries / referrers&lt;br /&gt;
* Low-entropy Data:&lt;br /&gt;
** Precise geographic information about all activity&lt;br /&gt;
** Login/Logout by IP across all web properties&lt;br /&gt;
&lt;br /&gt;
=== Raw Logs ===&lt;br /&gt;
&lt;br /&gt;
* First persistantly stored in Kafka brokers; buffer window is 7 days ([http://kafka.apache.org/configuration.html log.retention.hours]=168), and automatically deleted afterward&lt;br /&gt;
* ETL anonymization pipeline sees raw data, removes IPs (salted hash) after geo lookup&lt;br /&gt;
&lt;br /&gt;
=== Policies ===&lt;br /&gt;
&lt;br /&gt;
* Never publish raw logs or unaggregated datasets&lt;br /&gt;
* Raw logs only accessible by those who have signed the Data NDA.&lt;br /&gt;
** Can control HDFS file permissions via LDAP groups, allowing segregation of NDA/non-NDA data access, private data import, etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legacy ==&lt;br /&gt;
&lt;br /&gt;
This pertains only to the current, legacy system, but raw archival logs currently exist back to 2011 containing unsanitized IPs.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Something must be done about this!&#039;&#039;&#039; GeoIP then hash the IPs, and replace them in the logs! Offsite the files if we &#039;&#039;&#039;really&#039;&#039;&#039; need backups?&lt;br /&gt;
* wikistats processes all of time at once, and frequently has errors that require recomputation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Meeting Notes =&lt;br /&gt;
&lt;br /&gt;
quick summary of notes / take-aways from the Analytics (Kraken) security review meeting.&lt;br /&gt;
&lt;br /&gt;
* analytics1001 has been wiped and reimaged (restoring /home from backup)&lt;br /&gt;
* All proxies and externally-facing services have been disabled.&lt;br /&gt;
* Work is under way to bring everything that was puppetized under the analytics1001 puppetmaster into operations-puppet after proper review. Andrew is working closely with a number of people in ops to make this happen.&lt;br /&gt;
* All future deployments to the cluster will be puppetized and go through normal code review. Other than performance testing, these puppet confs will be tested in labs.&lt;br /&gt;
* The rest of the cluster will be wiped and reimaged out of puppet; data in HDFS will be preserved. This can be a rolling process allowing work to proceed while its under way.&lt;br /&gt;
* Schedule an Architectural Review meeting sometime during the SF Ops hackathon, including a look at  additional services and auth methods that provide access to internal dashboards like Hue &amp;amp;such.&lt;br /&gt;
* Ensure all current &amp;quot;application&amp;quot; code (stuff written by WMF) gets reviewed:&lt;br /&gt;
** Cron doing HDFS import from Kafka&lt;br /&gt;
** Pig UDFs and other data tools used in processing&lt;br /&gt;
** Future: Storm ETL layer&lt;br /&gt;
&lt;br /&gt;
We all agreed the overall goal is to get to an acceptable security state. During that process, the Analytics team still needs to continue to meet stakeholder needs and deliver on promises. We decided on keeping running a &amp;quot;minimum viable cluster&amp;quot; while reimaging boxes and civilizing cluster configuration:&lt;br /&gt;
&lt;br /&gt;
* Wall off some portion of the boxes to continue recieving data and running jobs; all other boxes can be wiped (preserving HDFS partitions). Boxes would be incrementally removed from the &amp;quot;unsanitary&amp;quot; cluster, reimaged, and then added to the &amp;quot;sanitary&amp;quot; cluster. Stupid bathroom-related jokes to be avoided.&lt;br /&gt;
* Team Analytics to enumerate data processing jobs that will be running in the intermediate period; their configurations and tooling will be reviewed.&lt;br /&gt;
* Analytics and Ops engineers continue to have shell access. Jobs can be submitted and managed using the CLI tools; internal dashboards can be accessed via SSH tunnelling. Analysts working on the cluster will be approved for shell access on a case-by-case basis (afaik, just Evan Rosen (full-time analyst for Grantmaking &amp;amp; Programs), and Stefan Petrea (contractor for Analytics)).&lt;br /&gt;
* No public, external access of any box in either zone (including proxied, dashboards like Hue, or even static files) that hasn&#039;t gone through review.&lt;br /&gt;
* Analytics and Ops will work together to find a simple, acceptable mechanism for data export.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Next Steps ==&lt;br /&gt;
&lt;br /&gt;
* Analytics puppet manfiests fully reviewed and merged into master operations-puppet repository&lt;br /&gt;
** Andrew to come pow-wow before the SF Ops hackathon and buddy it up with ops to plow through some of this.&lt;br /&gt;
* Schedule Architecture Review&lt;br /&gt;
* Rolling reimaging of all analytics boxes (including hadoop data nodes but preserving data) implementing this &amp;quot;minimal viable cluster&amp;quot; plan.&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
	<entry>
		<id>https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=645150</id>
		<title>Analytics/Kraken</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.org/w/index.php?title=Analytics/Kraken&amp;diff=645150"/>
		<updated>2013-02-12T19:39:24Z</updated>

		<summary type="html">&lt;p&gt;Dsc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wikimedia engineering project information&lt;br /&gt;
| name        = Kraken (Analytics Cluster)&lt;br /&gt;
| description = A robust, distributed computing and data services platform.&lt;br /&gt;
| start       = 2011-05-22&lt;br /&gt;
| end         = &lt;br /&gt;
| group       = Analytics&lt;br /&gt;
| lead        = &lt;br /&gt;
| team        = [[User:Ottomata|Andrew Otto]], [[User:Dsc|David Schoonover]], [[User:Diederik|Diederik van Liere]]&lt;br /&gt;
| previous    = &lt;br /&gt;
| next        = &lt;br /&gt;
| projectpage = Analytics/Kraken&lt;br /&gt;
| display     = {{{display|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Kraken is the code-name for the robust distributed computing and data-services platform under construction by the Wikimedia Analytics Team.&lt;br /&gt;
&lt;br /&gt;
= [[{{FULLPAGENAME}}/status|Status]] =&lt;br /&gt;
&lt;br /&gt;
{{Wikimedia project status line|{{FULLPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
= Rationale =&lt;br /&gt;
&lt;br /&gt;
The Wiki Movement has a chronic need for analytics. We need it to understand our editors, to encourage growth, to engender diversity, to focus our resources, to improve our engineering efforts, and to measure our success. It permeates nearly all our goals, yet our current analytics capabilities are underdeveloped: we lack infrastructure to capture editor, visitor, clickstream, and device data in a way that is easily accessible; our efforts are distributed among different departments; our data is fragmented over different systems and databases; our tools are ad-hoc.&lt;br /&gt;
&lt;br /&gt;
Rather than merely improve existing jobs and data pipelines, the Analytics Team aims to construct a Data Services Platform capable of mining intelligence from all datastreams of interest, providing this insight in real time, and exposing it via an API to power applications, mash up into websites, and stream to devices.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
[[File:Kraken_flow_diagram-2.png|320px|right|Cluster Dataflow Diagram]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Access|Getting Access]]&lt;br /&gt;
* [[Analytics/Kraken/Overview|Overview]]&lt;br /&gt;
* [http://upload.wikimedia.org/wikipedia/mediawiki/1/1b/Kraken_flow_diagram-2.png Cluster Dataflow Diagram]&lt;br /&gt;
* &#039;&#039;&#039;Data&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Product_Codes|Product Codes]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Streams|Data Streams]]&lt;br /&gt;
** [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
** [[Analytics/Kraken/Security_Review_Meeting|Security Review Meeting notes]]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsKrakenTestClusterSetup Test Cluster Setup Notes]&lt;br /&gt;
** [http://etherpad.wikimedia.org/AnalyticsHadoopSetupNotes Hadoop Setup Notes]&lt;br /&gt;
** [[Analytics/Kraken/Blurbs|Blurbs About Kraken]]&lt;br /&gt;
** [https://docs.google.com/a/wikimedia.org/spreadsheet/ccc?key=0AvpRkIqSY9hNdEtRLVNoQWNvQzNleHBtTXR5emI3Z2c&amp;amp;pli=1#gid=5 Kraken Benchmarks]&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Pixel_Service|Pixel Service]] and [[Analytics/Kraken/Request_Logging|Request Logging]] ==&lt;br /&gt;
&lt;br /&gt;
Public data import endpoint, and system for capturing the incoming firehose from our front-end servers.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Request_Logging|Request Logging]]&lt;br /&gt;
** [[Analytics/Kraken/Request_Logging|System Recommendation]]&lt;br /&gt;
** [[Analytics/Kraken/Logging_Solutions_Overview|Distributed Logging Systems Research]]&lt;br /&gt;
** [https://docs.google.com/spreadsheet/pub?key=0AvpRkIqSY9hNdFNoYWFIX29hMnFuenV1ckRvYzEzUVE&amp;amp;gid=3 Feature Comparison Spreadsheet]&lt;br /&gt;
* [[Analytics/Kraken/Pixel_Service|Pixel Service Endpoint]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Work with Ori, Patrick, &amp;amp; ops to figure out Kafka producer situation for production [otto, dsc, ori, preilly, ops]&lt;br /&gt;
* MediaWiki EventLogging integration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/ETL|ETL Topology]] ==&lt;br /&gt;
&lt;br /&gt;
The [http://storm-project.net Storm] topology that processes incoming data (aka, &amp;quot;Extract-Transform-Load&amp;quot; in data warehousing jargon).&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/ETL|ETL Topology]]&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Maven + Nexus setup w/ storm pom [dsc]&lt;br /&gt;
* Storm Bolts:&lt;br /&gt;
** Consume from Kafka (by topic?)&lt;br /&gt;
** Serialize &amp;amp; canonicalize record using Avro schema&lt;br /&gt;
** GeoIP annotation&lt;br /&gt;
** Mobile carrier annotation (by IP)&lt;br /&gt;
** IP anonymization (where does the salt live? how often should we change it?)&lt;br /&gt;
** Append record to per-hour files in HDFS (path using timestamp, topic)&lt;br /&gt;
** Notifier Bolt to update Kafka consumer checkpoint (and/or publish event for external hooks)&lt;br /&gt;
* Define Avro schemas:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
*** Figure out convention for EventData packets to self-identify with a more specific schema&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Core_Jobs|Core Jobs]] ==&lt;br /&gt;
&lt;br /&gt;
Core data processing jobs for processing web requests and event data, maintained by the Analytics team.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Figure out request tagging -- how can we avoid mutating records?&lt;br /&gt;
* Reportcard Oozie workflow [DvL]&lt;br /&gt;
** Pig Macro for &amp;quot;typical request analytics&amp;quot;&lt;br /&gt;
* Figure out indexing scheme:&lt;br /&gt;
** Aggregated time buckets&lt;br /&gt;
** Referrer chains&lt;br /&gt;
** Event aggregations&lt;br /&gt;
** Funnel Analysis&lt;br /&gt;
*** A/B testing event data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Data_Tools|Data Tools]] ==&lt;br /&gt;
&lt;br /&gt;
Data processing library and toolkit provided &amp;amp; maintained by the Analytics team, esp for use with Kraken.&lt;br /&gt;
&lt;br /&gt;
* [[Analytics/Kraken/Data_Formats|Data Formats]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Setup regular sqoop imports [DvL]&lt;br /&gt;
* Avro De/Serialization storage format compatibility:&lt;br /&gt;
** WebRequest&lt;br /&gt;
** EventData&lt;br /&gt;
* Build re-usable pig/hive library, outsource this to analysts as much as possible [DvL]&lt;br /&gt;
* KV-Pairs parsing tools&lt;br /&gt;
* Conversion funnel analysis tools&lt;br /&gt;
** A/B testing analysis tools&lt;br /&gt;
* MW EventLogging extension integration&lt;br /&gt;
* Investigate Ori&#039;s Mediawiki extension for instrumentation, sending event/edit data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Analytics/Kraken/Infrastructure|Infrastructure]] ==&lt;br /&gt;
&lt;br /&gt;
Bucket for general cluster infrastructure and maintenance tasks.&lt;br /&gt;
* [[Analytics/Kraken/Puppet|Kraken Puppetization]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Ports|JMX Ports]]&lt;br /&gt;
* [[Analytics/2012-2013_Roadmap/Hardware|Hardware Planning]]&lt;br /&gt;
* [[Analytics/Kraken/JMX Monitoring|JMX Monitoring Research]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tasks&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Fix the one busted Cisco machine (an07) [otto]&lt;br /&gt;
* Continue puppetization [otto]&lt;br /&gt;
* JMX Monitoring [otto, dsc]&lt;br /&gt;
* Investigate / experiment / benchmark Hadoop stack [DvL]&lt;br /&gt;
* Data owner services -- export, dashboard, visualizations (on Hue?) [dsc, dan]&lt;br /&gt;
** Hue plugin for Limn integration? [dsc]&lt;br /&gt;
* Get analysts experimenting with Hive/Pig [DvL]&lt;br /&gt;
* General purpose job-runner using Kafka+Storm&lt;br /&gt;
* Setup Hadoop FairScheduler [DvL]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Research =&lt;br /&gt;
&lt;br /&gt;
== Bundling ==&lt;br /&gt;
&lt;br /&gt;
Investigate size of savings of structure sharing via a short-term (between 1-30sec window) queue.&lt;br /&gt;
&lt;br /&gt;
* Reorder within window by timestamp? Seq number?&lt;br /&gt;
* Parameters of experiment:&lt;br /&gt;
** Buffer time: 1s, 2s, 5s, 10s&lt;br /&gt;
** Sharded by server&lt;br /&gt;
** Bundle by IP, UA, IP+UA&lt;br /&gt;
* Pull-up fields for structure sharing: &lt;br /&gt;
** Invariant: ip, ua, accept-lang, carrier&lt;br /&gt;
** Often invariant: method, status, referer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Hbase&lt;br /&gt;
* Hive&lt;br /&gt;
* Hue plugins&lt;br /&gt;
* Cascading -- do we even need this as we have Oozie?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:WMF Projects]]&lt;br /&gt;
[[Category:WMF Projects/Analytics]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dsc</name></author>
	</entry>
</feed>