From 81d6089b47ec4d3e7fe17074f3b5fadec8070071 Mon Sep 17 00:00:00 2001 From: Andy Konwinski Date: Fri, 23 Aug 2013 17:17:53 +0000 Subject: Initial port of Spark website from spark-project.org wordpress to Jekyll. --- README.md | 24 + _config.yml | 12 + _includes/footer.html | 6 + _includes/navbar.html | 23 + _layouts/global.html | 82 + _layouts/post.html | 8 + _plugins/sidebar.rb | 16 + _plugins/site_navigation.rb | 36 + css/pygments-default.css | 74 + css/style.css | 3107 ++++++++++++++++++++ documentation.md | 84 + downloads.md | 31 + examples.md | 99 + faq.md | 39 + favicon.ico | Bin 0 -> 1406 bytes images/amplab-small.png | Bin 0 -> 1726 bytes images/download.png | Bin 0 -> 3710 bytes images/spark-lr.png | Bin 0 -> 20619 bytes images/spark-project-header1.png | Bin 0 -> 13617 bytes index.md | 52 + mailing-lists.md | 39 + news/_posts/2012-01-10-spark-meetups.html | 11 + news/_posts/2012-04-25-nsdi-paper.html | 14 + .../2012-10-15-spark-version-0-6-0-released.html | 13 + .../2012-11-22-spark-0-6-1-and-0-5-2-released.html | 13 + .../2012-12-21-spark-and-shark-in-the-news.html | 25 + ...-video-from-first-spark-development-meetup.html | 14 + .../2013-01-12-spark-tips-from-quantifind.html | 19 + news/_posts/2013-02-07-spark-0-6-2-released.html | 14 + ...13-02-24-run-spark-and-shark-on-amazon-emr.html | 14 + news/_posts/2013-02-27-spark-0-7-0-released.html | 14 + ...3-17-strata-exercises-now-available-online.html | 14 + .../2013-04-16-spark-screencasts-published.html | 20 + news/_posts/2013-06-02-spark-0-7-2-released.html | 14 + ...06-21-spark-accepted-into-apache-incubator.html | 14 + .../_posts/2013-06-21-spark-featured-in-wired.html | 15 + news/_posts/2013-07-16-spark-0-7-3-released.html | 14 + ...07-22-spark-mailing-lists-moving-to-apache.html | 25 + .../2013-07-23-amp-camp-2013-registration-ope.html | 14 + news/index.md | 15 + releases/_posts/2011-07-14-spark-release-0-3.md | 62 + releases/_posts/2012-06-12-spark-release-0-5-0.md | 36 + releases/_posts/2012-10-11-spark-release-0-5-1.md | 46 + releases/_posts/2012-10-15-spark-release-0-6-0.md | 90 + releases/_posts/2012-11-22-spark-release-0-5-2.md | 15 + releases/_posts/2012-11-22-spark-release-0-6-1.md | 30 + releases/_posts/2013-02-07-spark-release-0-6-2.md | 43 + releases/_posts/2013-02-27-spark-release-0-7-0.md | 112 + releases/_posts/2013-06-02-spark-release-0-7-2.md | 56 + releases/_posts/2013-07-16-spark-release-0-7-3.md | 49 + research.md | 53 + .../2013-04-10-1-first-steps-with-spark.html | 27 + .../2013-04-11-2-spark-documentation-overview.html | 19 + .../2013-04-16-3-transformations-and-caching.html | 14 + site/index.html | 182 +- talks/overview.pdf | Bin 0 -> 947335 bytes talks/overview.pptx | Bin 0 -> 477346 bytes talks/strata_spark_streaming.pdf | Bin 0 -> 5440163 bytes talks/strata_spark_streaming.ppt | Bin 0 -> 4843008 bytes 59 files changed, 4861 insertions(+), 1 deletion(-) create mode 100644 README.md create mode 100644 _config.yml create mode 100644 _includes/footer.html create mode 100644 _includes/navbar.html create mode 100644 _layouts/global.html create mode 100644 _layouts/post.html create mode 100644 _plugins/sidebar.rb create mode 100644 _plugins/site_navigation.rb create mode 100644 css/pygments-default.css create mode 100644 css/style.css create mode 100644 documentation.md create mode 100644 downloads.md create mode 100644 examples.md create mode 100644 faq.md create mode 100644 favicon.ico create mode 100644 images/amplab-small.png create mode 100644 images/download.png create mode 100644 images/spark-lr.png create mode 100644 images/spark-project-header1.png create mode 100644 index.md create mode 100644 mailing-lists.md create mode 100644 news/_posts/2012-01-10-spark-meetups.html create mode 100644 news/_posts/2012-04-25-nsdi-paper.html create mode 100644 news/_posts/2012-10-15-spark-version-0-6-0-released.html create mode 100644 news/_posts/2012-11-22-spark-0-6-1-and-0-5-2-released.html create mode 100644 news/_posts/2012-12-21-spark-and-shark-in-the-news.html create mode 100644 news/_posts/2012-12-21-video-from-first-spark-development-meetup.html create mode 100644 news/_posts/2013-01-12-spark-tips-from-quantifind.html create mode 100644 news/_posts/2013-02-07-spark-0-6-2-released.html create mode 100644 news/_posts/2013-02-24-run-spark-and-shark-on-amazon-emr.html create mode 100644 news/_posts/2013-02-27-spark-0-7-0-released.html create mode 100644 news/_posts/2013-03-17-strata-exercises-now-available-online.html create mode 100644 news/_posts/2013-04-16-spark-screencasts-published.html create mode 100644 news/_posts/2013-06-02-spark-0-7-2-released.html create mode 100644 news/_posts/2013-06-21-spark-accepted-into-apache-incubator.html create mode 100644 news/_posts/2013-06-21-spark-featured-in-wired.html create mode 100644 news/_posts/2013-07-16-spark-0-7-3-released.html create mode 100644 news/_posts/2013-07-22-spark-mailing-lists-moving-to-apache.html create mode 100644 news/_posts/2013-07-23-amp-camp-2013-registration-ope.html create mode 100644 news/index.md create mode 100644 releases/_posts/2011-07-14-spark-release-0-3.md create mode 100644 releases/_posts/2012-06-12-spark-release-0-5-0.md create mode 100644 releases/_posts/2012-10-11-spark-release-0-5-1.md create mode 100644 releases/_posts/2012-10-15-spark-release-0-6-0.md create mode 100644 releases/_posts/2012-11-22-spark-release-0-5-2.md create mode 100644 releases/_posts/2012-11-22-spark-release-0-6-1.md create mode 100644 releases/_posts/2013-02-07-spark-release-0-6-2.md create mode 100644 releases/_posts/2013-02-27-spark-release-0-7-0.md create mode 100644 releases/_posts/2013-06-02-spark-release-0-7-2.md create mode 100644 releases/_posts/2013-07-16-spark-release-0-7-3.md create mode 100644 research.md create mode 100644 screencasts/_posts/2013-04-10-1-first-steps-with-spark.html create mode 100644 screencasts/_posts/2013-04-11-2-spark-documentation-overview.html create mode 100644 screencasts/_posts/2013-04-16-3-transformations-and-caching.html create mode 100644 talks/overview.pdf create mode 100644 talks/overview.pptx create mode 100644 talks/strata_spark_streaming.pdf create mode 100644 talks/strata_spark_streaming.ppt diff --git a/README.md b/README.md new file mode 100644 index 000000000..f02631a4c --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +Welcome to the Spark website. + +## Generating the website HTML + +In this directory you will find text files formatted using Markdown, with an ".md" suffix. + +You can generate the html version of these files by (installing and) running `jekyll build` (for newer versions of Jekyll) or just `jekyll` (for older versions) in this directory. + +The easiest way to install jekyll is via a Ruby Gem. This will create a directory called `site` containing index.html as well as the rest of the compiled directories and files. Read more about Jekyll at http://jekyllrb.com/docs + +In addition to generating the site as html from the markdown files, jekyll can serve the site via a webserver. To build and run a webserver use the command `jekyll serve` (or --serve for older ones) which runs the webserver on port 4000, then visit the site at http://localhost:4000. + +## Pygments + +We also use pygments (http://pygments.org) for syntax highlighting in documentation markdown pages. + +To mark a block of code in your markdown to be syntax highlighted by jekyll during the compile phase, use the following syntax: + + {% highlight scala %} + // Your scala code goes here, you can replace scala with many other + // supported languages too. + {% endhighlight %} + + You probably don't need to install that unless you want to regenerate the pygments css file. It requires Python, and can be installed by running `sudo easy_install Pygments`. \ No newline at end of file diff --git a/_config.yml b/_config.yml new file mode 100644 index 000000000..82a24f02e --- /dev/null +++ b/_config.yml @@ -0,0 +1,12 @@ +pygments: true +markdown: kramdown +permalink: none +destination: site + +# The recommended way of viewing the website on your local machine is via jekyll using +# a webserver, e.g. with a command like: jekyll serve --watch --trace +# To compile the website such that it is viewable in a sane way via a file browser +# replace '/' here with the url that represents the website root dir in your file browser. +# E.g. on OS X this might be: +#url: file:///Users/andyk/Development/spark/website/site/ +url: / diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 000000000..101cdba8e --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,6 @@ + diff --git a/_includes/navbar.html b/_includes/navbar.html new file mode 100644 index 000000000..c7e68fd58 --- /dev/null +++ b/_includes/navbar.html @@ -0,0 +1,23 @@ + + diff --git a/_layouts/global.html b/_layouts/global.html new file mode 100644 index 000000000..937cbb911 --- /dev/null +++ b/_layouts/global.html @@ -0,0 +1,82 @@ + + + + + + + + + + + + {{page.title}} | Spark + + + + + + + + + + + + + + +
+ + {% include navbar.html %} + +
+
+
+ {% if page.type contains 'archive' %} + {{ content }} + {% else %} +
+ {{ content }} +
+ {% endif %} +
+ {% if page.sidebar %} + + {% endif %} + {% include footer.html %} +
+
+
+ + + + diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 000000000..f05db77dd --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,8 @@ +--- +layout: global +type: singular +--- +

{{page.title}}

+ + +{{content}} \ No newline at end of file diff --git a/_plugins/sidebar.rb b/_plugins/sidebar.rb new file mode 100644 index 000000000..9f652cb2d --- /dev/null +++ b/_plugins/sidebar.rb @@ -0,0 +1,16 @@ +module Liquid + class SidebarBlock < Liquid::Block + alias :super_render :render + + def initialize(tag_name, identifier, tokens) + super + end + + def render(context) + context.environments.first["page"]["sidebar"] = super_render(context) + '' + end + end +end +puts "registering new sidebar template" +Liquid::Template.register_tag('sidebar', Liquid::SidebarBlock) \ No newline at end of file diff --git a/_plugins/site_navigation.rb b/_plugins/site_navigation.rb new file mode 100644 index 000000000..9296773d2 --- /dev/null +++ b/_plugins/site_navigation.rb @@ -0,0 +1,36 @@ +module Jekyll + + class SiteNavigation < Jekyll::Generator + safe true + priority :lowest + + def generate(site) + + # First remove all invisible items (default: nil = show in nav) + unsorted = [] + site.pages.each do |page| + if not page.data["navigation"].nil? + if not page.data["navigation"]["show"].nil? + unsorted << page if page.data["navigation"]["show"] != false + else + puts "no show under nav on " + page.data["title"] + end + else + puts "no nav on page " + page.data["title"] + end + end + + # Then sort em according to weight + sorted = unsorted.sort{ |a,b| a.data["navigation"]["weight"] <=> b.data["navigation"]["weight"] } + + # Debug info. + puts "Sorted resulting navigation: (use site.config['sorted_navigation']) " + sorted.each do |p| + puts p.inspect + end + + # Access this in Liquid using: site.navigation + site.config["navigation"] = sorted + end + end +end \ No newline at end of file diff --git a/css/pygments-default.css b/css/pygments-default.css new file mode 100644 index 000000000..77d85d60c --- /dev/null +++ b/css/pygments-default.css @@ -0,0 +1,74 @@ +/* +This style sheet copied from Spark docs dir. +Documentation for pygments (and Jekyll for that matter) is super sparse. +To generate this, I had to run + `pygmentize -S default -f html > pygments-default.css` +But first I had to install pygments via easy_install pygments + +Also, I was thrown off for a while at first when I was using markdown +code block inside my {% highlight scala %} ... {% endhighlight %} tags +(I was using 4 spaces for this), when it turns out that pygments will +insert the code (or pre?) tags for you. +*/ + +.hll { background-color: #ffffcc } +.c { color: #60a0b0; font-style: italic } /* Comment */ +.err { } /* Error */ +.k { color: #007020; font-weight: bold } /* Keyword */ +.o { color: #666666 } /* Operator */ +.cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ +.cp { color: #007020 } /* Comment.Preproc */ +.c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ +.cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ +.gd { color: #A00000 } /* Generic.Deleted */ +.ge { font-style: italic } /* Generic.Emph */ +.gr { color: #FF0000 } /* Generic.Error */ +.gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.gi { color: #00A000 } /* Generic.Inserted */ +.go { color: #808080 } /* Generic.Output */ +.gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.gs { font-weight: bold } /* Generic.Strong */ +.gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.gt { color: #0040D0 } /* Generic.Traceback */ +.kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.kp { color: #007020 } /* Keyword.Pseudo */ +.kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.kt { color: #902000 } /* Keyword.Type */ +.m { color: #40a070 } /* Literal.Number */ +.s { color: #4070a0 } /* Literal.String */ +.na { color: #4070a0 } /* Name.Attribute */ +.nb { color: #007020 } /* Name.Builtin */ +.nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.no { color: #60add5 } /* Name.Constant */ +.nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.ne { color: #007020 } /* Name.Exception */ +.nf { color: #06287e } /* Name.Function */ +.nl { color: #002070; font-weight: bold } /* Name.Label */ +.nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.nt { color: #062873; font-weight: bold } /* Name.Tag */ +.nv { color: #bb60d5 } /* Name.Variable */ +.ow { color: #007020; font-weight: bold } /* Operator.Word */ +.w { color: #bbbbbb } /* Text.Whitespace */ +.mf { color: #40a070 } /* Literal.Number.Float */ +.mh { color: #40a070 } /* Literal.Number.Hex */ +.mi { color: #40a070 } /* Literal.Number.Integer */ +.mo { color: #40a070 } /* Literal.Number.Oct */ +.sb { color: #4070a0 } /* Literal.String.Backtick */ +.sc { color: #4070a0 } /* Literal.String.Char */ +.sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.s2 { color: #4070a0 } /* Literal.String.Double */ +.se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.sh { color: #4070a0 } /* Literal.String.Heredoc */ +.si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.sx { color: #c65d09 } /* Literal.String.Other */ +.sr { color: #235388 } /* Literal.String.Regex */ +.s1 { color: #4070a0 } /* Literal.String.Single */ +.ss { color: #517918 } /* Literal.String.Symbol */ +.bp { color: #007020 } /* Name.Builtin.Pseudo */ +.vc { color: #bb60d5 } /* Name.Variable.Class */ +.vg { color: #bb60d5 } /* Name.Variable.Global */ +.vi { color: #bb60d5 } /* Name.Variable.Instance */ +.il { color: #40a070 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/css/style.css b/css/style.css new file mode 100644 index 000000000..f7651bdd3 --- /dev/null +++ b/css/style.css @@ -0,0 +1,3107 @@ +/* +Theme Name: Twenty Eleven +Theme URI: http://wordpress.org/extend/themes/twentyeleven +Author: the WordPress team +Author URI: http://wordpress.org/ +Description: The 2011 theme for WordPress is sophisticated, lightweight, and adaptable. Make it yours with a custom menu, header image, and background -- then go further with available theme options for light or dark color scheme, custom link colors, and three layout choices. Twenty Eleven comes equipped with a Showcase page template that transforms your front page into a showcase to show off your best content, widget support galore (sidebar, three footer areas, and a Showcase page widget area), and a custom "Ephemera" widget to display your Aside, Link, Quote, or Status posts. Included are styles for print and for the admin editor, support for featured images (as custom header images on posts and pages and as large images on featured "sticky" posts), and special styles for six different post formats. +Version: 1.4 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: dark, light, white, black, gray, one-column, two-columns, left-sidebar, right-sidebar, fixed-width, flexible-width, custom-background, custom-colors, custom-header, custom-menu, editor-style, featured-image-header, featured-images, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready +Text Domain: twentyeleven +*/ + +/* =Reset default browser CSS. Based on work by Eric Meyer: http://meyerweb.com/eric/tools/css/reset/index.html +-------------------------------------------------------------- */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + border: 0; + font-family: inherit; + font-size: 100%; + font-style: inherit; + font-weight: inherit; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; +} +:focus {/* remember to define focus styles! */ + outline: 0; +} +body { + background: #fff; + line-height: 1; +} +ol, ul { + list-style: none; +} +table {/* tables still need 'cellspacing="0"' in the markup */ + border-collapse: separate; + border-spacing: 0; +} +caption, th, td { + font-weight: normal; + text-align: left; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ""; +} +blockquote, q { + quotes: "" ""; +} +a img { + border: 0; +} +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} + + +/* =Structure +----------------------------------------------- */ + +body { + padding: 0 2em; +} +#page { + margin: 2em auto; + max-width: 1000px; +} +#branding hgroup { + margin: 0 7.6%; +} +#access div { + margin: 0 7.6%; +} +#primary { + float: left; + margin: 0 -26.4% 0 0; + width: 100%; +} +#content { + margin: 0 34% 0 7.6%; + width: 58.4%; +} +#secondary { + float: right; + margin-right: 7.6%; + width: 18.8%; +} + +/* Singular */ +.singular #primary { + margin: 0; +} +.singular #content, +.left-sidebar.singular #content { + margin: 0 7.6%; + position: relative; + width: auto; +} +.singular .entry-header, +.singular .entry-content, +.singular footer.entry-meta, +.singular #comments-title { + margin: 0 auto; + width: 68.9%; +} + +/* Attachments */ +.singular .image-attachment .entry-content { + margin: 0 auto; + width: auto; +} +.singular .image-attachment .entry-description { + margin: 0 auto; + width: 68.9%; +} + +/* Showcase */ +.page-template-showcase-php #primary, +.left-sidebar.page-template-showcase-php #primary { + margin: 0; +} +.page-template-showcase-php #content, +.left-sidebar.page-template-showcase-php #content { + margin: 0 7.6%; + width: auto; +} +.page-template-showcase-php section.recent-posts { + float: right; + margin: 0 0 0 31%; + width: 69%; +} +.page-template-showcase-php #main .widget-area { + float: left; + margin: 0 -22.15% 0 0; + width: 22.15%; +} + +/* error404 */ +.error404 #primary { + float: none; + margin: 0; +} +.error404 #primary #content { + margin: 0 7.6%; + width: auto; +} + +/* Alignment */ +.alignleft { + display: inline; + float: left; + margin-right: 1.625em; +} +.alignright { + display: inline; + float: right; + margin-left: 1.625em; +} +.aligncenter { + clear: both; + display: block; + margin-left: auto; + margin-right: auto; +} + +/* Right Content */ +.left-sidebar #primary { + float: right; + margin: 0 0 0 -26.4%; + width: 100%; +} +.left-sidebar #content { + margin: 0 7.6% 0 34%; + width: 58.4%; +} +.left-sidebar #secondary { + float: left; + margin-left: 7.6%; + margin-right: 0; + width: 18.8%; +} + +/* One column */ +.one-column #page { + max-width: 690px; +} +.one-column #content { + margin: 0 7.6%; + width: auto; +} +.one-column #nav-below { + border-bottom: 1px solid #ddd; + margin-bottom: 1.625em; +} +.one-column #secondary { + float: none; + margin: 0 7.6%; + width: auto; +} +/* Simplify the showcase template */ +.one-column .page-template-showcase-php section.recent-posts { + float: none; + margin: 0; + width: 100%; +} +.one-column .page-template-showcase-php #main .widget-area { + float: none; + margin: 0; + width: auto; +} +.one-column .page-template-showcase-php .other-recent-posts { + border-bottom: 1px solid #ddd; +} +/* Simplify the showcase template when small feature */ +.one-column section.featured-post .attachment-small-feature { + border: none; + display: block; + height: auto; + max-width: 60%; + position: static; +} +.one-column article.feature-image.small { + margin: 0 0 1.625em; + padding: 0; +} +.one-column article.feature-image.small .entry-title { + font-size: 20px; + line-height: 1.3em; +} +.one-column article.feature-image.small .entry-summary { + height: 150px; + overflow: hidden; + padding: 0; + text-overflow: ellipsis; +} +.one-column article.feature-image.small .entry-summary a { + left: -9%; +} +/* Remove the margin on singular articles */ +.one-column.singular .entry-header, +.one-column.singular .entry-content, +.one-column.singular footer.entry-meta, +.one-column.singular #comments-title { + width: 100%; +} +/* Simplify the pullquotes and pull styles */ +.one-column.singular blockquote.pull { + margin: 0 0 1.625em; +} +.one-column.singular .pull.alignleft { + margin: 0 1.625em 0 0; +} +.one-column.singular .pull.alignright { + margin: 0 0 0 1.625em; +} +.one-column.singular .entry-meta .edit-link a { + position: absolute; + left: 0; + top: 40px; +} +.one-column.singular #author-info { + margin: 2.2em -8.8% 0; + padding: 20px 8.8%; +} +/* Make sure we have room for our comment avatars */ +.one-column .commentlist > li.comment { + margin-left: 102px; + width: auto; +} +/* Make sure the logo and search form don't collide */ +.one-column #branding #searchform { + right: 40px; + top: 4em; +} +/* Talking avatars take up too much room at this size */ +.one-column .commentlist > li.comment { + margin-left: 0; +} +.one-column .commentlist > li.comment .comment-meta, +.one-column .commentlist > li.comment .comment-content { + margin-right: 85px; +} +.one-column .commentlist .avatar { + background: transparent; + display: block; + padding: 0; + top: 1.625em; + left: auto; + right: 1.625em; +} +.one-column .commentlist .children .avatar { + background: none; + padding: 0; + position: absolute; + top: 2.2em; + left: 2.2em; +} +.one-column #respond { + width: auto; +} + + +/* =Global +----------------------------------------------- */ + +body, input, textarea { + color: #373737; + font: 15px "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 300; + line-height: 1.625; +} +body { + background: #e2e2e2; +} +#page { + background: #fff; +} + +/* Headings */ +h1,h2,h3,h4,h5,h6 { + clear: both; +} +hr { + background-color: #ccc; + border: 0; + height: 1px; + margin-bottom: 1.625em; +} + +/* Text elements */ +p { + margin-bottom: 1.625em; +} +ul, ol { + margin: 0 0 1.625em 2.5em; +} +ul { + list-style: square; +} +ol { + list-style-type: decimal; +} +ol ol { + list-style: upper-alpha; +} +ol ol ol { + list-style: lower-roman; +} +ol ol ol ol { + list-style: lower-alpha; +} +ul ul, ol ol, ul ol, ol ul { + margin-bottom: 0; +} +dl { + margin: 0 1.625em; +} +dt { + font-weight: bold; +} +dd { + margin-bottom: 1.625em; +} +strong { + font-weight: bold; +} +cite, em, i { + font-style: italic; +} +blockquote { + font-family: Georgia, "Bitstream Charter", serif; + font-style: italic; + font-weight: normal; + margin: 0 3em; +} +blockquote em, blockquote i, blockquote cite { + font-style: normal; +} +blockquote cite { + color: #666; + font: 12px "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 300; + letter-spacing: 0.05em; + text-transform: uppercase; +} +pre { + background: #f4f4f4; + font: 13px "Courier 10 Pitch", Courier, monospace; + line-height: 1.5; + margin-bottom: 1.625em; + overflow: auto; + padding: 0.75em 1.625em; +} +code, kbd, samp, var { + font: 13px Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; +} +abbr, acronym, dfn { + border-bottom: 1px dotted #666; + cursor: help; +} +address { + display: block; + margin: 0 0 1.625em; +} +ins { + background: #fff9c0; + text-decoration: none; +} +sup, +sub { + font-size: 10px; + height: 0; + line-height: 1; + position: relative; + vertical-align: baseline; +} +sup { + bottom: 1ex; +} +sub { + top: .5ex; +} + +/* Forms */ +input[type=text], +input[type=password], +textarea { + background: #fafafa; + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.1); + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.1); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.1); + border: 1px solid #ddd; + color: #888; +} +input[type=text]:focus, +textarea:focus { + color: #373737; +} +textarea { + padding-left: 3px; + width: 98%; +} +input[type=text] { + padding: 3px; +} +input#s { + background: url(images/search.png) no-repeat 5px 6px; + -moz-border-radius: 2px; + border-radius: 2px; + font-size: 14px; + height: 22px; + line-height: 1.2em; + padding: 4px 10px 4px 28px; +} +input#searchsubmit { + display: none; +} + +/* Links */ +a { + color: #1982d1; + text-decoration: none; +} +a:focus, +a:active, +a:hover { + text-decoration: underline; +} + +/* Assistive text */ +.assistive-text { + position: absolute !important; + clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ + clip: rect(1px, 1px, 1px, 1px); +} +#access a.assistive-text:active, +#access a.assistive-text:focus { + background: #eee; + border-bottom: 1px solid #ddd; + color: #1982d1; + clip: auto !important; + font-size: 12px; + position: absolute; + text-decoration: underline; + top: 0; + left: 7.6%; +} + + +/* =Header +----------------------------------------------- */ + +#branding { + border-top: 2px solid #bbb; + padding-bottom: 10px; + position: relative; + z-index: 9999; +} +#site-title { + margin-right: 270px; + padding: 3.65625em 0 0; +} +#site-title a { + color: #111; + font-size: 30px; + font-weight: bold; + line-height: 36px; + text-decoration: none; +} +#site-title a:hover, +#site-title a:focus, +#site-title a:active { + color: #1982d1; +} +#site-description { + color: #7a7a7a; + font-size: 14px; + margin: 0 270px 3.65625em 0; +} +#branding img { + height: auto; + margin-bottom: -7px; + width: 100%; +} + + +/* =Menu +-------------------------------------------------------------- */ + +#access { + background: #222; /* Show a solid color for older browsers */ + background: -moz-linear-gradient(#252525, #0a0a0a); + background: -o-linear-gradient(#252525, #0a0a0a); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#252525), to(#0a0a0a)); /* older webkit syntax */ + background: -webkit-linear-gradient(#252525, #0a0a0a); + -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0px 1px 2px; + -moz-box-shadow: rgba(0, 0, 0, 0.4) 0px 1px 2px; + box-shadow: rgba(0, 0, 0, 0.4) 0px 1px 2px; + clear: both; + display: block; + float: left; + margin: 0 auto 6px; + width: 100%; +} +#access ul { + font-size: 13px; + list-style: none; + margin: 0 0 0 -0.8125em; + padding-left: 0; +} +#access li { + float: left; + position: relative; +} +#access a { + color: #eee; + display: block; + line-height: 3.333em; + padding: 0 1.2125em; + text-decoration: none; +} +#access ul ul { + -moz-box-shadow: 0 3px 3px rgba(0,0,0,0.2); + -webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.2); + box-shadow: 0 3px 3px rgba(0,0,0,0.2); + display: none; + float: left; + margin: 0; + position: absolute; + top: 3.333em; + left: 0; + width: 188px; + z-index: 99999; +} +#access ul ul ul { + left: 100%; + top: 0; +} +#access ul ul a { + background: #f9f9f9; + border-bottom: 1px dotted #ddd; + color: #444; + font-size: 13px; + font-weight: normal; + height: auto; + line-height: 1.4em; + padding: 10px 10px; + width: 168px; +} +#access li:hover > a, +#access ul ul :hover > a, +#access a:focus { + background: #efefef; +} +#access li:hover > a, +#access a:focus { + background: #f9f9f9; /* Show a solid color for older browsers */ + background: -moz-linear-gradient(#f9f9f9, #e5e5e5); + background: -o-linear-gradient(#f9f9f9, #e5e5e5); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#f9f9f9), to(#e5e5e5)); /* Older webkit syntax */ + background: -webkit-linear-gradient(#f9f9f9, #e5e5e5); + color: #373737; +} +#access ul li:hover > ul { + display: block; +} +#access .current-menu-item > a, +#access .current-menu-ancestor > a, +#access .current_page_item > a, +#access .current_page_ancestor > a { + font-weight: bold; +} + +/* Search Form */ +#branding #searchform { + position: absolute; + top: 3.8em; + right: 7.6%; + text-align: right; +} +#branding #searchform div { + margin: 0; +} +#branding #s { + float: right; + -webkit-transition-duration: 400ms; + -webkit-transition-property: width, background; + -webkit-transition-timing-function: ease; + -moz-transition-duration: 400ms; + -moz-transition-property: width, background; + -moz-transition-timing-function: ease; + -o-transition-duration: 400ms; + -o-transition-property: width, background; + -o-transition-timing-function: ease; + width: 72px; +} +#branding #s:focus { + background-color: #f9f9f9; + width: 196px; +} +#branding #searchsubmit { + display: none; +} +#branding .only-search #searchform { + top: 5px; + z-index: 1; +} +#branding .only-search #s { + background-color: #666; + border-color: #000; + color: #222; +} +#branding .only-search #s, +#branding .only-search #s:focus { + width: 85%; +} +#branding .only-search #s:focus { + background-color: #bbb; +} +#branding .with-image #searchform { + top: auto; + bottom: -27px; + max-width: 195px; +} +#branding .only-search + #access div { + padding-right: 205px; +} + + +/* =Content +----------------------------------------------- */ + +#main { + clear: both; + padding: 1.625em 0 0; +} +.page-title { + color: #666; + font-size: 10px; + font-weight: 500; + letter-spacing: 0.1em; + line-height: 2.6em; + margin: 0 0 2.6em; + text-transform: uppercase; +} +.page-title a { + font-size: 12px; + font-weight: bold; + letter-spacing: 0; + text-transform: none; +} +.hentry, +.no-results { + border-bottom: 1px solid #ddd; + margin: 0 0 1.625em; + padding: 0 0 1.625em; + position: relative; +} +.hentry:last-child, +.no-results { + border-bottom: none; +} +.blog .sticky .entry-header .entry-meta { + clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; +} +.entry-title, +.entry-header .entry-meta { + padding-right: 76px; +} +.entry-title { + clear: both; + color: #222; + font-size: 26px; + font-weight: bold; + line-height: 1.5em; + padding-bottom: .3em; + padding-top: 15px; +} +.entry-title, +.entry-title a { + color: #222; + text-decoration: none; +} +.entry-title a:hover, +.entry-title a:focus, +.entry-title a:active { + color: #1982d1; +} +.entry-meta { + color: #666; + clear: both; + font-size: 12px; + line-height: 18px; +} +.entry-meta a { + font-weight: bold; +} +.single-author .entry-meta .by-author { + display: none; +} +.entry-content, +.entry-summary { + padding: 1.625em 0 0; +} +.entry-content h1, +.entry-content h2, +.comment-content h1, +.comment-content h2 { + color: #000; + font-weight: bold; + margin: 0 0 .8125em; +} +.entry-content h3, +.comment-content h3 { + font-size: 10px; + letter-spacing: 0.1em; + line-height: 2.6em; + text-transform: uppercase; +} +.entry-content table, +.comment-content table { + border-bottom: 1px solid #ddd; + margin: 0 0 1.625em; + width: 100%; +} +.entry-content th, +.comment-content th { + color: #666; + font-size: 10px; + font-weight: 500; + letter-spacing: 0.1em; + line-height: 2.6em; + text-transform: uppercase; +} +.entry-content td, +.comment-content td { + border-top: 1px solid #ddd; + padding: 6px 10px 6px 0; +} +.entry-content #s { + width: 75%; +} +.comment-content ul, +.comment-content ol { + margin-bottom: 1.625em; +} +.comment-content ul ul, +.comment-content ol ol, +.comment-content ul ol, +.comment-content ol ul { + margin-bottom: 0; +} +dl.gallery-item { + margin: 0; +} +.page-link { + clear: both; + display: block; + margin: 0 0 1.625em; +} +.page-link a { + background: #eee; + color: #373737; + margin: 0; + padding: 2px 3px; + text-decoration: none; +} +.page-link a:hover { + background: #888; + color: #fff; + font-weight: bold; +} +.page-link span { + margin-right: 6px; +} +.entry-meta .edit-link a, +.commentlist .edit-link a { + background: #eee; + -moz-border-radius: 3px; + border-radius: 3px; + color: #666; + float: right; + font-size: 12px; + line-height: 1.5em; + font-weight: 300; + text-decoration: none; + padding: 0 8px; +} +.entry-meta .edit-link a:hover, +.commentlist .edit-link a:hover { + background: #888; + color: #fff; +} +.entry-content .edit-link { + clear: both; + display: block; +} + +/* Images */ +.entry-content img, +.comment-content img, +.widget img { + max-width: 97.5%; /* Fluid images for posts, comments, and widgets */ +} +img[class*="align"], +img[class*="wp-image-"], +img[class*="attachment-"] { + height: auto; /* Make sure images with WordPress-added height and width attributes are scaled correctly */ +} +img.size-full, +img.size-large { + max-width: 97.5%; + width: auto; /* Prevent stretching of full-size and large-size images with height and width attributes in IE8 */ + height: auto; /* Make sure images with WordPress-added height and width attributes are scaled correctly */ +} +.entry-content img.wp-smiley { + border: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} +img.alignleft, +img.alignright, +img.aligncenter { + margin-bottom: 1.625em; +} +p img, +.wp-caption { + margin-top: 0.4em; +} +.wp-caption { + background: #eee; + margin-bottom: 1.625em; + max-width: 96%; + padding: 9px; +} +.wp-caption img { + display: block; + margin: 0 auto; + max-width: 98%; +} +.wp-caption .wp-caption-text, +.gallery-caption { + color: #666; + font-family: Georgia, serif; + font-size: 12px; +} +.wp-caption .wp-caption-text { + margin-bottom: 0.6em; + padding: 10px 0 5px 40px; + position: relative; +} +.wp-caption .wp-caption-text:before { + color: #666; + content: '\2014'; + font-size: 14px; + font-style: normal; + font-weight: bold; + margin-right: 5px; + position: absolute; + left: 10px; + top: 7px; +} +#content .gallery { + margin: 0 auto 1.625em; +} +#content .gallery a img { + border: none; +} +img#wpstats { + display: block; + margin: 0 auto 1.625em; +} +#content .gallery-columns-4 .gallery-item { + width: 23%; + padding-right: 2%; +} +#content .gallery-columns-4 .gallery-item img { + width: 100%; + height: auto; +} + +/* Image borders */ +img[class*="align"], +img[class*="wp-image-"], +#content .gallery .gallery-icon img {/* Add fancy borders to all WordPress-added images but not things like badges and icons and the like */ + border: 1px solid #ddd; + padding: 6px; +} +.wp-caption img { + border-color: #eee; +} +a:focus img[class*="align"], +a:hover img[class*="align"], +a:active img[class*="align"], +a:focus img[class*="wp-image-"], +a:hover img[class*="wp-image-"], +a:active img[class*="wp-image-"], +#content .gallery .gallery-icon a:focus img, +#content .gallery .gallery-icon a:hover img, +#content .gallery .gallery-icon a:active img {/* Add some useful style to those fancy borders for linked images ... */ + background: #eee; + border-color: #bbb; +} +.wp-caption a:focus img, +.wp-caption a:active img, +.wp-caption a:hover img {/* ... including captioned images! */ + background: #fff; + border-color: #ddd; +} + +/* Make sure embeds and iframes fit their containers */ +embed, +iframe, +object { + max-width: 100%; +} + +/* Password Protected Posts */ +.post-password-required .entry-header .comments-link { + margin: 1.625em 0 0; +} +.post-password-required input[type=password] { + margin: 0.8125em 0; +} +.post-password-required input[type=password]:focus { + background: #f7f7f7; +} + +/* Author Info */ +#author-info { + font-size: 12px; + overflow: hidden; +} +.singular #author-info { + background: #f9f9f9; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 2.2em -35.6% 0 -35.4%; + padding: 20px 35.4%; +} +.archive #author-info { + border-bottom: 1px solid #ddd; + margin: 0 0 2.2em; + padding: 0 0 2.2em; +} +#author-avatar { + float: left; + margin-right: -78px; +} +#author-avatar img { + background: #fff; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px #bbb; + -moz-box-shadow: 0 1px 2px #bbb; + box-shadow: 0 1px 2px #bbb; + padding: 3px; +} +#author-description { + float: left; + margin-left: 108px; +} +#author-description h2 { + color: #000; + font-size: 15px; + font-weight: bold; + margin: 5px 0 10px; +} + +/* Comments link */ +.entry-header .comments-link a { + background: #eee url(images/comment-bubble.png) no-repeat; + color: #666; + font-size: 13px; + font-weight: normal; + line-height: 35px; + overflow: hidden; + padding: 0 0 0; + position: absolute; + top: 1.5em; + right: 0; + text-align: center; + text-decoration: none; + width: 43px; + height: 36px; +} +.entry-header .comments-link a:hover, +.entry-header .comments-link a:focus, +.entry-header .comments-link a:active { + background-color: #1982d1; + color: #fff; + color: rgba(255,255,255,0.8); +} +.entry-header .comments-link .leave-reply { + visibility: hidden; +} + +/* +Post Formats Headings +To hide the headings, display: none the ".entry-header .entry-format" selector, +and remove the padding rules below. +*/ +.entry-header .entry-format { + color: #666; + font-size: 10px; + font-weight: 500; + letter-spacing: 0.1em; + line-height: 2.6em; + position: absolute; + text-transform: uppercase; + top: -5px; +} +.entry-header hgroup .entry-title { + padding-top: 15px; +} +article.format-aside .entry-content, +article.format-link .entry-content, +article.format-status .entry-content { + padding: 20px 0 0; +} +article.format-status .entry-content { + min-height: 65px; +} +.recent-posts .entry-header .entry-format { + display: none; +} +.recent-posts .entry-header hgroup .entry-title { + padding-top: 0; +} + +/* Singular content styles for Posts and Pages */ +.singular .hentry { + border-bottom: none; + padding: 4.875em 0 0; + position: relative; +} +.singular.page .hentry { + padding: 3.5em 0 0; +} +.singular .entry-title { + color: #000; + font-size: 36px; + font-weight: bold; + line-height: 48px; +} +.singular .entry-title, +.singular .entry-header .entry-meta { + padding-right: 0; +} +.singular .entry-header .entry-meta { + position: absolute; + top: 0; + left: 0; +} +blockquote.pull { + font-size: 21px; + font-weight: bold; + line-height: 1.6125em; + margin: 0 0 1.625em; + text-align: center; +} +.singular blockquote.pull { + margin: 0 -22.25% 1.625em; +} +.pull.alignleft { + margin: 0 1.625em 0 0; + text-align: right; +} +.singular .pull.alignleft { + margin: 0 1.625em 0 -22.25%; +} +.pull.alignright { + margin: 0 0 0 1.625em; + text-align: left; +} +blockquote.pull.alignleft, +blockquote.pull.alignright { + width: 33%; +} +.singular .pull.alignright { + margin: 0 -22.25% 0 1.625em; +} +.singular blockquote.pull.alignleft, +.singular blockquote.pull.alignright { + width: 33%; +} +.singular .entry-meta .edit-link a { + bottom: auto; + left: 50px; + position: absolute; + right: auto; + top: 80px; +} + + +/* =Aside +----------------------------------------------- */ + +.format-aside .entry-title, +.format-aside .entry-header .comments-link { + display: none; +} +.singular .format-aside .entry-title { + display: block; +} +.format-aside .entry-content { + padding: 0; +} +.singular .format-aside .entry-content { + padding: 1.625em 0 0; +} + + +/* =Link +----------------------------------------------- */ + +.format-link .entry-title, +.format-link .entry-header .comments-link { + display: none; +} +.singular .format-link .entry-title { + display: block; +} +.format-link .entry-content { + padding: 0; +} +.singular .format-link .entry-content { + padding: 1.625em 0 0; +} + + +/* =Gallery +----------------------------------------------- */ + +.format-gallery .gallery-thumb { + float: left; + display: block; + margin: .375em 1.625em 0 0; +} + + +/* =Status +----------------------------------------------- */ + +.format-status .entry-title, +.format-status .entry-header .comments-link { + display: none; +} +.singular .format-status .entry-title { + display: block; +} +.format-status .entry-content { + padding: 0; +} +.singular .format-status .entry-content { + padding: 1.625em 0 0; +} +.format-status img.avatar { + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px #ccc; + -moz-box-shadow: 0 1px 2px #ccc; + box-shadow: 0 1px 2px #ccc; + float: left; + margin: 4px 10px 2px 0; + padding: 0; +} + + +/* =Quote +----------------------------------------------- */ + +.format-quote blockquote { + color: #555; + font-size: 17px; + margin: 0; +} + + +/* =Image +----------------------------------------------- */ + +.indexed.format-image .entry-header { + min-height: 61px; /* Prevent the comment icon from colliding with the image when there is no title */ +} +.indexed.format-image .entry-content { + padding-top: 0.5em; +} +.indexed.format-image .entry-content p { + margin: 1em 0; +} +.indexed.format-image .entry-content p:first-child, +.indexed.format-image .entry-content p:first-child a, +.indexed.format-image .entry-content p:first-child img { + display: block; + margin: 0; +} +.indexed.format-image .entry-content .wp-caption .wp-caption-text { + margin: 0; + padding-bottom: 1em; +} +.indexed.format-image footer.entry-meta { + background: #ddd; + overflow: hidden; + padding: 4%; + max-width: 96%; +} +.indexed.format-image div.entry-meta { + display: inline-block; + float: left; + width: 35%; +} +.indexed.format-image div.entry-meta + div.entry-meta { + float: none; + width: 65%; +} +.indexed.format-image .entry-meta span.cat-links, +.indexed.format-image .entry-meta span.tag-links, +.indexed.format-image .entry-meta span.comments-link { + display: block; +} +.indexed.format-image footer.entry-meta a { + color: #444; +} +.indexed.format-image footer.entry-meta a:hover { + color: #fff; +} +#content .indexed.format-image img { + border: none; + max-width: 100%; + padding: 0; +} +.indexed.format-image .wp-caption { + background: #111; + margin-bottom: 0; + max-width: 96%; + padding: 2% 2% 0; +} +.indexed.format-image .wp-caption .wp-caption-text { + color: #ddd; +} +.indexed.format-image .wp-caption .wp-caption-text:before { + color: #444; +} +.indexed.format-image a:hover img { + opacity: 0.8; +} + + +/* =error404 +----------------------------------------------- */ + +.error404 #main #searchform { + background: #f9f9f9; + border: 1px solid #ddd; + border-width: 1px 0; + margin: 0 -8.9% 1.625em; + overflow: hidden; + padding: 1.625em 8.9%; +} +.error404 #main #s { + width: 95%; +} +.error404 #main .widget { + clear: none; + float: left; + margin-right: 3.7%; + width: 30.85%; +} +.error404 #main .widget_archive { + margin-right: 0; +} +.error404 #main .widget_tag_cloud { + float: none; + margin-right: 0; + width: 100%; +} +.error404 .widgettitle { + font-size: 10px; + letter-spacing: 0.1em; + line-height: 2.6em; + text-transform: uppercase; +} + + +/* =Showcase +----------------------------------------------- */ + +h1.showcase-heading { + color: #666; + font-size: 10px; + font-weight: 500; + letter-spacing: 0.1em; + line-height: 2.6em; + text-transform: uppercase; +} + +/* Intro */ +article.intro { + background: #f9f9f9; + border-bottom: none; + margin: -1.855em -8.9% 1.625em; + padding: 0 8.9%; +} +article.intro .entry-title { + display: none; +} +article.intro .entry-content { + color: #111; + font-size: 16px; + padding: 1.625em 0 0.625em; +} +article.intro .edit-link a { + background: #aaa; + -moz-border-radius: 3px; + border-radius: 3px; + color: #fff; + font-size: 12px; + padding: 0 8px; + position: absolute; + top: 30px; + right: 20px; + text-decoration: none; +} +article.intro .edit-link a:hover, +article.intro .edit-link a:focus, +article.intro .edit-link a:active { + background: #777; +} + +/* Featured post */ +section.featured-post { + float: left; + margin: -1.625em -8.9% 1.625em; + padding: 1.625em 8.9% 0; + position: relative; + width: 100%; +} +section.featured-post .hentry { + border: none; + color: #666; + margin: 0; +} +section.featured-post .entry-meta { + clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; +} + +/* Small featured post */ +section.featured-post .attachment-small-feature { + float: right; + height: auto; + margin: 0 -8.9% 1.625em 0; + max-width: 59%; + position: relative; + right: -15px; +} +section.featured-post.small { + padding-top: 0; +} +section.featured-post .attachment-small-feature:hover, +section.featured-post .attachment-small-feature:focus, +section.featured-post .attachment-small-feature:active { + opacity: .8; +} +article.feature-image.small { + float: left; + margin: 0 0 1.625em; + width: 45%; +} +article.feature-image.small .entry-title { + line-height: 1.2em; +} +article.feature-image.small .entry-summary { + color: #555; + font-size: 13px; +} +article.feature-image.small .entry-summary p a { + background: #222; + color: #eee; + display: block; + left: -23.8%; + padding: 9px 26px 9px 85px; + position: relative; + text-decoration: none; + top: 20px; + width: 180px; + z-index: 1; +} +article.feature-image.small .entry-summary p a:hover { + background: #1982d1; + color: #eee; + color: rgba(255,255,255,0.8); +} + +/* Large featured post */ +section.feature-image.large { + border: none; + max-height: 288px; + padding: 0; + width: 100%; +} +section.feature-image.large .showcase-heading { + display: none; +} +section.feature-image.large .hentry { + border-bottom: none; + left: 9%; + margin: 1.625em 9% 0 0; + position: absolute; + top: 0; +} +article.feature-image.large .entry-title a { + background: #222; + background: rgba(0,0,0,0.8); + -moz-border-radius: 3px; + border-radius: 3px; + color: #fff; + display: inline-block; + font-weight: 300; + padding: .2em 20px; +} +section.feature-image.large:hover .entry-title a, +section.feature-image.large .entry-title:hover a { + background: #eee; + background: rgba(255,255,255,0.8); + color: #222; +} +article.feature-image.large .entry-summary { + display: none; +} +section.feature-image.large img { + display: block; + height: auto; + max-width: 117.9%; + padding: 0 0 6px; +} + +/* Featured Slider */ +.featured-posts { + border-bottom: 1px solid #ddd; + display: block; + height: 328px; + margin: 1.625em -8.9% 20px; + max-width: 1000px; + padding: 0; + position: relative; + overflow: hidden; +} +.featured-posts .showcase-heading { + padding-left: 8.9%; +} +.featured-posts section.featured-post { + background: #fff; + height: 288px; + left: 0; + margin: 0; + position: absolute; + top: 30px; + width: auto; +} +.featured-posts section.featured-post.large { + max-width: 100%; + overflow: hidden; +} +.featured-posts section.featured-post { + -webkit-transition-duration: 200ms; + -webkit-transition-property: opacity, visibility; + -webkit-transition-timing-function: ease; + -moz-transition-duration: 200ms; + -moz-transition-property: opacity, visibility; + -moz-transition-timing-function: ease; +} +.featured-posts section.featured-post { + opacity: 0; + visibility: hidden; +} +.featured-posts #featured-post-1 { + opacity: 1; + visibility: visible; +} +.featured-post .feature-text:after, +.featured-post .feature-image.small:after { + content: ' '; + background: -moz-linear-gradient(top, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0)), color-stop(100%,rgba(255,255,255,1))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%); /* IE10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ffffff',GradientType=0 ); /* IE6-9 */ + background: linear-gradient(top, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%); /* W3C */ + width: 100%; + height: 45px; + position: absolute; + top: 230px; +} +.featured-post .feature-image.small:after { + top: 253px; +} +#content .feature-slider { + top: 5px; + right: 8.9%; + overflow: visible; + position: absolute; +} +.feature-slider ul { + list-style-type: none; + margin: 0; +} +.feature-slider li { + float: left; + margin: 0 6px; +} +.feature-slider a { + background: #3c3c3c; + background: rgba(60,60,60,0.9); + -moz-border-radius: 12px; + border-radius: 12px; + -webkit-box-shadow: inset 1px 1px 5px rgba(0,0,0,0.5), inset 0 0 2px rgba(255,255,255,0.5); + -moz-box-shadow: inset 1px 1px 5px rgba(0,0,0,0.5), inset 0 0 2px rgba(255,255,255,0.5); + box-shadow: inset 1px 1px 5px rgba(0,0,0,0.5), inset 0 0 2px rgba(255,255,255,0.5); + display: block; + width: 14px; + height: 14px; +} +.feature-slider a.active { + background: #1982d1; + -webkit-box-shadow: inset 1px 1px 5px rgba(0,0,0,0.4), inset 0 0 2px rgba(255,255,255,0.8); + -moz-box-shadow: inset 1px 1px 5px rgba(0,0,0,0.4), inset 0 0 2px rgba(255,255,255,0.8); + box-shadow: inset 1px 1px 5px rgba(0,0,0,0.4), inset 0 0 2px rgba(255,255,255,0.8); + cursor: default; + opacity: 0.5; +} + +/* Recent Posts */ +section.recent-posts { + padding: 0 0 1.625em; +} +section.recent-posts .hentry { + border: none; + margin: 0; +} +section.recent-posts .other-recent-posts { + border-bottom: 1px solid #ddd; + list-style: none; + margin: 0; +} +section.recent-posts .other-recent-posts li { + padding: 0.3125em 0; + position: relative; +} +section.recent-posts .other-recent-posts .entry-title { + border-top: 1px solid #ddd; + font-size: 17px; +} +section.recent-posts .other-recent-posts a[rel="bookmark"] { + color: #373737; + float: left; + max-width: 84%; +} +section.recent-posts .other-recent-posts a[rel="bookmark"]:after { + content: '-'; + color: transparent; + font-size: 11px; +} +section.recent-posts .other-recent-posts a[rel="bookmark"]:hover { +} +section.recent-posts .other-recent-posts .comments-link a, +section.recent-posts .other-recent-posts .comments-link > span { + border-bottom: 2px solid #999; + bottom: -2px; + color: #444; + display: block; + font-size: 10px; + font-weight: 500; + line-height: 2.76333em; + padding: 0.3125em 0 0.3125em 1em; + position: absolute; + right: 0; + text-align: right; + text-transform: uppercase; + z-index: 1; +} +section.recent-posts .other-recent-posts .comments-link > span { + border-color: #bbb; + color: #888; +} +section.recent-posts .other-recent-posts .comments-link a:hover { + color: #1982d1; + border-color: #1982d1; +} +section.recent-posts .other-recent-posts li:after { + clear: both; + content: '.'; + display: block; + height: 0; + visibility: hidden; +} + + +/* =Attachments +----------------------------------------------- */ + +.image-attachment div.attachment { + background: #f9f9f9; + border: 1px solid #ddd; + border-width: 1px 0; + margin: 0 -8.9% 1.625em; + overflow: hidden; + padding: 1.625em 1.625em 0; + text-align: center; +} +.image-attachment div.attachment img { + display: block; + height: auto; + margin: 0 auto 1.625em; + max-width: 100%; +} +.image-attachment div.attachment a img { + border-color: #f9f9f9; +} +.image-attachment div.attachment a:focus img, +.image-attachment div.attachment a:hover img, +.image-attachment div.attachment a:active img { + border-color: #ddd; + background: #fff; +} +.image-attachment .entry-caption p { + font-size: 10px; + letter-spacing: 0.1em; + line-height: 2.6em; + margin: 0 0 2.6em; + text-transform: uppercase; +} + + +/* =Navigation +-------------------------------------------------------------- */ + +#content nav { + clear: both; + overflow: hidden; + padding: 0 0 1.625em; +} +#content nav a { + font-size: 12px; + font-weight: bold; + line-height: 2.2em; +} +#nav-above { + padding: 0 0 1.625em; +} +#nav-above { + display: none; +} +.paged #nav-above { + display: block; +} +.nav-previous { + float: left; + width: 50%; +} +.nav-next { + float: right; + text-align: right; + width: 50%; +} +#content nav .meta-nav { + font-weight: normal; +} + +/* Singular navigation */ +#nav-single { + float: right; + position: relative; + top: -0.3em; + text-align: right; + z-index: 1; +} +#nav-single .nav-previous, +#nav-single .nav-next { + width: auto; +} +#nav-single .nav-next { + padding-left: .5em; +} +#nav-single .nav-previous { + padding-right: .5em; +} + + +/* =Widgets +----------------------------------------------- */ + +.widget-area { + font-size: 12px; +} +.widget { + clear: both; + margin: 0 0 2.2em; +} +.widget-title { + color: #666; + font-size: 10px; + font-weight: 500; + letter-spacing: 0.1em; + line-height: 2.6em; + text-transform: uppercase; +} +.widget ul { + font-size: 15px; + margin: 0; +} +.widget ul ul { + margin-left: 1.5em; +} +.widget ul li { + color: #777; + font-size: 13px; +} +.widget a { + font-weight: bold; + text-decoration: none; +} +.widget a:hover, +.widget a:focus, +.widget a:active { + text-decoration: underline; +} + +/* Search Widget */ +.widget_search form { + margin: 0 0 1.625em; +} +.widget_search #s { + width: 77%; +} +.widget_search #searchsubmit { + background: #ddd; + border: 1px solid #ccc; + -webkit-box-shadow: inset 0px -1px 1px rgba(0, 0, 0, 0.09); + -moz-box-shadow: inset 0px -1px 1px rgba(0, 0, 0, 0.09); + box-shadow: inset 0px -1px 1px rgba(0, 0, 0, 0.09); + color: #888; + font-size: 13px; + line-height: 25px; + position: relative; + top: -2px; +} +.widget_search #searchsubmit:active { + background: #1982d1; + border-color: #0861a5; + -webkit-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.1); + color: #bfddf3; +} + +/* Ephemera Widget */ +section.ephemera ol, +.widget_twentyeleven_ephemera ol { + list-style: square; + margin: 5px 0 0; +} +.widget_twentyeleven_ephemera .widget-entry-title { + font-size: 15px; + font-weight: bold; + padding: 0; +} +.widget_twentyeleven_ephemera .comments-link a, +.widget_twentyeleven_ephemera .comments-link > span { + color: #666; + display: block; + font-size: 10px; + font-weight: 500; + line-height: 2.76333em; + text-transform: uppercase; +} +section.ephemera .entry-title .comments-link a:hover, +.widget_twentyeleven_ephemera .entry-title .comments-link a:hover { +} +section.ephemera .entry-title a span { + color: #29628d; +} + +/* Twitter */ +.widget_twitter li { + list-style-type: none; + margin-bottom: 14px; +} +.widget_twitter .timesince { + display: block; + font-size: 11px; + margin-right: -10px; + text-align: right; +} + +/* Widget Image */ +.widget_image img { + border: 0; + padding: 0; + height: auto; + max-width: 100%; +} + +/* Calendar Widget */ + +.widget_calendar #wp-calendar { + color: #555; + width: 95%; + text-align: center; +} +.widget_calendar #wp-calendar caption, +.widget_calendar #wp-calendar td, +.widget_calendar #wp-calendar th { + text-align: center; +} +.widget_calendar #wp-calendar caption { + font-size: 11px; + font-weight: 500; + padding: 5px 0 3px 0; + text-transform: uppercase; +} +.widget_calendar #wp-calendar th { + background: #f4f4f4; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + font-weight: bold; +} +.widget_calendar #wp-calendar tfoot td { + background: #f4f4f4; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; +} + + +/* =Comments +----------------------------------------------- */ + +#comments-title { + color: #666; + font-size: 10px; + font-weight: 500; + line-height: 2.6em; + padding: 0 0 2.6em; + text-transform: uppercase; +} +.nopassword, +.nocomments { + color: #aaa; + font-size: 24px; + font-weight: 100; + margin: 26px 0; + text-align: center; +} +.commentlist { + list-style: none; + margin: 0 auto; + width: 68.9%; +} +.content .commentlist, +.page-template-sidebar-page-php .commentlist { + width: 100%; /* reset the width for the one-column and sidebar page layout */ +} +.commentlist > li.comment { + background: #f6f6f6; + border: 1px solid #ddd; + -moz-border-radius: 3px; + border-radius: 3px; + margin: 0 0 1.625em; + padding: 1.625em; + position: relative; +} +.commentlist .pingback { + margin: 0 0 1.625em; + padding: 0 1.625em; +} +.commentlist .children { + list-style: none; + margin: 0; +} +.commentlist .children li.comment { + background: #fff; + border-left: 1px solid #ddd; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin: 1.625em 0 0; + padding: 1.625em; + position: relative; +} +.commentlist .children li.comment .fn { + display: block; +} +.comment-meta .fn { + font-style: normal; +} +.comment-meta { + color: #666; + font-size: 12px; + line-height: 2.2em; +} +.commentlist .children li.comment .comment-meta { + line-height: 1.625em; + margin-left: 50px; +} +.commentlist .children li.comment .comment-content { + margin: 1.625em 0 0; +} +.comment-meta a { + font-weight: bold; +} +.comment-meta a:focus, +.comment-meta a:active, +.comment-meta a:hover { +} +.commentlist .avatar { + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px #ccc; + -moz-box-shadow: 0 1px 2px #ccc; + box-shadow: 0 1px 2px #ccc; + left: -102px; + padding: 0; + position: absolute; + top: 0; +} +.commentlist > li:before { + content: url(images/comment-arrow.png); + left: -21px; + position: absolute; +} +.commentlist > li.pingback:before { + content: ''; +} +.commentlist .children .avatar { + background: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + left: 2.2em; + padding: 0; + top: 2.2em; +} +a.comment-reply-link { + background: #eee; + -moz-border-radius: 3px; + border-radius: 3px; + color: #666; + display: inline-block; + font-size: 12px; + padding: 0 8px; + text-decoration: none; +} +a.comment-reply-link:hover, +a.comment-reply-link:focus, +a.comment-reply-link:active { + background: #888; + color: #fff; +} +a.comment-reply-link > span { + display: inline-block; + position: relative; + top: -1px; +} + +/* Post author highlighting */ +.commentlist > li.bypostauthor { + background: #ddd; + border-color: #d3d3d3; +} +.commentlist > li.bypostauthor .comment-meta { + color: #575757; +} +.commentlist > li.bypostauthor .comment-meta a:focus, +.commentlist > li.bypostauthor .comment-meta a:active, +.commentlist > li.bypostauthor .comment-meta a:hover { +} +.commentlist > li.bypostauthor:before { + content: url(images/comment-arrow-bypostauthor.png); +} + +/* Post Author threaded comments */ +.commentlist .children > li.bypostauthor { + background: #ddd; + border-color: #d3d3d3; +} + +/* sidebar-page.php comments */ +/* Make sure we have room for our comment avatars */ +.page-template-sidebar-page-php .commentlist > li.comment, +.page-template-sidebar-page-php.commentlist .pingback { + margin-left: 102px; + width: auto; +} +/* And a full-width comment form */ +.page-template-sidebar-page-php #respond { + width: auto; +} + +/* Comment Form */ +#respond { + background: #ddd; + border: 1px solid #d3d3d3; + -moz-border-radius: 3px; + border-radius: 3px; + margin: 0 auto 1.625em; + padding: 1.625em; + position: relative; + width: 68.9%; +} +#respond input[type="text"], +#respond textarea { + background: #fff; + border: 4px solid #eee; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: inset 0 1px 3px rgba(204,204,204,0.95); + -moz-box-shadow: inset 0 1px 3px rgba(204,204,204,0.95); + box-shadow: inset 0 1px 3px rgba(204,204,204,0.95); + position: relative; + padding: 10px; + text-indent: 80px; +} +#respond .comment-form-author, +#respond .comment-form-email, +#respond .comment-form-url, +#respond .comment-form-comment { + position: relative; +} +#respond .comment-form-author label, +#respond .comment-form-email label, +#respond .comment-form-url label, +#respond .comment-form-comment label { + background: #eee; + -webkit-box-shadow: 1px 2px 2px rgba(204,204,204,0.8); + -moz-box-shadow: 1px 2px 2px rgba(204,204,204,0.8); + box-shadow: 1px 2px 2px rgba(204,204,204,0.8); + color: #555; + display: inline-block; + font-size: 13px; + left: 4px; + min-width: 60px; + padding: 4px 10px; + position: relative; + top: 40px; + z-index: 1; +} +#respond input[type="text"]:focus, +#respond textarea:focus { + text-indent: 0; + z-index: 1; +} +#respond textarea { + resize: vertical; + width: 95%; +} +#respond .comment-form-author .required, +#respond .comment-form-email .required { + color: #bd3500; + font-size: 22px; + font-weight: bold; + left: 75%; + position: absolute; + top: 45px; + z-index: 1; +} +#respond .comment-notes, +#respond .logged-in-as { + font-size: 13px; +} +#respond p { + margin: 10px 0; +} +#respond .form-submit { + float: right; + margin: -20px 0 10px; +} +#respond input#submit { + background: #222; + border: none; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + -moz-box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + box-shadow: 0px 1px 2px rgba(0,0,0,0.3); + color: #eee; + cursor: pointer; + font-size: 15px; + margin: 20px 0; + padding: 5px 42px 5px 22px; + position: relative; + left: 30px; + text-shadow: 0 -1px 0 rgba(0,0,0,0.3); +} +#respond input#submit:active { + background: #1982d1; + color: #bfddf3; +} +#respond #cancel-comment-reply-link { + color: #666; + margin-left: 10px; + text-decoration: none; +} +#respond .logged-in-as a:hover, +#respond #cancel-comment-reply-link:hover { + text-decoration: underline; +} +.commentlist #respond { + margin: 1.625em 0 0; + width: auto; +} +#reply-title { + color: #373737; + font-size: 24px; + font-weight: bold; + line-height: 30px; +} +#cancel-comment-reply-link { + color: #888; + display: block; + font-size: 10px; + font-weight: normal; + line-height: 2.2em; + letter-spacing: 0.05em; + position: absolute; + right: 1.625em; + text-decoration: none; + text-transform: uppercase; + top: 1.1em; +} +#cancel-comment-reply-link:focus, +#cancel-comment-reply-link:active, +#cancel-comment-reply-link:hover { + color: #ff4b33; +} +#respond label { + line-height: 2.2em; +} +#respond input[type=text] { + display: block; + height: 24px; + width: 75%; +} +#respond p { + font-size: 12px; +} +p.comment-form-comment { + margin: 0; +} +.form-allowed-tags { + display: none; +} + + +/* =Footer +----------------------------------------------- */ + +#colophon { + clear: both; +} +#supplementary { + border-top: 1px solid #ddd; + padding: 1.625em 7.6%; + overflow: hidden; +} + +/* Two Footer Widget Areas */ +#supplementary.two .widget-area { + float: left; + margin-right: 3.7%; + width: 48.1%; +} +#supplementary.two .widget-area + .widget-area { + margin-right: 0; +} + +/* Three Footer Widget Areas */ +#supplementary.three .widget-area { + float: left; + margin-right: 3.7%; + width: 30.85%; +} +#supplementary.three .widget-area + .widget-area + .widget-area { + margin-right: 0; +} + +/* Site Generator Line */ +#site-generator { + background: #f9f9f9; + border-top: 1px solid #ddd; + color: #666; + font-size: 12px; + line-height: 2.2em; + padding: 2.2em 0.5em; + text-align: center; +} +#site-generator a { + color: #555; + font-weight: bold; +} + + +/* =Responsive Structure +----------------------------------------------- */ + +@media (max-width: 800px) { + /* Simplify the basic layout */ + #main #content { + margin: 0 7.6%; + width: auto; + } + #nav-below { + border-bottom: 1px solid #ddd; + margin-bottom: 1.625em; + } + #main #secondary { + float: none; + margin: 0 7.6%; + width: auto; + } + /* Simplify the showcase template */ + .page-template-showcase-php .featured-posts { + min-height: 280px; + } + .featured-posts section.featured-post { + height: auto; + } + .page-template-showcase-php section.recent-posts { + float: none; + margin: 0; + width: 100%; + } + .page-template-showcase-php #main .widget-area { + float: none; + margin: 0; + width: auto; + } + .page-template-showcase-php .other-recent-posts { + border-bottom: 1px solid #ddd; + } + /* Simplify the showcase template when small feature */ + section.featured-post .attachment-small-feature, + .one-column section.featured-post .attachment-small-feature { + border: none; + display: block; + float: left; + height: auto; + margin: 0.625em auto 1.025em; + max-width: 30%; + position: static; + } + article.feature-image.small { + float: right; + margin: 0 0 1.625em; + width: 64%; + } + .one-column article.feature-image.small .entry-summary { + height: auto; + } + article.feature-image.small .entry-summary p a { + left: 0; + padding-left: 20px; + padding-right: 20px; + width: auto; + } + /* Remove the margin on singular articles */ + .singular .entry-header, + .singular .entry-content, + .singular footer.entry-meta, + .singular #comments-title { + width: 100%; + } + /* Simplify the pullquotes and pull styles */ + .singular blockquote.pull { + margin: 0 0 1.625em; + } + .singular .pull.alignleft { + margin: 0 1.625em 0 0; + } + .singular .pull.alignright { + margin: 0 0 0 1.625em; + } + .singular .entry-meta .edit-link a { + left: 0; + position: absolute; + top: 40px; + } + .singular #author-info { + margin: 2.2em -8.8% 0; + padding: 20px 8.8%; + } + /* Make sure we have room for our comment avatars */ + .commentlist { + width: 100%; + } + .commentlist > li.comment, + .commentlist .pingback { + margin-left: 102px; + width: auto; + } + /* And a full-width comment form */ + #respond { + width: auto; + } + /* No need to float footer widgets at this size */ + #colophon #supplementary .widget-area { + float: none; + margin-right: 0; + width: auto; + } + /* No need to float 404 widgets at this size */ + .error404 #main .widget { + float: none; + margin-right: 0; + width: auto; + } + +} +@media (max-width: 650px) { + /* @media (max-width: 650px) Reduce font-sizes for better readability on smaller devices */ + body, input, textarea { + font-size: 13px; + } + #site-title a { + font-size: 24px; + } + #site-description { + font-size: 12px; + } + #access ul { + font-size: 12px; + } + article.intro .entry-content { + font-size: 12px; + } + .entry-title { + font-size: 21px; + } + .featured-post .entry-title { + font-size: 14px; + } + .singular .entry-title { + font-size: 28px; + } + .entry-meta { + font-size: 12px; + } + blockquote { + margin: 0; + } + blockquote.pull { + font-size: 17px; + } + /* Reposition the site title and description slightly */ + #site-title { + padding: 5.30625em 0 0; + } + #site-title, + #site-description { + margin-right: 0; + } + /* Make sure the logo and search form don't collide */ + #branding #searchform { + top: 1.625em !important; + } + /* Floated content doesn't work well at this size */ + .alignleft, + .alignright { + display: block; + float: none; + margin-left: 0; + margin-right: 0; + } + /* Make sure the post-post navigation doesn't collide with anything */ + #nav-single { + display: block; + position: static; + } + .singular .hentry { + padding: 1.625em 0 0; + } + .singular.page .hentry { + padding: 1.625em 0 0; + } + /* Talking avatars take up too much room at this size */ + .commentlist > li.comment, + .commentlist > li.pingback { + margin-left: 0 !important; + } + .commentlist .avatar { + background: transparent; + display: block; + padding: 0; + position: static; + } + .commentlist .children .avatar { + background: none; + left: 2.2em; + padding: 0; + position: absolute; + top: 2.2em; + } + /* Use the available space in the smaller comment form */ + #respond input[type="text"] { + width: 95%; + } + #respond .comment-form-author .required, + #respond .comment-form-email .required { + left: 95%; + } + #content .gallery-columns-3 .gallery-item { + width: 31%; + padding-right: 2%; + } + #content .gallery-columns-3 .gallery-item img { + width: 100%; + height: auto; + } + +} +@media (max-width: 450px) { + #content .gallery-columns-2 .gallery-item { + width: 45%; + padding-right: 4%; + } + #content .gallery-columns-2 .gallery-item img { + width: 100%; + height: auto; + } + +} +@media only screen and (min-device-width: 320px) and (max-device-width: 480px) { + body { + padding: 0; + } + #page { + margin-top: 0; + } + #branding { + border-top: none; + } + +} + + +/* =Print +----------------------------------------------- */ + +@media print { + body { + background: none !important; + font-size: 10pt; + } + footer.entry-meta a[rel=bookmark]:link:after, + footer.entry-meta a[rel=bookmark]:visited:after { + content: " [" attr(href) "] "; /* Show URLs */ + } + #page { + clear: both !important; + display: block !important; + float: none !important; + max-width: 100%; + position: relative !important; + } + #branding { + border-top: none !important; + padding: 0; + } + #branding hgroup { + margin: 0; + } + #site-title a { + font-size: 21pt; + } + #site-description { + font-size: 10pt; + } + #branding #searchform { + display: none; + } + #branding img { + display: none; + } + #access { + display: none; + } + #main { + border-top: none; + box-shadow: none; + } + #primary { + float: left; + margin: 0; + width: 100%; + } + #content { + margin: 0; + width: auto; + } + .singular #content { + margin: 0; + width: 100%; + } + .singular .entry-header .entry-meta { + position: static; + } + .entry-meta .edit-link a { + display: none; + } + #content nav { + display: none; + } + .singular .entry-header, + .singular .entry-content, + .singular footer.entry-meta, + .singular #comments-title { + margin: 0; + width: 100%; + } + .singular .hentry { + padding: 0; + } + .entry-title, + .singular .entry-title { + font-size: 21pt; + } + .entry-meta { + font-size: 10pt; + } + .entry-header .comments-link { + display: none; + } + .page-link { + display: none; + } + .singular #author-info { + background: none; + border-bottom: none; + border-top: none; + margin: 2.2em 0 0; + padding: 0; + } + #respond { + display: none; + } + .widget-area { + display: none; + } + #colophon { + display: none; + } + + /* Comments */ + .commentlist > li.comment { + background: none; + border: 1px solid #ddd; + -moz-border-radius: 3px 3px 3px 3px; + border-radius: 3px 3px 3px 3px; + margin: 0 auto 1.625em; + padding: 1.625em; + position: relative; + width: auto; + } + .commentlist .avatar { + height: 39px; + left: 2.2em; + top: 2.2em; + width: 39px; + } + .commentlist li.comment .comment-meta { + line-height: 1.625em; + margin-left: 50px; + } + .commentlist li.comment .fn { + display: block; + } + .commentlist li.comment .comment-content { + margin: 1.625em 0 0; + } + .commentlist .comment-edit-link { + display: none; + } + .commentlist > li::before, + .commentlist > li.bypostauthor::before { + content: ''; + } + .commentlist .reply { + display: none; + } + + /* Post author highlighting */ + .commentlist > li.bypostauthor { + color: #444; + } + .commentlist > li.bypostauthor .comment-meta { + color: #666; + } + .commentlist > li.bypostauthor:before { + content: none; + } + + /* Post Author threaded comments */ + .commentlist .children > li.bypostauthor { + background: #fff; + border-color: #ddd; + } + .commentlist .children > li.bypostauthor > article, + .commentlist .children > li.bypostauthor > article .comment-meta { + color: #666; + } + +} + + +/* =IE7 +----------------------------------------------- */ + +#ie7 article.intro { + margin-left: -7.6%; + margin-right: -7.6%; + padding-left: -7.6%; + padding-right: -7.6%; + max-width: 1000px; +} +#ie7 section.featured-post { + margin-left: -7.6%; + margin-right: -7.6%; + max-width: 850px; +} +#ie7 section.recent-posts { + margin-right: 7.6%; +} + +/* =IE8 +----------------------------------------------- */ + +#ie8 section.feature-image.large img { + width: 100%; +} +/** + * Theme Name: Spark + * Description: Child theme for the twentyeleven theme + * Author: Andy Konwinski + * Template: twentyeleven + **/ + +@import url("../twentyeleven/style.css"); + +ul { + margin-bottom: 10px; +} + +.shadow { + -moz-box-shadow: -1px 1px 5px 1px #ccc; + -webkit-box-shadow: -1px 1px 5px 1px #ccc; + box-shadow: -1px 1px 5px 1px #ccc; +} + +/* Make embedded video containers look better with responsive design */ +.video-container { + position: relative; + padding-bottom: 90%; + padding-top: 25px; + height: 0; + overflow: hidden; + margin-bottom: 20px; +} + +.video-container iframe, +.video-container object, +.video-container embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.entry-content { + padding: 0 !important; +} + +.singular.page .hentry, .singular .hentry { + padding: 0; +} + +.hentry { + border-bottom: none; +} + +.singular .entry-header { + width: 100%; +} + +.singular .entry-content { + width: 100%; + margin-bottom: 30px; +} + +.single-post .entry-content { + /*border-bottom: thin lightgray dotted;*/ +} + +.singular #content { + width: 100%; + margin: 0; +} + +.archive #content { + width: 100%; +} + +.page-title { + margin-bottom: 0; +} + +.entry-header { + margin-bottom: 5px; +} + +.entry-header .comments-link a { + top: 0; +} + +/* =Footer +----------------------------------------------- */ +/* Site Generator Line */ +#site-generator { + background: white; + border-top: 1px solid #ddd; + color: #666; + font-size: 12px; + line-height: 1.5em; + padding: 1.5em 0.5em; + text-align: center; + height: 39px; +} + +#site-generator p { + display: inline-block; + padding-top: 15px; + color: #777; +} + +#site-generator a { + text-decoration: underline; + font-weight: normal; +} + +#site-generator .amp-logo { + display: inline-block; + text-decoration: none; + width: 167px; + height: 39px; + float: right; +} + +.error404 .widgettitle { + line-height: 1.5em; + text-transform: none; + text-align: left; + font-size: 17px; +} + +/* =Menu +-------------------------------------------------------------- */ +#access { + background: #222; /* Show a solid color for older browsers */ + background: -moz-linear-gradient(#252525, #0a0a0a); + background: -o-linear-gradient(#252525, #0a0a0a); + background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#252525), to(#0a0a0a)); /* older webkit syntax */ + background: -webkit-linear-gradient(#484A63, #0a0a0a); + -webkit-box-shadow: rgba(0, 0, 0, 0.4) 0px 1px 2px; + -moz-box-shadow: rgba(0, 0, 0, 0.4) 0px 1px 2px; + box-shadow: rgba(0, 0, 0, 0.4) 0px 1px 2px; + clear: both; + display: block; + float: left; + margin: 0 auto; + width: 100%; + text-align: center; +} + +/* =Structure +----------------------------------------------- */ +.singular .entry-meta .edit-link a { + position: absolute; + left: 0; + top: -18px; +} + +.singular #comments-title { + margin: 0; +} +.singular footer.entry-meta { + margin: 0; +} +#comments-title { + text-transform: none; + line-height: 1.5em; + font-size: 1.5em !important; +} + +/* Copied in from spark-project.org stylesheet */ +/*---------------------------------------------*/ + +*{margin:0; padding:0;} +body { + font-family: Verdana, Arial, "Trebuchet MS", Sans-Serif, Georgia, Courier, "Times New Roman", Serif; + font-size: 12px; + background: #fff; + color: #333; + margin:0; + padding:0; +} + +body.custom-background { + background-color: white !important; +} + +a { color: #06f; text-decoration: none; } +a:hover { text-decoration: none; color : #000; } + +img { border: none; padding: 6px; } +img a {border:none;} + +#page { + max-width: 795px; + margin: 0 auto; +} + +#site-title a { + color: #000; + padding: 0; + line-height: 75px; + font-size: 70px; + font-weight: bold; + font-family: Corbel, "Trebuchet MS", Verdana, Arial, Sans-Serif; +} +#site-title a:hover { + color: #000; +} +#site-description { + color: #06f; + font-size: 17px; + font-weight: 100; + margin-bottom: 2.7em; +} +/* +#header h2 a { +#header h2 a:hover { color: #06f; } +*/ + +#menu { + background: #454645 url(images/menu.jpg); + height: 36px; + line-height: 36px; +} + +#menu ul { + list-style-type: none; + margin: 0; + padding-left: 10px; +} +#menu ul li { + display: block; + float: left; +} +#menu ul li a { + display: block; + padding: 0 10px 0 10px; + text-decoration: none; + color: #fff; + font-size: 13px; + font-weight: 600; +} +#menu ul li a:hover { + color: #fff; + background: url(images/menuover.png) repeat-x; +} + +#wrapper { + padding: 0 0 0 20px; +} + +#primary { + width: 100%; +} + +#main { + width: 95%; + margin: 0 2.5%; +} +#content { + float: left; + margin: 0; + text-align: justify; + width: 58%; +} + +#content nav{ + padding-bottom: 0; +} + +#footer { + background: #fff; + margin: 0 auto; + font-weight: 100; + font-size: 12px; + text-align: center; + color #999; + height: 50px; + line-height: 50px; +} +#footer p { color: #999; } +#footer a { color: #999; text-decoration: none; } +#footer a:hover { text-decoration: underline; } + + +#content h1 { + font-weight: 100; + font-size: 125%; + margin: 0 0 4px; padding: 0 0 3px; + color: #888; +} + +#content h2 { + font-weight: 100; + font-size: 23px; + margin: 0 0 4px; padding: 0 0 3px; + color: #888; +} + +#content h3 { + font-weight: bold; + font-size: 110%; + margin-top: 15px; + margin-bottom: 4px; + color: #333; +} + +#content ul, #content ol { + padding: 0 30px; +} + +#content ul li { + list-style-type: square; +} + +#secondary { + width: 35%; + padding-left: 20px; + margin-right: 10px; +} + +@media only all and (min-width: 800px) { + #secondary { + border-left: 1px solid #ddd; + } +} + +#secondary img { padding: 0; margin: 0; } + +#secondary ul { + list-style-type: none; +} + +#secondary h2 { + height: 50px; + line-height: 50px; + font-weight: 600; + font-size: 14px; + margin: 30px 0 0 0; + color: #111; +} + +.code { + font-family: "Monaco", "Courier New", Monospace; + border-top: 1px solid #aaa; + border-bottom: 1px solid #aaa; + padding-top: 8px; + padding-bottom: 8px; + margin-bottom: 5px; + line-height: 140%; +} + +.keyword { color: #888; font-weight: bold; } +.sparkop { color: #06f; } +.closure { color: #f09; } +.closure .keyword { color: #f09; font-weight: normal; } +.string { color: #393; } + +.caption { width: 100%; text-align: center; font-weight: bold; } + +.latestnewswidget { + margin-bottom: 0; +} + +.latestnewswidget div { + width: 95%; + background: #ffefaa; + padding: 4px 10px 4px 10px; + margin-bottom: 15px; + border-bottom: none; +} + +.widget a { + font-weight: normal; +} + +#content p { margin-bottom: 10px; } + +.question { font-weight: bold; font-size: 110%; margin-top: 15px; } + +code, tt { font-family: "Monaco", "Courier New", Monospace; font-size: 12px; } + +.post-info { font-size: 10px; color: #444; } + +#branding { + border-top: none; + padding: 0px; +} +#branding img { border: none; padding: 0px 0px 0px 6px; } + +#comments { + font-size: 12px; +} + +#respond, .commentlist > li.bypostauthor { + background: #ddd; +} + +#respond .comment-notes { + font-size: 12px; +} + +#respond .logged-in-as { + font-size: 12px; +} + +#respond p, #respond h3 { + margin: 0px; +} + +#respond .comment-form-author label, +#respond .comment-form-email label, +#respond .comment-form-url label, +#respond .comment-form-comment label { + font-size: 12px; + top: 40px; + padding-top: 8px; +} diff --git a/documentation.md b/documentation.md new file mode 100644 index 000000000..ef488ebdd --- /dev/null +++ b/documentation.md @@ -0,0 +1,84 @@ +--- +layout: global +title: Documentation +type: "page singular" +navigation: + weight: 3 + show: true +--- + +

Spark Documentation

+ +

Setup instructions, programming guides, and other documentation are available for each version of Spark below:

+ + + +

Read these documents to get started with Spark. In addition, this page lists a few other external resources for learning Spark.

+ +

Video Tutorials

+ + + +

Hands-On Exercises

+ + + +

AMP Camp Slides and Videos

+ + + +

Presentations

+ + + +

External Tutorials, Development Blogs, and Talks

+ + + +

Research Papers

+ + \ No newline at end of file diff --git a/downloads.md b/downloads.md new file mode 100644 index 000000000..65dbdf079 --- /dev/null +++ b/downloads.md @@ -0,0 +1,31 @@ +--- +layout: global +title: Downloads +type: singular +navigation: + weight: 3 + show: true +--- + +

Download Spark

+The latest release of Spark is 0.7.3. You can either download it as a source package (4 MB tar.gz) or get prebuilt packages for Hadoop 1 / CDH3 or CDH 4 (61 MB tar.gz). + +If you are interested in working with the newest under-development code or contributing to Spark development, you can also check out the master branch from Git: git clone git://github.com/mesos/spark.git. + +Once you've downloaded Spark, you can find instructions for installing and building it on the documentation page. +

Previous Releases

+ + diff --git a/examples.md b/examples.md new file mode 100644 index 000000000..36e7b9658 --- /dev/null +++ b/examples.md @@ -0,0 +1,99 @@ +--- +layout: global +title: Examples +type: "page singular" +navigation: + weight: 4 + show: true +--- +

Spark Examples

+ +Spark is built around distributed datasets that support types of parallel operations: transformations, which are lazy and yield another distributed dataset (e.g., map, filter, and join), and actions, which force the computation of a dataset and return a result (e.g., count). The following examples show off some of the available operations and features. + +

Text Search

+ +In this example, we search through the error messages in a log file: + +

+

+val file = spark.textFile("hdfs://...")
+val errors = file.filter(line => line.contains("ERROR"))
+// Count all the errors
+errors.count()
+// Count errors mentioning MySQL
+errors.filter(line => line.contains("MySQL")).count()
+// Fetch the MySQL errors as an array of strings
+errors.filter(line => line.contains("MySQL")).collect()
+
+

+ +

The red code fragments are Scala function literals (closures) that get passed automatically to the cluster. The blue ones are Spark operations.

+ +

In-Memory Text Search

+ +

Spark can cache datasets in memory to speed up reuse. In the example above, we can load just the error messages in RAM using:

+ +

+

+errors.cache() +
+

+ +

After the first action that uses errors, later ones will be much faster.

+ + +

Word Count

+ +

In this example, we use a few more transformations to build a dataset of (String, Int) pairs called counts and then save it to a file.

+ +

+

+val file = spark.textFile("hdfs://...")
+val counts = file.flatMap(line => line.split(" "))
+                  .map(word => (word, 1))
+                  .reduceByKey(_ + _)
+counts.saveAsTextFile("hdfs://...") +
+

+ +

Estimating Pi

+ +

Spark can also be used for compute-intensive tasks. This code estimates π by "throwing darts" at a circle. We pick random points in the unit square ((0, 0) to (1,1)) and see how many fall in the unit circle. The fraction should be π / 4, so we use this to get our estimate.

+ +

+

+val count = spark.parallelize(1 to NUM_SAMPLES).map(i =>
+  val x = Math.random
+  val y = Math.random
+  if (x*x + y*y < 1) 1.0 else 0.0
+
).reduce(_ + _)
+println("Pi is roughly " + 4 * count / NUM_SAMPLES)
+
+

+ +

Logistic Regression

+ +

This is an iterative machine learning algorithm that seeks to find the best hyperplane that separates two sets of points in a multi-dimensional feature space. It can be used to classify messages into spam vs non-spam, for example. Because the algorithm applies the same MapReduce operation repeatedly to the same dataset, it benefits greatly from caching the input data in RAM across iterations.

+ +

+

+val points = spark.textFile(...).map(parsePoint).cache()
+var w = Vector.random(D) // current separating plane
+for (i <- 1 to ITERATIONS) {
+  val gradient = points.map(p =>
+    (1 / (1 + exp(-p.y*(w dot p.x))) - 1) * p.y * p.x
+  
).reduce(_ + _)
+  w -= gradient
+}
+println("Final separating plane: " + w)
+
+

+ +

Note that w gets shipped automatically to the cluster with every map call.

+ +

The graph below compares the performance of this Spark program against a Hadoop implementation on 30 GB of data on an 80-core cluster, showing the benefit of in-memory caching:

+ +

+Logistic regression performance in Spark vs Hadoop +

+ diff --git a/faq.md b/faq.md new file mode 100644 index 000000000..14a44478f --- /dev/null +++ b/faq.md @@ -0,0 +1,39 @@ +--- +layout: global +title: FAQ +type: "page singular" +navigation: + weight: 7 + show: true +--- +

Spark FAQ

+ +

Is Spark a modified version of Hadoop?

+

No. Spark is a completely separate codebase optimized for low latency, although it can load data from any Hadoop input source (InputFormat).

+ +

Which languages does Spark support?

+

Starting in version 0.7, Spark supports Scala, Java and Python.

+ +

Does Spark require modified versions of Scala or Python?

+

No. Spark requires no changes to Scala or compiler plugins. The Python API uses the standard CPython implementation, and can call into existing C libraries for Python such as NumPy.

+ +

What happens when a cached dataset does not fit in memory?

+

Spark can either spill it to disk or recompute the partitions that don't fit in RAM each time they are requested. By default, it uses recomputation, but you can set a dataset's storage level to MEMORY_AND_DISK to avoid this.

+ +

How can I run Spark on a cluster?

+

You can use either the standalone deploy mode, which depends only on Java, or the Apache Mesos cluster manager.

+

Note that you can also run Spark locally (possibly on multiple cores) without any special setup by just passing local[N] as the master URL, where N is the number of parallel threads you want.

+ +

I don't know Scala; how hard is it to pick it up to use Spark?

+

Scala itself is pretty easy to pick up if you have Java experience. Check out First Steps to Scala for a quick introduction, the Scala tutorial for Java programmers, or the free online book Programming in Scala.

+

Spark 0.6 also added a Java API, letting you use Spark from Java, and Spark 0.7 added a Python API.

+ +

What license is Spark under?

+

Spark is open source under the liberal BSD license.

+ +

How can I contribute to Spark?

+

Contact the mailing list or send us a pull request on GitHub. We're glad to hear about your experience using Spark and to accept patches

+

If you would like to report an issue, post it to the Spark issue tracker.

+ +

Where can I get more help?

+

Please post on the spark-users mailing list. We'll be glad to help!

\ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 000000000..6944559c8 Binary files /dev/null and b/favicon.ico differ diff --git a/images/amplab-small.png b/images/amplab-small.png new file mode 100644 index 000000000..4547fd094 Binary files /dev/null and b/images/amplab-small.png differ diff --git a/images/download.png b/images/download.png new file mode 100644 index 000000000..ce1c94b1d Binary files /dev/null and b/images/download.png differ diff --git a/images/spark-lr.png b/images/spark-lr.png new file mode 100644 index 000000000..a9729b519 Binary files /dev/null and b/images/spark-lr.png differ diff --git a/images/spark-project-header1.png b/images/spark-project-header1.png new file mode 100644 index 000000000..913243d98 Binary files /dev/null and b/images/spark-project-header1.png differ diff --git a/index.md b/index.md new file mode 100644 index 000000000..223819f94 --- /dev/null +++ b/index.md @@ -0,0 +1,52 @@ +--- +layout: global +title: Home +type: page +navigation: + weight: 1 + show: true +--- +## What is Spark? +Spark is an open source cluster computing system that aims to make data analytics fast — both fast to run and fast to write. +To run programs faster, Spark provides primitives for in-memory cluster computing: your job can load data into memory and query it repeatedly much more quickly than with disk-based systems like Hadoop MapReduce. +To make programming faster, Spark provides clean, concise APIs in Scala, Java and Python. You can also use Spark interactively from the Scala and Python shells to rapidly query big datasets. + +## What can it do? +Spark was initially developed for two applications where keeping data in memory helps: iterative algorithms, which are common in machine learning, and interactive data mining. In both cases, Spark can run up to 100x faster than Hadoop MapReduce. However, you can use Spark for general data processing too. Check out our example jobs. +Spark is also the engine behind Shark, a fully Apache Hive-compatible data warehousing system that can run 100x faster than Hive. +While Spark is a new engine, it can access any data source supported by Hadoop, making it easy to run over existing data. + +## Who uses it? +Spark was developed in the UC Berkeley AMPLab. It’s used by several groups of researchers at Berkeley to run large-scale applications such as spam filtering and traffic prediction. It’s also used to accelerate data analytics at Yahoo!, Conviva, Quantifind, and other companies — in total, 17 companies have contributed to Spark! Spark is open source under a BSD license, so download it to check it out. + +## Apache Incubator notice +Apache Spark is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF. + +{% sidebar %} +

Latest News

+
+ {% for post in site.categories.news limit:4 %} +
{{ post.title }}
+ {% endfor %} +
+ +
News Archive
+ + + +
+ file = spark.textFile("hdfs://...")
+  
+ file.flatMap(line => line.split(" "))
+     .map(word => (word, 1))
+     .reduceByKey(_ + _) +
+
Word Count implemented in Spark
+ +
+ Logistic regression performance in Spark vs Hadoop +
+
Logistic regression in Spark vs Hadoop
+

Download  Download Spark

+{% endsidebar %} + diff --git a/mailing-lists.md b/mailing-lists.md new file mode 100644 index 000000000..60c5f0f88 --- /dev/null +++ b/mailing-lists.md @@ -0,0 +1,39 @@ +--- +layout: global +title: Mailing Lists +type: "page singular" +navigation: + weight: 5 + show: true +--- +

Spark Mailing Lists

+ +

Get help using Spark or contribute to the project on our mailing lists:

+ + +

User Meetups

+ +

We host a regular Bay Area Spark User Meetup where you can meet the community in person. The meetup.com page also contains an archive of past meetups, and slides from them.

+ +

Issue Tracker

+ +

The project tracks bugs and new features on JIRA. If you'd like, you can also subscribe to the spark-issues group to receive emails about new or updated issues.

+ +

Old Mailing Lists

+ +

The following Google Groups contain Spark usage and developer discussions from before the transition to Apache. They will become read-only in September 2013:

+ diff --git a/news/_posts/2012-01-10-spark-meetups.html b/news/_posts/2012-01-10-spark-meetups.html new file mode 100644 index 000000000..5c5ba0faa --- /dev/null +++ b/news/_posts/2012-01-10-spark-meetups.html @@ -0,0 +1,11 @@ +--- +layout: post +title: We've started hosting a Bay Area Spark User Meetup +categories: +- News +tags: [] +status: publish +type: post +published: true +--- +We've started hosting a regular Bay Area Spark User Meetup. Sign up on the meetup.com page to be notified about events and meet other Spark developers and users. diff --git a/news/_posts/2012-04-25-nsdi-paper.html b/news/_posts/2012-04-25-nsdi-paper.html new file mode 100644 index 000000000..4f01d52ab --- /dev/null +++ b/news/_posts/2012-04-25-nsdi-paper.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Spark wins Best Paper Award at USENIX NSDI +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '1' + _wp_old_slug: hello-world +--- +Our paper on Spark won the Best Paper Award at the USENIX NSDI conference. You can see a video of the talk, as well as slides, online on the NSDI website. diff --git a/news/_posts/2012-10-15-spark-version-0-6-0-released.html b/news/_posts/2012-10-15-spark-version-0-6-0-released.html new file mode 100644 index 000000000..365145490 --- /dev/null +++ b/news/_posts/2012-10-15-spark-version-0-6-0-released.html @@ -0,0 +1,13 @@ +--- +layout: post +title: Spark version 0.6.0 released +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '1' +--- +Spark version 0.6.0 was released today, a major release that brings a wide range of performance improvements and new features, including a simpler standalone deploy mode and a Java API. Read more about it in the release notes. diff --git a/news/_posts/2012-11-22-spark-0-6-1-and-0-5-2-released.html b/news/_posts/2012-11-22-spark-0-6-1-and-0-5-2-released.html new file mode 100644 index 000000000..e1da4c3a0 --- /dev/null +++ b/news/_posts/2012-11-22-spark-0-6-1-and-0-5-2-released.html @@ -0,0 +1,13 @@ +--- +layout: post +title: Spark 0.6.1 and 0.5.2 out +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '1' +--- +Today we've made available two maintenance releases for Spark: 0.6.1 and 0.5.2. They both contain important bug fixes as well as some new features, such as the ability to build against Hadoop 2 distributions. We recommend that users update to the latest version for their branch; for new users, we recommend 0.6.1. diff --git a/news/_posts/2012-12-21-spark-and-shark-in-the-news.html b/news/_posts/2012-12-21-spark-and-shark-in-the-news.html new file mode 100644 index 000000000..d8f345787 --- /dev/null +++ b/news/_posts/2012-12-21-spark-and-shark-in-the-news.html @@ -0,0 +1,25 @@ +--- +layout: post +title: Spark and Shark in the news +categories: +- In-The-News +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +Recently, we've seen quite a bit of coverage of both Spark and Shark in the news. I wanted to list some of the more recent articles, for readers interested in learning more. + + + +In other news, there will be a full day of tutorials on Spark and Shark at the O'Reilly Strata conference in February. They include a three-hour introduction to Spark, Shark and BDAS Tuesday morning, and a three-hour hands-on exercise session. diff --git a/news/_posts/2012-12-21-video-from-first-spark-development-meetup.html b/news/_posts/2012-12-21-video-from-first-spark-development-meetup.html new file mode 100644 index 000000000..ba45bc97c --- /dev/null +++ b/news/_posts/2012-12-21-video-from-first-spark-development-meetup.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Video up from first Spark development meetup +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +On December 18th, we held the first of a series of Spark development meetups, for people interested in learning the Spark codebase and contributing to the project. There was quite a bit more demand than we anticipated, with over 80 people signing up and 64 attending. The first meetup was an introduction to Spark internals. Thanks to one of the attendees, there's now a video of the meetup on YouTube. We've also posted the slides. Look to see more development meetups on Spark and Shark in the future. diff --git a/news/_posts/2013-01-12-spark-tips-from-quantifind.html b/news/_posts/2013-01-12-spark-tips-from-quantifind.html new file mode 100644 index 000000000..8afac5dd8 --- /dev/null +++ b/news/_posts/2013-01-12-spark-tips-from-quantifind.html @@ -0,0 +1,19 @@ +--- +layout: post +title: Spark tips from Quantifind +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +Quantfind, one of the Bay Area companies that has been using Spark for predictive analytics, recently posted two useful entries on working with Spark in their tech blog: + +Thanks for sharing this, and looking forward to see others! diff --git a/news/_posts/2013-02-07-spark-0-6-2-released.html b/news/_posts/2013-02-07-spark-0-6-2-released.html new file mode 100644 index 000000000..ae9146753 --- /dev/null +++ b/news/_posts/2013-02-07-spark-0-6-2-released.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Spark 0.6.2 released +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +We recently released Spark 0.6.2, a new version of Spark. This is a maintenance release that includes several bug fixes and usability improvements (see the release notes). We recommend that all users upgrade to this release. diff --git a/news/_posts/2013-02-24-run-spark-and-shark-on-amazon-emr.html b/news/_posts/2013-02-24-run-spark-and-shark-on-amazon-emr.html new file mode 100644 index 000000000..cf86ec957 --- /dev/null +++ b/news/_posts/2013-02-24-run-spark-and-shark-on-amazon-emr.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Spark/Shark Tutorial for Amazon EMR +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +This weekend, Amazon posted an article and code that make it easy to launch Spark and Shark on Elastic MapReduce. The article includes examples of how to run both interactive Scala commands and SQL queries from Shark on data in S3. Head over to the Amazon article for details. We're very excited because, to our knowledge, this makes Spark the first non-Hadoop engine that you can launch with EMR. diff --git a/news/_posts/2013-02-27-spark-0-7-0-released.html b/news/_posts/2013-02-27-spark-0-7-0-released.html new file mode 100644 index 000000000..de2e67e20 --- /dev/null +++ b/news/_posts/2013-02-27-spark-0-7-0-released.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Spark 0.7.0 released +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +We're proud to announce the release of Spark 0.7.0, a new major version of Spark that adds several key features, including a Python API for Spark and an alpha of Spark Streaming. This release is the result of the largest group of contributors yet behind a Spark release -- 31 contributors from inside and outside Berkeley. Head over to the release notes to read more about the new features, or download the release today. diff --git a/news/_posts/2013-03-17-strata-exercises-now-available-online.html b/news/_posts/2013-03-17-strata-exercises-now-available-online.html new file mode 100644 index 000000000..7ff0eda9d --- /dev/null +++ b/news/_posts/2013-03-17-strata-exercises-now-available-online.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Strata exercises now available online +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +At this year's Strata conference, the AMP Lab hosted a full day of tutorials on Spark, Shark, and Spark Streaming, including online exercises on Amazon EC2. Those exercises are now available online, letting you learn Spark and Shark at your own pace on an EC2 cluster with real data. They are a great resource for learning the systems. You can also find slides from the Strata tutorials online, as well as videos from the AMP Camp workshop we held at Berkeley in August. diff --git a/news/_posts/2013-04-16-spark-screencasts-published.html b/news/_posts/2013-04-16-spark-screencasts-published.html new file mode 100644 index 000000000..96168d292 --- /dev/null +++ b/news/_posts/2013-04-16-spark-screencasts-published.html @@ -0,0 +1,20 @@ +--- +layout: post +title: Spark screencasts published +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '2' + _wpas_done_all: '1' +--- +We have released the first two screencasts in a series of short hands-on video training courses we will be publishing to help new users get up and running with Spark in minutes. + +The first Spark screencast is called First Steps With Spark and walks you through downloading and building Spark, as well as using the Spark shell, all in less than 10 minutes! + +The second screencast is a 2 minute overview of the Spark documentation. + +We hope you find these screencasts useful. diff --git a/news/_posts/2013-06-02-spark-0-7-2-released.html b/news/_posts/2013-06-02-spark-0-7-2-released.html new file mode 100644 index 000000000..82ae05345 --- /dev/null +++ b/news/_posts/2013-06-02-spark-0-7-2-released.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Spark 0.7.2 released +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +We're happy to announce the release of Spark 0.7.2, a new maintenance release that includes several bug fixes and improvements, as well as new code examples and API features. We recommend that all users update to this release. Head over to the release notes to read about the new features, or download the release today. diff --git a/news/_posts/2013-06-21-spark-accepted-into-apache-incubator.html b/news/_posts/2013-06-21-spark-accepted-into-apache-incubator.html new file mode 100644 index 000000000..1a6ca6dd8 --- /dev/null +++ b/news/_posts/2013-06-21-spark-accepted-into-apache-incubator.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Spark accepted into Apache Incubator +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +Spark was recently accepted into the Apache Incubator, which will serve as the long-term home for the project. While moving the source code and issue tracking to Apache will take some time, we are excited to be joining the community at Apache. Stay tuned on this site for updates on how the project hosting will change. diff --git a/news/_posts/2013-06-21-spark-featured-in-wired.html b/news/_posts/2013-06-21-spark-featured-in-wired.html new file mode 100644 index 000000000..0b3804390 --- /dev/null +++ b/news/_posts/2013-06-21-spark-featured-in-wired.html @@ -0,0 +1,15 @@ +--- +layout: post +title: Spark featured in Wired +categories: +- In-The-News +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +Spark, its creators at the AMP Lab, and some of its users were featured in a Wired Enterprise article a few days ago. Read on to learn a little about how Spark is being used in industry. diff --git a/news/_posts/2013-07-16-spark-0-7-3-released.html b/news/_posts/2013-07-16-spark-0-7-3-released.html new file mode 100644 index 000000000..862aab74e --- /dev/null +++ b/news/_posts/2013-07-16-spark-0-7-3-released.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Spark 0.7.3 released +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +We've just posted Spark Release 0.7.3, a maintenance release that contains several fixes, including streaming API updates and new functionality for adding JARs to a spark-shell session. We recommend that all users update to this release. Visit the release notes to read about the new features, or download the release today. diff --git a/news/_posts/2013-07-22-spark-mailing-lists-moving-to-apache.html b/news/_posts/2013-07-22-spark-mailing-lists-moving-to-apache.html new file mode 100644 index 000000000..d0cdb52d3 --- /dev/null +++ b/news/_posts/2013-07-22-spark-mailing-lists-moving-to-apache.html @@ -0,0 +1,25 @@ +--- +layout: post +title: Spark mailing lists moving to Apache +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +

As part of the Spark project's recent move to Apache, we are planning to migrate the mailing lists to Apache infrastructure this month, so that the existing Google groups will become read-only on September 1, 2013. To keep receiving updates about Spark or to participate in development discussions, please subscribe to the following lists:

+ + + +

Most users will probably want the User list, but individuals interested in contributing code to the project should also subscribe to the Dev list.

diff --git a/news/_posts/2013-07-23-amp-camp-2013-registration-ope.html b/news/_posts/2013-07-23-amp-camp-2013-registration-ope.html new file mode 100644 index 000000000..7be7cc0fe --- /dev/null +++ b/news/_posts/2013-07-23-amp-camp-2013-registration-ope.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Registration open for AMP Camp training camp in Berkeley +categories: +- News +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +Want to learn how to use Spark, Shark, GraphX, and related technologies in person? The AMP Lab is hosting a two-day training workshop for them on August 29th and 30th in Berkeley. The workshop will include tutorials, talks from users, and over four hours of hands-on exercises. Registration is now open on the AMP Camp website, for a price of $250 per person. We recommend signing up early because last year's workshop was sold out. diff --git a/news/index.md b/news/index.md new file mode 100644 index 000000000..4434ecde7 --- /dev/null +++ b/news/index.md @@ -0,0 +1,15 @@ +--- +layout: global +type: archive +title: Spark News Archive +--- +## Spark News Archive +{% for post in site.categories.news %} +
+
+

{{ post.title }}

+ +
+
{{post.excerpt}}
+
+{% endfor %} diff --git a/releases/_posts/2011-07-14-spark-release-0-3.md b/releases/_posts/2011-07-14-spark-release-0-3.md new file mode 100644 index 000000000..4238398f4 --- /dev/null +++ b/releases/_posts/2011-07-14-spark-release-0-3.md @@ -0,0 +1,62 @@ +--- +layout: post +title: Spark Release 0.3 +categories: +- Releases +tags: [] +status: publish +type: post +published: true +--- +Spark 0.3 brings a variety of new features. You can download it for either Scala 2.9 or Scala 2.8. + +

Scala 2.9 Support

+ +This is the first release to support Scala 2.9 in addition to 2.8. Future releases are likely to be 2.9-only unless there is high demand for 2.8. + +

Save Operations

+ +You can now save distributed datasets to the Hadoop filesystem (HDFS), Amazon S3, Hypertable, and any other storage system supported by Hadoop. There are convenience methods for several common formats, like text files and SequenceFiles. For example, to save a dataset as text: + +
+val numbers = spark.parallelize(1 to 100)
numbers.saveAsTextFile("hdfs://...") +
+ +

Native Types for SequenceFiles

+ +In working with SequenceFiles, which store objects that implement Hadoop's Writable interface, Spark will now let you use native types for certain common Writable types, like IntWritable and Text. For example: + +
+// Will read a SequenceFile of (IntWritable, Text)
+val data = spark.sequenceFile[Int, String]("hdfs://...") +
+ +Similarly, you can save datasets of basic types directly as SequenceFiles: + +
+// Will write a SequenceFile of (IntWritable, IntWritable)
+val squares = spark.parallelize(1 to 100).map(n => (n, n*n))
+squares.saveAsSequenceFile("hdfs://...") +
+ +

Maven Integration

+ +Spark now fetches dependencies via Maven and can publish Maven artifacts for easier dependency management. + +

Faster Broadcast & Shuffle

+ +This release includes broadcast and shuffle algorithms from this paper to better support applications that communicate large amounts of data. + +

Support for Non-Filesystem Hadoop Input Formats

+ +The new SparkContext.hadoopRDD method allows reading data from Hadoop-compatible storage systems other than file systems, such as HBase, Hypertable, etc. + +

Other Features

+ + diff --git a/releases/_posts/2012-06-12-spark-release-0-5-0.md b/releases/_posts/2012-06-12-spark-release-0-5-0.md new file mode 100644 index 000000000..df27a0996 --- /dev/null +++ b/releases/_posts/2012-06-12-spark-release-0-5-0.md @@ -0,0 +1,36 @@ +--- +layout: post +title: Spark Release 0.5.0 +categories: +- Releases +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '1' +--- +Spark 0.5.0 brings several new features and sets the stage for some big changes coming this summer as we incorporate code from the Spark Streaming project. You can download it as a zip or tar.gz. + +

Mesos 0.9 Support

+ +This release runs on Apache Mesos 0.9, the first Apache Incubator release of Mesos, which contains significant usability and stability improvements. Most notable are better memory accounting for applications with long-term memory use, easier access of old jobs' traces and logs (by keeping a history of executed tasks on the web UI), and simpler installation. + +

Performance Improvements

+Spark's scheduling is more communication-efficient when sending out operations on RDDs with large lineage graphs. In addition, the cache replacement policy has been improved to more smartly replace data when an RDD does not fit in the cache, shuffles are more efficient, and the serializer used for shipping closures is now configurable, making it possible to use faster libraries than Java serialization there. + +

Debug Improvements

+ +Spark now reports exceptions on the worker nodes back to the master, so you can see them all in one log file. It also automatically marks and filters duplicate errors. + +

New Operators

+ +These include sortByKey for parallel sorting, takeSample, and more efficient fold and aggregate operators. In addition, more of the old operators make use of, and retain, RDD partitioning information to reduce communication cost. For example, if you join two hash-partitioned RDDs that were partitioned in the same way, Spark will not shuffle any data across the network. + +

EC2 Launch Script Improvements

+ +Spark's EC2 launch scripts are now included in the main package, and have the ability to discover and use the latest Spark AMI automatically instead of launching a hardcoded machine image ID. + +

New Hadoop API Support

+ +You can now use Spark to read and write data to storage formats in the new org.apache.mapreduce packages (the "new Hadoop" API). In addition, this release fixes an issue caused by a HDFS initialization bug in some recent versions of HDFS. diff --git a/releases/_posts/2012-10-11-spark-release-0-5-1.md b/releases/_posts/2012-10-11-spark-release-0-5-1.md new file mode 100644 index 000000000..c5c935ed6 --- /dev/null +++ b/releases/_posts/2012-10-11-spark-release-0-5-1.md @@ -0,0 +1,46 @@ +--- +layout: post +title: Spark Release 0.5.1 +categories: +- Releases +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '1' +--- +Spark 0.5.1 is a maintenance release that adds several important bug fixes and usability features. You can download it as a tar.gz file. + +

Maven Publishing

+ +Spark is now available in Maven Central, making it easier to link into your programs without having to build it as a JAR. Use the following Maven identifiers to add it to a project: + + +

Scala 2.9.2

+ +Spark now builds against Scala 2.9.2 by default. + +

Improved Accumulators

+ +The new Accumulable class generalizes Accumulators for the case when the type being accumulated is not the same as the types of elements being added (e.g. you wish to accumulate a collection, such as a Set, by adding individual elements). This interface is also more efficient in avoiding the creation of temporary objects. (Contributed by Imran Rashid.) + +

Bug Fixes

+ + + +

EC2 Improvements

+ +Spark's EC2 launch script now configures Spark's memory limit automatically based on the machine's available RAM. diff --git a/releases/_posts/2012-10-15-spark-release-0-6-0.md b/releases/_posts/2012-10-15-spark-release-0-6-0.md new file mode 100644 index 000000000..fb17f3037 --- /dev/null +++ b/releases/_posts/2012-10-15-spark-release-0-6-0.md @@ -0,0 +1,90 @@ +--- +layout: post +title: Spark Release 0.6.0 +categories: +- Releases +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' +--- +Spark 0.6.0 is a major release that brings several new features, architectural changes, and performance enhancements. The most visible additions are a standalone deploy mode, a Java API, and expanded documentation; but there are also numerous other changes under the hood, which improve performance in some cases by as much as 2x. + +You can download this release as either a source package (2 MB tar.gz) or prebuilt package (48 MB tar.gz) + +

Simpler Deployment

+ +In addition to running on Mesos, Spark now has a standalone deploy mode that lets you quickly launch a cluster without installing an external cluster manager. The standalone mode only needs Java installed on each machine, and Spark deployed to it. + +In addition, there is experimental support for running on YARN (Hadoop NextGen), currently in a separate branch. + +

Java API

+ +Java programmers can now use Spark through a new Java API layer. This layer makes available all of Spark's features, including parallel transformations, distributed datasets, broadcast variables, and accumulators, in a Java-friendly manner. + +

Expanded Documentation

+ +Spark's documentation has been expanded with a new quick start guide, additional deployment instructions, configuration guide, tuning guide, and improved Scaladoc API documentation. + +

Engine Changes

+ +Under the hood, Spark 0.6 has new, custom storage and communication layers brought in from the upcoming Spark Streaming project. These can improve performance over past versions by as much as 2x. Specifically: + + + +

New APIs

+ + + +

Enhanced Debugging

+ +Spark's log now prints which operation in your program each RDD and job described in your logs belongs to, making it easier to tie back to which parts of your code experience problems. + +

Maven Artifacts

+ +Spark is now available in Maven Central, making it easier to link into your programs without having to build it as a JAR. Use the following Maven identifiers to add it to a project: + + + +

Compatibility

+ +This release is source-compatible with Spark 0.5 programs, but you will need to recompile them against 0.6. In addition, the configuration for caching has changed: instead of having a spark.cache.class parameter that sets one caching strategy for all RDDs, you can now set a per-RDD storage level. Spark will warn if you try to set spark.cache.class. + +

Credits

+ +Spark 0.6 was the work of a large set of new contributors from Berkeley and outside. + + + +

Thanks also to all the Spark users who have diligently suggested features or reported bugs.

diff --git a/releases/_posts/2012-11-22-spark-release-0-5-2.md b/releases/_posts/2012-11-22-spark-release-0-5-2.md new file mode 100644 index 000000000..794f3521d --- /dev/null +++ b/releases/_posts/2012-11-22-spark-release-0-5-2.md @@ -0,0 +1,15 @@ +--- +layout: post +title: Spark Release 0.5.2 +categories: +- Releases +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '1' +--- +Spark 0.5.2 is a minor release, whose main addition is to allow Spark to compile against Hadoop 2 distributions. To do this, edit project/SparkBuild.scala and change both the HADOOP_VERSION and HADOOP_MAJOR_VERSION variables, then recompile Spark. This change was contributed by Thomas Dudziak. + +You can download Spark 0.5.2 as a tar.gz file (2 MB). diff --git a/releases/_posts/2012-11-22-spark-release-0-6-1.md b/releases/_posts/2012-11-22-spark-release-0-6-1.md new file mode 100644 index 000000000..6a0799429 --- /dev/null +++ b/releases/_posts/2012-11-22-spark-release-0-6-1.md @@ -0,0 +1,30 @@ +--- +layout: post +title: Spark Release 0.6.1 +categories: +- Releases +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' +--- +Spark 0.6.1 is a maintenance release that contains several important bug fixes and performance improvements. You can download it as a source package (2.4 MB tar.gz) or prebuilt package (48 MB tar.gz). + +The fixes and improvements in this version include: + + +We recommend that all Spark 0.6 users update to this maintenance release. diff --git a/releases/_posts/2013-02-07-spark-release-0-6-2.md b/releases/_posts/2013-02-07-spark-release-0-6-2.md new file mode 100644 index 000000000..e44c72a70 --- /dev/null +++ b/releases/_posts/2013-02-07-spark-release-0-6-2.md @@ -0,0 +1,43 @@ +--- +layout: post +title: Spark Release 0.6.2 +categories: [] +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +Spark 0.6.2 is a maintenance release that contains several bug fixes and usability improvements. You can download it as a source package (2.5 MB tar.gz) or prebuilt package (48 MB tar.gz). + +We recommend that all Spark 0.6 users update to this maintenance release. + +The fixes and improvements in this version include: + + +In total, eleven people contributed to this release: + diff --git a/releases/_posts/2013-02-27-spark-release-0-7-0.md b/releases/_posts/2013-02-27-spark-release-0-7-0.md new file mode 100644 index 000000000..ffb48a9e8 --- /dev/null +++ b/releases/_posts/2013-02-27-spark-release-0-7-0.md @@ -0,0 +1,112 @@ +--- +layout: post +title: Spark Release 0.7.0 +categories: [] +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +The Spark team is proud to release version 0.7.0, a new major release that brings several new features. Most notable are a Python API for Spark and an alpha of Spark Streaming. (Details on Spark Streaming can also be found in this technical report.) The release also adds numerous other improvements across the board. Overall, this is our biggest release to date, with 31 contributors, of which 20 were external to Berkeley. + +You can download Spark 0.7.0 as either a source package (4 MB tar.gz) or prebuilt package (60 MB tar.gz). + +

Python API

+ +Spark 0.7 adds a Python API called PySpark that makes it possible to use Spark from Python, both in standalone programs and in interactive Python shells. It uses the standard CPython runtime, so your programs can call into native libraries like NumPy and SciPy. Like the Scala and Java APIs, PySpark will automatically ship functions from your main program, along with the variables they depend on, to the cluster. PySpark supports most Spark features, including RDDs, accumulators, broadcast variables, and HDFS input and output. + +

Spark Streaming Alpha

+ +Spark Streaming is a new extension of Spark that adds near-real-time processing capability. It offers a simple and high-level API, where users can transform streams using parallel operations like map, filter, reduce, and new sliding window functions. It automatically distributes work over a cluster and provides efficient fault recovery with exactly-once semantics for transformations, without relying on costly transactions to an external system. Spark Streaming is described in more detail in these slides and our technical report. This release is our first alpha of Spark Streaming, with most of the functionality implemented and APIs in Java and Scala. + +

Memory Dashboard

+ +Spark jobs now launch a web dashboard for monitoring the memory usage of each distributed dataset (RDD) in the program. Look for lines like this in your log: + +15:08:44 INFO BlockManagerUI: Started BlockManager web UI at http://mbk.local:63814 + +You can also control which port to use through the spark.ui.port property. + +

Maven Build

+ +Spark can now be built using Maven in addition to SBT. The Maven build enables easier publishing to repositories of your choice, easy selection of Hadoop versions using the Maven profile (-Phadoop1 or -Phadoop2), as well as Debian packaging using mvn -Phadoop1,deb install. + +

New Operations

+ +This release adds several RDD transformations, including keys, values, keyBy, subtract, coalesce, zip. It also adds SparkContext.hadoopConfiguration to allow programs to configure Hadoop input/output settings globally across operations. Finally, it adds the RDD.toDebugString() method, which can be used to print an RDD's lineage graph for troubleshooting. + +

EC2 Improvements

+ + + +

Other Improvements

+ + + +

Compatibility

+ +This release is API-compatible with Spark 0.6 programs, but the following features changed slightly: + + +

Credits

+ +Spark 0.7 was the work of many contributors from Berkeley and outside---in total, 31 different contributors, of which 20 were from outside Berkeley. Here are the people who contributed, along with areas they worked on: + + + +Thanks to everyone who contributed! diff --git a/releases/_posts/2013-06-02-spark-release-0-7-2.md b/releases/_posts/2013-06-02-spark-release-0-7-2.md new file mode 100644 index 000000000..9b1ed38f0 --- /dev/null +++ b/releases/_posts/2013-06-02-spark-release-0-7-2.md @@ -0,0 +1,56 @@ +--- +layout: post +title: Spark Release 0.7.2 +categories: [] +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +Spark 0.7.2 is a maintenance release that contains multiple bug fixes and improvements. You can download it as a source package (4 MB tar.gz) or get prebuilt packages for Hadoop 1 / CDH3 or CDH 4 (61 MB tar.gz). + + +We recommend that all users update to this maintenance release. + + +The fixes and improvements in this version include: + + +The following people contributed to this release: + + +We thank everyone who helped with this release, and hope to see more contributions from you in the future! diff --git a/releases/_posts/2013-07-16-spark-release-0-7-3.md b/releases/_posts/2013-07-16-spark-release-0-7-3.md new file mode 100644 index 000000000..39b35fb8f --- /dev/null +++ b/releases/_posts/2013-07-16-spark-release-0-7-3.md @@ -0,0 +1,49 @@ +--- +layout: post +title: Spark Release 0.7.3 +categories: +- Releases +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '4' + _wpas_done_all: '1' +--- +Spark 0.7.3 is a maintenance release with several bug fixes, performance fixes, and new features. You can download it as a source package (4 MB tar.gz) or get prebuilt packages for Hadoop 1 / CDH3 or for CDH 4 (61 MB tar.gz). + +We recommend that all users update to this maintenance release. + +The improvements in this release include: + + + +The following people contributed to this release: + + diff --git a/research.md b/research.md new file mode 100644 index 000000000..96c9a24ac --- /dev/null +++ b/research.md @@ -0,0 +1,53 @@ +--- +layout: global +title: Research +type: "page singular" +navigation: + weight: 6 + show: true +--- +

Spark Research

+ +

+Spark started as a research project at UC Berkeley in the AMPLab, which focuses on big data analytics. +

+ +

+Our goal was to design a programming model that supports a much wider class of applications than MapReduce, while maintaining its automatic fault tolerance. In particular, MapReduce is inefficient for multi-pass applications that require low-latency data sharing across multiple parallel operations. These applications are quite common in analytics, and include: +

+ + + +

+MapReduce and Dryad are suboptimal for these applications because they are based on acyclic data flow: an application has to run as a series of distinct jobs, each of which reads data from stable storage (e.g. a distributed file system) and writes it back to stable storage. They incur significant cost loading the data on each step and writing it back to replicated storage. +

+ +

+Spark offers an abstraction called resilient distributed datasets (RDDs) to support these applications efficiently. RDDs can be stored in memory between queries without requiring replication. Instead, they rebuild lost data on failure using lineage: each RDD remembers how it was built from other datasets (by transformations like map, join or group-by) to rebuild itself. RDDs allow Spark to outperform existing models by up to 100x in multi-pass analytics. We showed that RDDs can support a wide variety of iterative algorithms, as well as interactive data mining and a highly efficient SQL engine (the Shark project). +

+ +

You can find more about the research behind Spark in our papers:

+ + diff --git a/screencasts/_posts/2013-04-10-1-first-steps-with-spark.html b/screencasts/_posts/2013-04-10-1-first-steps-with-spark.html new file mode 100644 index 000000000..df4b26920 --- /dev/null +++ b/screencasts/_posts/2013-04-10-1-first-steps-with-spark.html @@ -0,0 +1,27 @@ +--- +layout: post +title: 'First Steps with Spark - Screencast #1' +categories: +- Screencasts +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '2' + _wpas_done_all: '1' + _wp_old_slug: first-steps-with-spark-screencast-1 +--- +This screencast marks the beginning of a series of hands-on screencasts we will be publishing to help new users get up and running in minutes. In this screencast, we: +
    +
  1. Download and build Spark on a local machine (running OS X, but should be a similar process for Linux or Unix).
  2. +
  3. Introduce the API using the Spark interactive shell to explore a file.
  4. +
+ +
+ +Check out the next spark screencast in the series, Spark Screencast #2 - Overview of Spark Documentation. You can also find the Spark documentation online: + diff --git a/screencasts/_posts/2013-04-11-2-spark-documentation-overview.html b/screencasts/_posts/2013-04-11-2-spark-documentation-overview.html new file mode 100644 index 000000000..7f5eb8160 --- /dev/null +++ b/screencasts/_posts/2013-04-11-2-spark-documentation-overview.html @@ -0,0 +1,19 @@ +--- +layout: post +title: 'Spark Documentation Overview – Screencast #2' +categories: +- Screencasts +tags: [] +status: publish +type: post +published: true +--- +This is our 2nd Spark screencast. In it, we take a tour of the documentation available for Spark users online. + +
+ +And for convenience, here are links to the documentation shown in the video: + diff --git a/screencasts/_posts/2013-04-16-3-transformations-and-caching.html b/screencasts/_posts/2013-04-16-3-transformations-and-caching.html new file mode 100644 index 000000000..dd05d0ce6 --- /dev/null +++ b/screencasts/_posts/2013-04-16-3-transformations-and-caching.html @@ -0,0 +1,14 @@ +--- +layout: post +title: 'Transformations and Caching - Spark Screencast #3' +categories: [] +tags: [] +status: publish +type: post +published: true +--- +In this third Spark screencast, we demonstrate more advanced use of RDD actions and transformations, as well as caching RDDs in memory. + +
+ +For more information, check out the Spark documentation page. diff --git a/site/index.html b/site/index.html index 470c467a5..cfd0f4da7 100644 --- a/site/index.html +++ b/site/index.html @@ -1 +1,181 @@ -Apache Spark

Future home of Apache Spark (Incubating).

Test

+ + + + + + + + + + + + Home | Spark + + + + + + + + + + + + + + +
+ + + + + +
+
+
+ +
+

What is Spark?

+

Spark is an open source cluster computing system that aims to make data analytics fast — both fast to run and fast to write. +To run programs faster, Spark provides primitives for in-memory cluster computing: your job can load data into memory and query it repeatedly much more quickly than with disk-based systems like Hadoop MapReduce. +To make programming faster, Spark provides clean, concise APIs in Scala, Java and Python. You can also use Spark interactively from the Scala and Python shells to rapidly query big datasets.

+ +

What can it do?

+

Spark was initially developed for two applications where keeping data in memory helps: iterative algorithms, which are common in machine learning, and interactive data mining. In both cases, Spark can run up to 100x faster than Hadoop MapReduce. However, you can use Spark for general data processing too. Check out our example jobs. +Spark is also the engine behind Shark, a fully Apache Hive-compatible data warehousing system that can run 100x faster than Hive. +While Spark is a new engine, it can access any data source supported by Hadoop, making it easy to run over existing data.

+ +

Who uses it?

+

Spark was developed in the UC Berkeley AMPLab. It’s used by several groups of researchers at Berkeley to run large-scale applications such as spam filtering and traffic prediction. It’s also used to accelerate data analytics at Yahoo!, Conviva, Quantifind, and other companies — in total, 17 companies have contributed to Spark! Spark is open source under a BSD license, so download it to check it out.

+ +

Apache Incubator notice

+

Apache Spark is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.

+ + +
+ +
+ + + +
+
+

Spark is an open source project developed at the UC Berkeley AMPLab.

+ +
+
+ +
+
+
+ + + + diff --git a/talks/overview.pdf b/talks/overview.pdf new file mode 100644 index 000000000..df00f016d Binary files /dev/null and b/talks/overview.pdf differ diff --git a/talks/overview.pptx b/talks/overview.pptx new file mode 100644 index 000000000..26ed4e90b Binary files /dev/null and b/talks/overview.pptx differ diff --git a/talks/strata_spark_streaming.pdf b/talks/strata_spark_streaming.pdf new file mode 100644 index 000000000..4fa980efd Binary files /dev/null and b/talks/strata_spark_streaming.pdf differ diff --git a/talks/strata_spark_streaming.ppt b/talks/strata_spark_streaming.ppt new file mode 100644 index 000000000..30dfdf4af Binary files /dev/null and b/talks/strata_spark_streaming.ppt differ -- cgit v1.2.3