You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eagle.apache.org by ha...@apache.org on 2015/11/19 14:47:13 UTC
svn commit: r1715179 [14/14] - in /incubator/eagle/site: ./ about/ css/
data/ development/ docs/ docs/tutorial/ fonts/ images/ images/docs/
images/posts/ images/slider/ images/usecases/ js/ post/ post/2015/
post/2015/10/ post/2015/10/27/
Added: incubator/eagle/site/js/jquery.singlePageNav.js
URL: http://svn.apache.org/viewvc/incubator/eagle/site/js/jquery.singlePageNav.js?rev=1715179&view=auto
==============================================================================
--- incubator/eagle/site/js/jquery.singlePageNav.js (added)
+++ incubator/eagle/site/js/jquery.singlePageNav.js Thu Nov 19 13:47:10 2015
@@ -0,0 +1,183 @@
+/**
+ * Single Page Nav Plugin
+ * Copyright (c) 2013 Chris Wojcik <he...@chriswojcik.net>
+ * Dual licensed under MIT and GPL.
+ * @author Chris Wojcik
+ * @version 1.1.0
+ */
+
+// Utility
+if (typeof Object.create !== 'function') {
+ Object.create = function(obj) {
+ function F() {}
+ F.prototype = obj;
+ return new F();
+ };
+}
+
+(function($, window, document, undefined) {
+ "use strict";
+
+ var SinglePageNav = {
+
+ init: function(options, container) {
+
+ this.options = $.extend({}, $.fn.singlePageNav.defaults, options);
+
+ this.container = container;
+ this.$container = $(container);
+ this.$links = this.$container.find('a');
+
+ if (this.options.filter !== '') {
+ this.$links = this.$links.filter(this.options.filter);
+ }
+
+ this.$window = $(window);
+ this.$htmlbody = $('html, body');
+
+ this.$links.on('click.singlePageNav', $.proxy(this.handleClick, this));
+
+ this.didScroll = false;
+ this.checkPosition();
+ this.setTimer();
+ },
+
+ handleClick: function(e) {
+ var self = this,
+ link = e.currentTarget,
+ $elem = $(link.hash);
+
+ e.preventDefault();
+
+ if ($elem.length) { // Make sure the target elem exists
+
+
+ // Prevent active link from cycling during the scroll
+ self.clearTimer();
+
+ // Before scrolling starts
+ if (typeof self.options.beforeStart === 'function') {
+ self.options.beforeStart();
+ }
+
+ self.setActiveLink(link.hash);
+
+ self.scrollTo($elem, function() {
+
+ if (self.options.updateHash) {
+ document.location.hash = link.hash;
+ }
+
+ self.setTimer();
+
+ // After scrolling ends
+ if (typeof self.options.onComplete === 'function') {
+ self.options.onComplete();
+ }
+ });
+ }
+ },
+
+ scrollTo: function($elem, callback) {
+ var self = this;
+ var target = self.getCoords($elem).top;
+ var called = false;
+
+ self.$htmlbody.stop().animate(
+ {scrollTop: target},
+ {
+ duration: self.options.speed,
+ easing: self.options.easing,
+ complete: function() {
+ if (typeof callback === 'function' && !called) {
+ callback();
+ }
+ called = true;
+ }
+ }
+ );
+ },
+
+ setTimer: function() {
+ var self = this;
+
+ self.$window.on('scroll.singlePageNav', function() {
+ self.didScroll = true;
+ });
+
+ self.timer = setInterval(function() {
+ if (self.didScroll) {
+ self.didScroll = false;
+ self.checkPosition();
+ }
+ }, 250);
+ },
+
+ clearTimer: function() {
+ clearInterval(this.timer);
+ this.$window.off('scroll.singlePageNav');
+ this.didScroll = false;
+ },
+
+ // Check the scroll position and set the active section
+ checkPosition: function() {
+ var scrollPos = this.$window.scrollTop();
+ var currentSection = this.getCurrentSection(scrollPos);
+ this.setActiveLink(currentSection);
+ },
+
+ getCoords: function($elem) {
+ return {
+ top: Math.round($elem.offset().top) - this.options.offset
+ };
+ },
+
+ setActiveLink: function(href) {
+ var $activeLink = this.$container.find("a[href='" + href + "']");
+
+ if (!$activeLink.hasClass(this.options.currentClass)) {
+ this.$links.removeClass(this.options.currentClass);
+ $activeLink.addClass(this.options.currentClass);
+ }
+ },
+
+ getCurrentSection: function(scrollPos) {
+ var i, hash, coords, section;
+
+ for (i = 0; i < this.$links.length; i++) {
+ hash = this.$links[i].hash;
+
+ if ($(hash).length) {
+ coords = this.getCoords($(hash));
+
+ if (scrollPos >= coords.top - this.options.threshold) {
+ section = hash;
+ }
+ }
+ }
+
+ // The current section or the first link
+ return section || this.$links[0].hash;
+ }
+ };
+
+ $.fn.singlePageNav = function(options) {
+ return this.each(function() {
+ var singlePageNav = Object.create(SinglePageNav);
+ singlePageNav.init(options, this);
+ });
+ };
+
+ $.fn.singlePageNav.defaults = {
+ offset: 0,
+ threshold: 120,
+ speed: 400,
+ currentClass: 'current',
+ easing: 'swing',
+ updateHash: false,
+ filter: '',
+ onComplete: false,
+ beforeStart: false
+ };
+
+})(jQuery, window, document);
\ No newline at end of file
Propchange: incubator/eagle/site/js/jquery.singlePageNav.js
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/eagle/site/js/modernizr.min.js
URL: http://svn.apache.org/viewvc/incubator/eagle/site/js/modernizr.min.js?rev=1715179&view=auto
==============================================================================
--- incubator/eagle/site/js/modernizr.min.js (added)
+++ incubator/eagle/site/js/modernizr.min.js Thu Nov 19 13:47:10 2015
@@ -0,0 +1 @@
+window.Modernizr=function(e,t,n){function r(e,t){var n=e.charAt(0).toUpperCase()+e.substr(1),r=(e+" "+C.join(n+" ")+n).split(" ");return o(r,t)}function o(e,t){for(var r in e)if(v[e[r]]!==n)return"pfx"==t?e[r]:!0;return!1}function i(e,t){return!!~(""+e).indexOf(t)}function a(e,t){return typeof e===t}function s(e,t){return c(x.join(e+";")+(t||""))}function c(e){v.cssText=e}var l,u,f,d="2.0.6",p={},m=!0,h=t.documentElement,g=(t.head||t.getElementsByTagName("head")[0],"modernizr"),y=t.createElement(g),v=y.style,b=":)",x=(Object.prototype.toString," -webkit- -moz- -o- -ms- -khtml- ".split(" ")),C="Webkit Moz O ms Khtml".split(" "),E={},S=[],T=function(e,n,r,o){var i,a,s,c=t.createElement("div");if(parseInt(r,10))for(;r--;)s=t.createElement("div"),s.id=o?o[r]:g+(r+1),c.appendChild(s);return i=["­","<style>",e,"</style>"].join(""),c.id=g,c.innerHTML+=i,h.appendChild(c),a=n(c,e),c.parentNode.removeChild(c),!!a},w={}.hasOwnProperty;f=a(w,n)||a(w.call,n)?function(e,t){return t in e&&a(e.
constructor.prototype[t],n)}:function(e,t){return w.call(e,t)};!function(e,n){var r=e.join(""),o=n.length;T(r,function(e,n){for(var r=t.styleSheets[t.styleSheets.length-1],i=r.cssRules&&r.cssRules[0]?r.cssRules[0].cssText:r.cssText||"",a=e.childNodes,s={};o--;)s[a[o].id]=a[o];p.csstransforms3d=9===s.csstransforms3d.offsetLeft,p.generatedcontent=s.generatedcontent.offsetHeight>=1,p.fontface=/src/i.test(i)&&0===i.indexOf(n.split(" ")[0])},o,n)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",x.join("transform-3d),("),g,")","{#csstransforms3d{left:9px;position:absolute}}"].join(""),['#generatedcontent:after{content:"',b,'";visibility:hidden}'].join("")],["fontface","csstransforms3d","generatedcontent"]);E.flexbox=function(){function e(e,t,n,r){e.style.cssText=x.join(t+":"+n+";")+(r||"")}function n(e,t,n,r){t+=":",e.style.cssText=(t+x.join(n+";"+t)).slice(0,-t.length)+(r||"")}var r=t.createElement("div"),o=t.createElement("div");n(r,"display","box","width:42px;padding
:0;"),e(o,"box-flex","1","width:10px;"),r.appendChild(o),h.appendChild(r);var i=42===o.offsetWidth;return r.removeChild(o),h.removeChild(r),i},E.rgba=function(){return c("background-color:rgba(150,255,150,.5)"),i(v.backgroundColor,"rgba")},E.hsla=function(){return c("background-color:hsla(120,40%,100%,.5)"),i(v.backgroundColor,"rgba")||i(v.backgroundColor,"hsla")},E.multiplebgs=function(){return c("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(v.background)},E.backgroundsize=function(){return r("backgroundSize")},E.borderimage=function(){return r("borderImage")},E.borderradius=function(){return r("borderRadius")},E.boxshadow=function(){return r("boxShadow")},E.textshadow=function(){return""===t.createElement("div").style.textShadow},E.opacity=function(){return s("opacity:.55"),/^0.55$/.test(v.opacity)},E.cssanimations=function(){return r("animationName")},E.csscolumns=function(){return r("columnCount")},E.cssgradients=function(){var e="background
-image:",t="gradient(linear,left top,right bottom,from(#9f9),to(white));",n="linear-gradient(left top,#9f9, white);";return c((e+x.join(t+e)+x.join(n+e)).slice(0,-e.length)),i(v.backgroundImage,"gradient")},E.cssreflections=function(){return r("boxReflect")},E.csstransforms=function(){return!!o(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},E.csstransforms3d=function(){var e=!!o(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);return e&&"webkitPerspective"in h.style&&(e=p.csstransforms3d),e},E.csstransitions=function(){return r("transitionProperty")},E.fontface=function(){return p.fontface},E.generatedcontent=function(){return p.generatedcontent};for(var j in E)f(E,j)&&(u=j.toLowerCase(),p[u]=E[j](),S.push((p[u]?"":"no-")+u));return c(""),y=l=null,e.attachEvent&&function(){var e=t.createElement("div");return e.innerHTML="<elem></elem>",1!==e.childNodes.length}()&&function(e,t){function r(e){for(var t=-1
;++t<c;)e.createElement(s[t])}e.iepp=e.iepp||{};var o,i=e.iepp,a=i.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",s=a.split("|"),c=s.length,l=new RegExp("(^|\\s)("+a+")","gi"),u=new RegExp("<(/*)("+a+")","gi"),f=/^\s*[\{\}]\s*$/,d=new RegExp("(^|[^\\n]*?\\s)("+a+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),p=t.createDocumentFragment(),m=t.documentElement,h=m.firstChild,g=t.createElement("body"),y=t.createElement("style"),v=/print|all/;i.getCSS=function(e,t){if(e+""===n)return"";for(var r,o=-1,a=e.length,s=[];++o<a;)r=e[o],r.disabled||(t=r.media||t,v.test(t)&&s.push(i.getCSS(r.imports,t),r.cssText),t="all");return s.join("")},i.parseCSS=function(e){for(var t,n=[];null!=(t=d.exec(e));)n.push(((f.exec(t[1])?"\n":t[1])+t[2]+t[3]).replace(l,"$1.iepp_$2")+t[4]);return n.join("\n")},i.writeHTML=function(){var e=-1;for(o=o||t.body;++e<c;)for(var n=t.getElementsByTagName(s[e]),r=n.lengt
h,i=-1;++i<r;)n[i].className.indexOf("iepp_")<0&&(n[i].className+=" iepp_"+s[e]);p.appendChild(o),m.appendChild(g),g.className=o.className,g.id=o.id,g.innerHTML=o.innerHTML.replace(u,"<$1font")},i._beforePrint=function(){y.styleSheet.cssText=i.parseCSS(i.getCSS(t.styleSheets,"all")),i.writeHTML()},i.restoreHTML=function(){g.innerHTML="",m.removeChild(g),m.appendChild(o)},i._afterPrint=function(){i.restoreHTML(),y.styleSheet.cssText=""},r(t),r(p),i.disablePP||(h.insertBefore(y,h.firstChild),y.media="print",y.className="iepp-printshim",e.attachEvent("onbeforeprint",i._beforePrint),e.attachEvent("onafterprint",i._afterPrint))}(e,t),p._version=d,p._prefixes=x,p._domPrefixes=C,p.testProp=function(e){return o([e])},p.testAllProps=r,p.testStyles=T,h.className=h.className.replace(/\bno-js\b/,"")+(m?" js "+S.join(" "):""),p}(this,this.document),function(e,t,n){function r(e){return!e||"loaded"==e||"complete"==e}function o(){for(var e=1,t=-1;y.length-++t&&(!y[t].s||(e=y[t].r)););e&&s()}functio
n i(e){var n,i=t.createElement("script");i.src=e.s,i.onreadystatechange=i.onload=function(){!n&&r(i.readyState)&&(n=1,o(),i.onload=i.onreadystatechange=null)},m(function(){n||(n=1,o())},d.errorTimeout),e.e?i.onload():h.parentNode.insertBefore(i,h)}function a(e){var n,r=t.createElement("link");if(r.href=e.s,r.rel="stylesheet",r.type="text/css",e.e||!S&&!b)r.onload=function(){n||(n=1,m(function(){o()},0))},e.e&&r.onload();else{var i=function(e){m(function(){if(!n)try{e.sheet.cssRules.length?(n=1,o()):i(e)}catch(t){1e3==t.code||"security"==t.message||"denied"==t.message?(n=1,m(function(){o()},0)):i(e)}},0)};i(r)}m(function(){n||(n=1,o())},d.errorTimeout),!e.e&&h.parentNode.insertBefore(r,h)}function s(){var e=y.shift();v=1,e?e.t?m(function(){"c"==e.t?a(e):i(e)},0):(e(),o()):v=0}function c(e,n,i,a,c,l){function u(){!p&&r(f.readyState)&&(g.r=p=1,!v&&o(),f.onload=f.onreadystatechange=null,m(function(){C.removeChild(f)},0))}var f=t.createElement(e),p=0,g={t:i,s:n,e:l};f.src=f.data=n,!x&&(f
.style.display="none"),f.width=f.height="0","object"!=e&&(f.type=i),f.onload=f.onreadystatechange=u,"img"==e?f.onerror=u:"script"==e&&(f.onerror=function(){g.e=g.r=1,s()}),y.splice(a,0,g),C.insertBefore(f,x?null:h),m(function(){p||(C.removeChild(f),g.r=g.e=p=1,o())},d.errorTimeout)}function l(e,t,n){var r="c"==t?j:w;return v=0,t=t||"j",N(e)?c(r,e,t,this.i++,p,n):(y.splice(this.i++,0,e),1==y.length&&s()),this}function u(){var e=d;return e.loader={load:l,i:0},e}var f,d,p=t.documentElement,m=e.setTimeout,h=t.getElementsByTagName("script")[0],g={}.toString,y=[],v=0,b="MozAppearance"in p.style,x=b&&!!t.createRange().compareNode,C=x?p:h.parentNode,E=e.opera&&"[object Opera]"==g.call(e.opera),S="webkitAppearance"in p.style,T=S&&"async"in t.createElement("script"),w=b?"object":E||T?"img":"script",j=S?"img":w,k=Array.isArray||function(e){return"[object Array]"==g.call(e)},P=function(e){return Object(e)===e},N=function(e){return"string"==typeof e},M=function(e){return"[object Function]"==g.ca
ll(e)},L=[],O={};d=function(e){function t(e){var t,n,r=e.split("!"),o=L.length,i=r.pop(),a=r.length,s={url:i,origUrl:i,prefixes:r};for(n=0;a>n;n++)t=O[r[n]],t&&(s=t(s));for(n=0;o>n;n++)s=L[n](s);return s}function r(e,r,o,i,a){var s=t(e),c=s.autoCallback;if(!s.bypass){if(r&&(r=M(r)?r:r[e]||r[i]||r[e.split("/").pop().split("?")[0]]),s.instead)return s.instead(e,r,o,i,a);o.load(s.url,s.forceCSS||!s.forceJS&&/css$/.test(s.url)?"c":n,s.noexec),(M(r)||M(c))&&o.load(function(){u(),r&&r(s.origUrl,a,i),c&&c(s.origUrl,a,i)})}}function o(e,t){function n(e){if(N(e))r(e,c,t,0,i);else if(P(e))for(o in e)e.hasOwnProperty(o)&&r(e[o],c,t,o,i)}var o,i=!!e.test,a=i?e.yep:e.nope,s=e.load||e.both,c=e.callback;n(a),n(s),e.complete&&t.load(e.complete)}var i,a,s=this.yepnope.loader;if(N(e))r(e,0,s,0);else if(k(e))for(i=0;i<e.length;i++)a=e[i],N(a)?r(a,0,s,0):k(a)?d(a):P(a)&&o(a,s);else P(e)&&o(e,s)},d.addPrefix=function(e,t){O[e]=t},d.addFilter=function(e){L.push(e)},d.errorTimeout=1e4,null==t.readyState&&
t.addEventListener&&(t.readyState="loading",t.addEventListener("DOMContentLoaded",f=function(){t.removeEventListener("DOMContentLoaded",f,0),t.readyState="complete"},0)),e.yepnope=u()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
\ No newline at end of file
Propchange: incubator/eagle/site/js/modernizr.min.js
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/eagle/site/js/responsiveCarousel.min.js
URL: http://svn.apache.org/viewvc/incubator/eagle/site/js/responsiveCarousel.min.js?rev=1715179&view=auto
==============================================================================
--- incubator/eagle/site/js/responsiveCarousel.min.js (added)
+++ incubator/eagle/site/js/responsiveCarousel.min.js Thu Nov 19 13:47:10 2015
@@ -0,0 +1,7 @@
+/*! responsiveCarousel.JS - v1.2.0
+ * http://basilio.github.com/responsiveCarousel
+ *
+ * Copyright (c) 2013 Basilio Cceres <ba...@gmail.com>;
+ * Licensed under the MIT license */
+
+(function(e){"use strict";e.fn.carousel=function(t){var n,r;n={infinite:true,visible:1,speed:"fast",overflow:false,autoRotate:false,navigation:e(this).data("navigation"),itemMinWidth:0,itemEqualHeight:false,itemMargin:0,itemClassActive:"crsl-active",imageWideClass:"wide-image",carousel:true};return e(this).each(function(){r=e(this);if(e.isEmptyObject(t)===false)e.extend(n,t);if(e.isEmptyObject(e(r).data("crsl"))===false)e.extend(n,e(r).data("crsl"));n.isTouch="ontouchstart"in document.documentElement||navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|Opera Mini|IEMobile/i)?true:false;r.init=function(){n.total=e(r).find(".crsl-item").length;n.itemWidth=e(r).outerWidth();n.visibleDefault=n.visible;n.swipeDistance=null;n.swipeMinDistance=100;n.startCoords={};n.endCoords={};e(r).css({width:"100%"});e(r).find(".crsl-item").css({position:"relative","float":"left",overflow:"hidden",height:"auto"});e(r).find("."+n.imageWideClass).each(function(){e(this).css({display:"block",wid
th:"100%",height:"auto"})});e(r).find(".crsl-item iframe").attr({width:"100%"});if(n.carousel)e(r).find(".crsl-item:first-child").addClass(n.itemClassActive);if(n.carousel&&n.infinite&&n.visible<n.total)e(r).find(".crsl-item:first-child").before(e(".crsl-item:last-child",r));if(n.overflow===false){e(r).css({overflow:"hidden"})}else{e("html, body").css({"overflow-x":"hidden"})}e(r).trigger("initCarousel",[n,r]);r.testPreload();r.config();r.initRotate();r.triggerNavs()};r.testPreload=function(){if(e(r).find("img").length>0){var t=e(r).find("img").length,i=1;e(r).find("img").each(function(){r.preloadImage(this,i,t);i++})}else{e(r).trigger("loadedCarousel",[n,r])}};r.preloadImage=function(t,i,s){var o=new Image,u={};u.src=e(t).attr("src")!==undefined?t.src:"";u.alt=e(t).attr("alt")!==undefined?t.alt:"";e(o).attr(u);e(o).on("load",function(){if(i===1)e(r).trigger("loadingImagesCarousel",[n,r]);if(i===s)e(r).trigger("loadedImagesCarousel",[n,r])})};r.config=function(){n.itemWidth=Math.flo
or((e(r).outerWidth()-n.itemMargin*(n.visibleDefault-1))/n.visibleDefault);if(n.itemWidth<=n.itemMinWidth){n.visible=Math.floor((e(r).outerWidth()-n.itemMargin*(n.visible-1))/n.itemMinWidth)===1?Math.floor(e(r).outerWidth()/n.itemMinWidth):Math.floor((e(r).outerWidth()-n.itemMargin)/n.itemMinWidth);n.visible=n.visible<1?1:n.visible;n.itemWidth=n.visible===1?Math.floor(e(r).outerWidth()):Math.floor((e(r).outerWidth()-n.itemMargin*(n.visible-1))/n.visible)}else{n.visible=n.visibleDefault}if(n.carousel){r.wrapWidth=Math.floor((n.itemWidth+n.itemMargin)*n.total);r.wrapMargin=r.wrapMarginDefault=n.infinite&&n.visible<n.total?parseInt((n.itemWidth+n.itemMargin)*-1,10):0;if(n.infinite&&n.visible<n.total&&e(r).find(".crsl-item."+n.itemClassActive).index()===0){e(r).find(".crsl-item:first-child").before(e(".crsl-item:last-child",r));r.wrapMargin=r.wrapMarginDefault=parseInt((n.itemWidth+n.itemMargin)*-1,10)}e(r).find(".crsl-wrap").css({width:r.wrapWidth+"px",marginLeft:r.wrapMargin})}else{r.
wrapWidth=e(r).outerWidth();e(r).find(".crsl-wrap").css({width:r.wrapWidth+n.itemMargin+"px"});e("#"+n.navigation).hide()}e(r).find(".crsl-item").css({width:n.itemWidth+"px",marginRight:n.itemMargin+"px"});r.equalHeights();if(n.carousel){if(n.visible>=n.total){n.autoRotate=false;e("#"+n.navigation).hide()}else{e("#"+n.navigation).show()}}};r.equalHeights=function(){if(n.itemEqualHeight!==false){var t=0;e(r).find(".crsl-item").each(function(){e(this).css({height:"auto"});if(e(this).outerHeight()>t){t=e(this).outerHeight()}});e(r).find(".crsl-item").css({height:t+"px"})}return true};r.initRotate=function(){if(n.autoRotate!==false){r.rotateTime=window.setInterval(function(){r.rotate()},n.autoRotate)}};r.triggerNavs=function(){e("#"+n.navigation).delegate(".previous, .next","click",function(t){t.preventDefault();r.prepareExecute();if(e(this).hasClass("previous")&&r.testPrevious(r.itemActive)){r.previous()}else if(e(this).hasClass("next")&&r.testNext()){r.next()}else{return}})};r.prepare
Execute=function(){if(n.autoRotate){clearInterval(r.rotateTime)}r.preventAnimateEvent();r.itemActive=e(r).find(".crsl-item."+n.itemClassActive);return true};r.preventAnimateEvent=function(){if(e(r).find(".crsl-wrap:animated").length>0){return false}};r.rotate=function(){r.preventAnimateEvent();r.itemActive=e(r).find(".crsl-item."+n.itemClassActive);r.next();return true};r.testPrevious=function(t){return e(".crsl-wrap",r).find(".crsl-item").index(t)>0};r.testNext=function(){return!n.infinite&&r.wrapWidth>=(n.itemWidth+n.itemMargin)*(n.visible+1)-r.wrapMargin||n.infinite};r.previous=function(){r.wrapMargin=n.infinite?r.wrapMarginDefault+e(r.itemActive).outerWidth(true):r.wrapMargin+e(r.itemActive).outerWidth(true);var t=e(r.itemActive).index();var i=e(r.itemActive).prev(".crsl-item");var s="previous";e(r).trigger("beginCarousel",[n,r,s]);e(r).find(".crsl-wrap").animate({marginLeft:r.wrapMargin+"px"},n.speed,function(){e(r.itemActive).removeClass(n.itemClassActive);e(i).addClass(n.item
ClassActive);if(n.infinite){e(this).css({marginLeft:r.wrapMarginDefault}).find(".crsl-item:first-child").before(e(".crsl-item:last-child",r))}else{if(r.testPrevious(i)===false)e("#"+n.navigation).find(".previous").addClass("previous-inactive");if(r.testNext())e("#"+n.navigation).find(".next").removeClass("next-inactive")}e(this).trigger("endCarousel",[n,r,s])})};r.next=function(){r.wrapMargin=n.infinite?r.wrapMarginDefault-e(r.itemActive).outerWidth(true):r.wrapMargin-e(r.itemActive).outerWidth(true);var t=e(r.itemActive).index();var i=e(r.itemActive).next(".crsl-item");var s="next";e(r).trigger("beginCarousel",[n,r,s]);e(r).find(".crsl-wrap").animate({marginLeft:r.wrapMargin+"px"},n.speed,function(){e(r.itemActive).removeClass(n.itemClassActive);e(i).addClass(n.itemClassActive);if(n.infinite){e(this).css({marginLeft:r.wrapMarginDefault}).find(".crsl-item:last-child").after(e(".crsl-item:first-child",r))}else{if(r.testPrevious(i))e("#"+n.navigation).find(".previous").removeClass("pr
evious-inactive");if(r.testNext()===false)e("#"+n.navigation).find(".next").addClass("next-inactive")}e(this).trigger("endCarousel",[n,r,s])})};var i=false,s;e(window).on("mouseleave",function(t){if(t.target)s=t.target;else if(t.srcElement)s=t.srcElement;if(e(r).attr("id")&&e(s).parents(".crsl-items").attr("id")===e(r).attr("id")||e(s).parents(".crsl-items").data("navigation")===e(r).data("navigation")){i=true}else{i=false}return false});e(window).on("keydown",function(e){if(i===true){if(e.keyCode===37){r.prepareExecute();r.previous()}else if(e.keyCode===39){r.prepareExecute();r.next()}}return});if(n.isTouch){e(r).on("touchstart",function(t){e(r).addClass("touching");n.startCoords=t.originalEvent.targetTouches[0];n.endCoords=t.originalEvent.targetTouches[0];e(".touching").on("touchmove",function(e){n.endCoords=e.originalEvent.targetTouches[0];if(Math.abs(parseInt(n.endCoords.pageX-n.startCoords.pageX,10))>Math.abs(parseInt(n.endCoords.pageY-n.startCoords.pageY,10))){e.preventDefault
();e.stopPropagation()}})}).on("touchend",function(t){t.preventDefault();t.stopPropagation();n.swipeDistance=n.endCoords.pageX-n.startCoords.pageX;if(n.swipeDistance>=n.swipeMinDistance){r.previous()}else if(n.swipeDistance<=-n.swipeMinDistance){r.next()}e(".touching").off("touchmove").removeClass("touching")})}e(r).on("loadedCarousel loadedImagesCarousel",function(){r.equalHeights()});e(window).on("carouselResizeEnd",function(){if(n.itemWidth!==e(r).outerWidth())r.config()});e(window).ready(function(){e(r).trigger("prepareCarousel",[n,r]);r.init();e(window).on("resize",function(){if(this.carouselResizeTo)clearTimeout(this.carouselResizeTo);this.carouselResizeTo=setTimeout(function(){e(this).trigger("carouselResizeEnd")},10)})});e(window).load(function(){r.testPreload();r.config()})})}})(jQuery)
\ No newline at end of file
Propchange: incubator/eagle/site/js/responsiveCarousel.min.js
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/eagle/site/js/svg.js
URL: http://svn.apache.org/viewvc/incubator/eagle/site/js/svg.js?rev=1715179&view=auto
==============================================================================
--- incubator/eagle/site/js/svg.js (added)
+++ incubator/eagle/site/js/svg.js Thu Nov 19 13:47:10 2015
@@ -0,0 +1,24 @@
+!function(a){function b(b,d){function e(){if(w){$canvas=a('<canvas class="pg-canvas"></canvas>'),v.prepend($canvas),p=$canvas[0],q=p.getContext("2d"),f();for(var b=Math.round(p.width*p.height/d.density),c=0;b>c;c++){var e=new l;e.setStackPos(c),x.push(e)}a(window).on("resize",function(){h()}),a(document).on("mousemove",function(a){y=a.pageX,z=a.pageY}),B&&!A&&window.addEventListener("deviceorientation",function(){D=Math.min(Math.max(-event.beta,-30),30),C=Math.min(Math.max(-event.gamma,-30),30)},!0),g(),o("onInit")}}function f(){p.width=v.width(),p.height=v.height(),q.fillStyle=d.dotColor,q.strokeStyle=d.lineColor,q.lineWidth=d.lineWidth}function g(){if(w){s=a(window).width(),t=a(window).height(),q.clearRect(0,0,p.width,p.height);for(var b=0;b<x.length;b++)x[b].updatePosition();for(var b=0;b<x.length;b++)x[b].draw();E||(r=requestAnimationFrame(g))}}function h(){for(f(),i=x.length-1;i>=0;i--)(x[i].position.x>v.width()||x[i].position.y>v.height())&&x.splice(i,1);var a=Math.round(p.wid
th*p.height/d.density);if(a>x.length)for(;a>x.length;){var b=new l;x.push(b)}else a<x.length&&x.splice(a);for(i=x.length-1;i>=0;i--)x[i].setStackPos(i)}function j(){E=!0}function k(){E=!1,g()}function l(){switch(this.stackPos,this.active=!0,this.layer=Math.ceil(3*Math.random()),this.parallaxOffsetX=0,this.parallaxOffsetY=0,this.position={x:Math.ceil(Math.random()*p.width),y:Math.ceil(Math.random()*p.height)},this.speed={},d.directionX){case"left":this.speed.x=+(-d.maxSpeedX+Math.random()*d.maxSpeedX-d.minSpeedX).toFixed(2);break;case"right":this.speed.x=+(Math.random()*d.maxSpeedX+d.minSpeedX).toFixed(2);break;default:this.speed.x=+(-d.maxSpeedX/2+Math.random()*d.maxSpeedX).toFixed(2),this.speed.x+=this.speed.x>0?d.minSpeedX:-d.minSpeedX}switch(d.directionY){case"up":this.speed.y=+(-d.maxSpeedY+Math.random()*d.maxSpeedY-d.minSpeedY).toFixed(2);break;case"down":this.speed.y=+(Math.random()*d.maxSpeedY+d.minSpeedY).toFixed(2);break;default:this.speed.y=+(-d.maxSpeedY/2+Math.random()*d
.maxSpeedY).toFixed(2),this.speed.x+=this.speed.y>0?d.minSpeedY:-d.minSpeedY}}function m(a,b){return b?void(d[a]=b):d[a]}function n(){v.find(".pg-canvas").remove(),o("onDestroy"),v.removeData("plugin_"+c)}function o(a){void 0!==d[a]&&d[a].call(u)}var p,q,r,s,t,u=b,v=a(b),w=!!document.createElement("canvas").getContext,x=[],y=0,z=0,A=!navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|mobi|tablet|opera mini|nexus 7)/i),B=!!window.DeviceOrientationEvent,C=0,D=0,E=!1;return d=a.extend({},a.fn[c].defaults,d),l.prototype.draw=function(){q.beginPath(),q.arc(this.position.x+this.parallaxOffsetX,this.position.y+this.parallaxOffsetY,d.particleRadius/2,0,2*Math.PI,!0),q.closePath(),q.fill(),q.beginPath();for(var a=x.length-1;a>this.stackPos;a--){var b=x[a],c=this.position.x-b.position.x,e=this.position.y-b.position.y,f=Math.sqrt(c*c+e*e).toFixed(2);f<d.proximity&&(q.moveTo(this.position.x+this.parallaxOffsetX,this.position.y+this.parallaxOffsetY),d.curvedLines?q.quadraticCur
veTo(Math.max(b.position.x,b.position.x),Math.min(b.position.y,b.position.y),b.position.x+b.parallaxOffsetX,b.position.y+b.parallaxOffsetY):q.lineTo(b.position.x+b.parallaxOffsetX,b.position.y+b.parallaxOffsetY))}q.stroke(),q.closePath()},l.prototype.updatePosition=function(){if(d.parallax){if(B&&!A){var a=(s-0)/60;pointerX=(C- -30)*a+0;var b=(t-0)/60;pointerY=(D- -30)*b+0}else pointerX=y,pointerY=z;this.parallaxTargX=(pointerX-s/2)/(d.parallaxMultiplier*this.layer),this.parallaxOffsetX+=(this.parallaxTargX-this.parallaxOffsetX)/10,this.parallaxTargY=(pointerY-t/2)/(d.parallaxMultiplier*this.layer),this.parallaxOffsetY+=(this.parallaxTargY-this.parallaxOffsetY)/10}switch(d.directionX){case"left":this.position.x+this.speed.x+this.parallaxOffsetX<0&&(this.position.x=v.width()-this.parallaxOffsetX);break;case"right":this.position.x+this.speed.x+this.parallaxOffsetX>v.width()&&(this.position.x=0-this.parallaxOffsetX);break;default:(this.position.x+this.speed.x+this.parallaxOffsetX>v.wid
th()||this.position.x+this.speed.x+this.parallaxOffsetX<0)&&(this.speed.x=-this.speed.x)}switch(d.directionY){case"up":this.position.y+this.speed.y+this.parallaxOffsetY<0&&(this.position.y=v.height()-this.parallaxOffsetY);break;case"down":this.position.y+this.speed.y+this.parallaxOffsetY>v.height()&&(this.position.y=0-this.parallaxOffsetY);break;default:(this.position.y+this.speed.y+this.parallaxOffsetY>v.height()||this.position.y+this.speed.y+this.parallaxOffsetY<0)&&(this.speed.y=-this.speed.y)}this.position.x+=this.speed.x,this.position.y+=this.speed.y},l.prototype.setStackPos=function(a){this.stackPos=a},e(),{option:m,destroy:n,start:k,pause:j}}var c="particleground";a.fn[c]=function(d){if("string"==typeof arguments[0]){var e,f=arguments[0],g=Array.prototype.slice.call(arguments,1);return this.each(function(){a.data(this,"plugin_"+c)&&"function"==typeof a.data(this,"plugin_"+c)[f]&&(e=a.data(this,"plugin_"+c)[f].apply(this,g))}),void 0!==e?e:this}return"object"!=typeof d&&d?void
0:this.each(function(){a.data(this,"plugin_"+c)||a.data(this,"plugin_"+c,new b(this,d))})},a.fn[c].defaults={minSpeedX:.1,maxSpeedX:.7,minSpeedY:.1,maxSpeedY:.7,directionX:"center",directionY:"center",density:1e4,dotColor:"#666666",lineColor:"#666666",particleRadius:7,lineWidth:1,curvedLines:!1,proximity:100,parallax:!0,parallaxMultiplier:5,onInit:function(){},onDestroy:function(){}}}(jQuery),
+
+function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c<b.length&&!window.requestAnimationFrame;++c)window.requestAnimationFrame=window[b[c]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[b[c]+"CancelAnimationFrame"]||window[b[c]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(b){var c=(new Date).getTime(),d=Math.max(0,16-(c-a)),e=window.setTimeout(function(){b(c+d)},d);return a=c+d,e}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(a){clearTimeout(a)})}();
+
+$(function(){
+
+ $('.particles').particleground({
+ minSpeedX: 0.1,
+ maxSpeedX: 0.7,
+ minSpeedY: 0.1,
+ maxSpeedY: 0.7,
+ directionX: 'center', // 'center', 'left' or 'right'. 'center' = dots bounce off edges
+ directionY: 'center', // 'center', 'up' or 'down'. 'center' = dots bounce off edges
+ density: 10000, // How many particles will be generated: one particle every n pixels
+ dotColor: '#eee',
+ lineColor: '#eee',
+ particleRadius: 7, // Dot size
+ lineWidth: 1,
+ curvedLines: true,
+ proximity: 100, // How close two dots need to be before they join
+ parallax: false
+ });
+
+});
\ No newline at end of file
Propchange: incubator/eagle/site/js/svg.js
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/eagle/site/post/2015/10/27/apache-eagle-announce-cn.html
URL: http://svn.apache.org/viewvc/incubator/eagle/site/post/2015/10/27/apache-eagle-announce-cn.html?rev=1715179&view=auto
==============================================================================
--- incubator/eagle/site/post/2015/10/27/apache-eagle-announce-cn.html (added)
+++ incubator/eagle/site/post/2015/10/27/apache-eagle-announce-cn.html Thu Nov 19 13:47:10 2015
@@ -0,0 +1,338 @@
+<!DOCTYPE html>
+<html>
+
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+
+ <title>Eagle - Apache Eagle æ£å¼åå¸ï¼åå¸å¼å®æ¶Hadoopæ°æ®å®å
¨æ¹æ¡</title>
+ <meta name="description" content=" æè¦ï¼æ¥åï¼eBayå
¬å¸éé宣å¸æ£å¼åå¼æºä¸çæ¨åºå®æ¶åå¸å¼Hadoopæ°æ®å®å
¨æ¹æ¡ - Apache Eagleï¼ä½ä¸ºä¸å¥æ¨å¨æä¾é«æåå¸å¼çæµå¼çç¥å¼æï¼å¹¶éææºå¨å¦ä¹ 对ç¨æ·è¡ä¸ºå»ºç«Profile以å®æ¶æºè½å°ä¿æ¤Hadoopçæç³»ç»ä¸å¤§æ°æ®å®å
¨ç解å³æ¹æ¡ã">
+
+ <meta name="keywords" content="Eagle, Hadoop, Security, Real Time">
+ <meta name="author" content="eBay Inc.">
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="initial-scale=1">
+
+ <link rel="stylesheet" href="/css/animate.css">
+ <link rel="stylesheet" href="/css/bootstrap.min.css">
+
+ <link rel="stylesheet" href="/css/font-awesome.min.css">
+
+ <link rel="stylesheet" href="/css/misc.css">
+ <link rel="stylesheet" href="/css/style.css">
+ <link rel="stylesheet" href="/css/styles.css">
+ <link rel="stylesheet" href="/css/main.css">
+ <link rel="alternate" type="application/rss+xml" title="Eagle" href="http://goeagle.io/feed.xml" />
+ <link rel="shortcut icon" href="/images/favicon.png">
+
+ <!-- Baidu Analytics Tracking-->
+ <script>
+ var _hmt = _hmt || [];
+ (function() {
+ var hm = document.createElement("script");
+ hm.src = "//hm.baidu.com/hm.js?fedc55df2ea52777a679192e8f849ece";
+ var s = document.getElementsByTagName("script")[0];
+ s.parentNode.insertBefore(hm, s);
+ })();
+ </script>
+
+ <!-- Google Analytics Tracking -->
+ <script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+ ga('create', 'UA-68929805-1', 'auto');
+ ga('send', 'pageview');
+ </script>
+</head>
+ <body>
+ <div class="topbar">
+ <div class="container">
+ <div class="row" >
+ <nav class="navbar navbar-default">
+ <div class="container-fluid">
+ <!-- Brand and toggle get grouped for better mobile display -->
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
+ <a class="navbar-brand" href="/"><img src="/images/logo2.png" height="44px" style="margin-top:-7px"></a> </div>
+
+ <!-- Collect the nav links, forms, and other content for toggling -->
+ <!-- <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
+ <ul class="nav navbar-nav navbar-right" id="top-menu">
+ <li><a class="menu" href="/#home_page">HOME</a></li>
+ <li><a class="menu" href="/docs/">DOCS</a></li>
+ <li><a class="menu" href="/#about_page">ABOUT</a></li>
+ <li><a class="menu" href="/#diagram_page">ARCHITECTURE</a></li>
+ <li><a class="menu" href="/#modules_page">MODULES</a></li>
+ <li><a class="menu" href="/#usecase_page">USE CASES</a></li>
+ <li>
+ </li>
+ </ul> -->
+ </div>
+ </div>
+ <!-- /.container-fluid -->
+ </nav>
+ </div>
+ </div>
+ </div>
+ <div class="page-content">
+ <div class="pagewrapper">
+ <div class="post">
+
+ <header class="post-header">
+ <h1 class="post-title">Apache Eagle æ£å¼åå¸ï¼åå¸å¼å®æ¶Hadoopæ°æ®å®å
¨æ¹æ¡</h1>
+ <p class="post-meta">Oct 27, 2015 ⢠Hao Chen, Edward Zhang, Libin Sun, Jilin Jiang, Qingwen Zhao</p>
+ </header>
+
+ <article class="post-content">
+ <blockquote>
+ <p><em>æè¦</em>ï¼æ¥åï¼eBayå
¬å¸éé宣å¸æ£å¼åå¼æºä¸çæ¨åºå®æ¶åå¸å¼Hadoopæ°æ®å®å
¨æ¹æ¡ - Apache Eagleï¼ä½ä¸ºä¸å¥æ¨å¨æä¾é«æåå¸å¼çæµå¼çç¥å¼æï¼å¹¶éææºå¨å¦ä¹ 对ç¨æ·è¡ä¸ºå»ºç«Profile以å®æ¶æºè½å°ä¿æ¤Hadoopçæç³»ç»ä¸å¤§æ°æ®å®å
¨ç解å³æ¹æ¡ã</p>
+</blockquote>
+
+<p>æ¥åï¼eBayå
¬å¸éé宣å¸æ£å¼åå¼æºä¸çæ¨åºåå¸å¼å®æ¶å®å
¨çæ§æ¹æ¡ ï¼ Apache Eagle (http://goeagle.io)ï¼è¯¥é¡¹ç®å·²äº2015å¹´10æ26æ¥æ£å¼å å
¥Apache æ为åµåå¨é¡¹ç®ãApache Eagleæä¾ä¸å¥é«æåå¸å¼çæµå¼çç¥å¼æï¼å
·æé«å®æ¶ãå¯ä¼¸ç¼©ãææ©å±ã交äºå好çç¹ç¹ï¼åæ¶éææºå¨å¦ä¹ 对ç¨æ·è¡ä¸ºå»ºç«Profile以å®ç°æºè½å®æ¶å°ä¿æ¤Hadoopçæç³»ç»ä¸å¤§æ°æ®çå®å
¨ã</p>
+
+<h2 id="section">èæ¯</h2>
+<p>éç大æ°æ®çåå±ï¼è¶æ¥è¶å¤çæåä¼ä¸æè
ç»ç»å¼å§éåæ°æ®é©±å¨åä¸çè¿ä½æ¨¡å¼ãå¨eBayï¼æ们æ¥ææ°ä¸åå·¥ç¨å¸ãåæå¸åæ°æ®ç§å¦å®¶ï¼ä»ä»¬æ¯å¤©è®¿é®åææ°PB级çæ°æ®ï¼ä»¥ä¸ºæ们çç¨æ·å¸¦æ¥æ ä¸ä¼¦æ¯çä½éªãå¨å
¨çä¸å¡ä¸ï¼æ们ä¹å¹¿æ³å°å©ç¨æµ·é大æ°æ®æ¥è¿æ¥æ们æ°ä»¥äº¿è®¡çç¨æ·ã</p>
+
+<p>è¿å¹´æ¥ï¼Hadoopå·²ç»éæ¸æ为大æ°æ®åæé¢åæå欢è¿ç解å³æ¹æ¡ï¼eBayä¹ä¸ç´å¨ä½¿ç¨Hadoopææ¯ä»æ°æ®ä¸ææä»·å¼ï¼ä¾å¦ï¼æ们éè¿å¤§æ°æ®æé«ç¨æ·çæç´¢ä½éªï¼è¯å«åä¼åç²¾å广åææ¾ï¼å
å®æ们ç产åç®å½ï¼ä»¥åéè¿ç¹å»æµåæ以ç解ç¨æ·å¦ä½ä½¿ç¨æ们çå¨çº¿å¸åºå¹³å°çã</p>
+
+<p>ç®åï¼eBayçHadoopé群æ»èç¹æ°æ®è¶
è¿10000å¤ä¸ªï¼åå¨å®¹éè¶
è¿170PBï¼æ´»è·ç¨æ·è¶
è¿2000å¤ãç°å¨ç¸å
³è§æ¨¡è¿å¨ä¸æå¢é¿ä¸ï¼åæ¶ä¸ºäºæ¯æå¤å
åéæ±ï¼æ们å¼å
¥è¶æ¥è¶å¤æ ·çæ°æ®åå¨ååææ¹æ¡ï¼æ¯å¦HiveãMapReduecãSpark åHBaseçï¼éä¹å¸¦æ¥ç管çåçæ§çææè¶æ¥è¶ä¸¥å³»ï¼æ°æ®å®å
¨é®é¢äº¦æ¯å
¶ä¸æéè¦çä¹ä¸ã</p>
+
+<p>大æ°æ®æ¶ä»£ï¼å®å
¨é®é¢å¼å§åå¾ç©ºåçå
³é®ï¼ç¹å«eBayä½ä¸ºå
¨çé¢å
ççµååå¡å
¬å¸ï¼æ们å¿
é¡»ä¿è¯Hadoopä¸ç¨æ·æ°æ®çç»å¯¹å®å
¨ãé常æ们çå®å
¨æªæ½æ ¹æ®å¦ä¸å ç¹ ï¼è®¿é®æ§å¶ãå®å
¨é离ãæ°æ®åç±»ãæ°æ®å å¯ä»¥åå®æ¶æ°æ®è¡ä¸ºçæ§ï¼ç¶èç»è¿å¹¿æ³çå°è¯åç 究ï¼æ们æè¯å°æ²¡æä»»ä½å·²ç»åå¨ç产åæè
解å³æ¹æ¡è½å¤å
å满足æ们é¢ä¸´æµ·éå®æ¶æ°æ®æµåå¤å
åç¨ä¾åºæ¯ä¸æ°æ®è¡ä¸�
�çæ§çéæ±ã为äºé¾è¶è¿é鸿æ²ï¼eBayå³å®ä»å¤´å¼å§æ建Eagleã</p>
+
+<p><img src="/images/logo_700x400.png" alt="" /></p>
+
+<blockquote>
+ <p>âEagle æ¯å¼æºåå¸å¼å®æ¶Hadoopæ°æ®å®å
¨æ¹æ¡ï¼æ¯ææ°æ®è¡ä¸ºå®æ¶çæ§ï¼è½ç«å³çæµåºå¯¹æææ°æ®ç访é®ææ¶æçæä½ï¼å¹¶ç«å³éååºå¯¹çæªæ½â</p>
+</blockquote>
+
+<p>æ们ç¸ä¿¡Eagleå°æ为Hadoopæ°æ®å®å
¨é¢åçæ ¸å¿ç»ä»¶ä¹ä¸ï¼å æ¤æ们å³å®å°å®çåè½å享ç»æ´ä¸ªç¤¾åºãç®åæ们已ç»å°Eagleæèµ ç»Apache软件åºéä¼ä½ä¸ºApache åµåå¨é¡¹ç®å¼æºï¼ææè½å¤åå¼æºç¤¾åºä¸ååä½å¼åï¼ä½¿å¾Eagleä¸æåå±å£®å¤§ï¼å
±å满足å¼æºç¤¾åºä¸æ´å¹¿æ³çéæ±ã</p>
+
+<p>Eagleçæ°æ®è¡ä¸ºçæ§æ¹æ¡å¯ç¨äºå¦ä¸å ç±»å
¸ååºæ¯ï¼</p>
+
+<ul>
+ <li>çæ§Hadoopä¸çæ°æ®è®¿é®æµé</li>
+ <li>æ£æµéæ³å
¥ä¾µåè¿åå®å
¨è§åçè¡ä¸º</li>
+ <li>æ£æµå¹¶é²æ¢æææ°æ®ä¸¢å¤±å访é®</li>
+ <li>å®ç°åºäºçç¥çå®æ¶æ£æµåé¢è¦</li>
+ <li>å®ç°åºäºç¨æ·è¡ä¸ºæ¨¡å¼çå¼å¸¸æ°æ®è¡ä¸ºæ£æµ</li>
+</ul>
+
+<p>Eagleå
·æå¦ä¸ç¹ç¹ï¼</p>
+
+<ul>
+ <li><strong>é«å®æ¶</strong>ï¼ æ们å
åç解å®å
¨çæ§ä¸é«åº¦å®æ¶åå¿«éååºçéè¦æ§ï¼å æ¤è®¾è®¡Eagleä¹åï¼æ们ç«å°½å¯è½å°ç¡®ä¿è½å¨äºç§çº§å«æ¶é´å
产çåè¦ï¼ä¸æ¦ç»¼åå¤ç§å ç´ ç¡®è®¢ä¸ºå±é©æä½ï¼ç«å³éåæªæ½é»æ¢éæ³è¡ä¸ºã</li>
+ <li><strong>å¯ä¼¸ç¼©</strong>ï¼å¨eBay Eagle 被é¨ç½²å¨å¤ä¸ªå¤§åHadoopé群ä¸ï¼è¿äºé群æ¥ææ°ç¾PBçæ°æ®ï¼æ¯å¤©æ8亿以ä¸çæ°æ®è®¿é®æ¶é´ï¼å æ¤Eagleå¿
é¡»å
·æå¤çæµ·éå®æ¶æ°æ®çé«åº¦å¯ä¼¸ç¼©è½åã</li>
+ <li><strong>ç®åæç¨</strong>ï¼å¯ç¨æ§ä¹æ¯Eagle产åçæ ¸å¿è®¾è®¡ååä¹ä¸ãéè¿EagleçSandboxï¼ä½¿ç¨è
ä»
éæ°åé便å¯ä»¥è®¾ç½®å¥½ç¯å¢å¹¶å¼å§å°è¯ã为äºä½¿å¾ç¨æ·ä½éªå°½å¯è½ç®åï¼æ们å
ç½®äºè®¸å¤å¾å¥½çä¾åï¼åªéç®åå°ç¹å»å æ¥é¼ æ ï¼ä¾¿å¯ä»¥è½»æ¾å°å®æçç¥å°å建åæ·»å ã</li>
+ <li><strong>ç¨æ·Profile</strong>ï¼Eagle å
ç½®æä¾åºäºæºå¨å¦ä¹ ç®æ³å¯¹Hadoopä¸ç¨æ·è¡ä¸ºä¹ æ¯å»ºç«ç¨æ·Profileçåè½ãæ们æä¾å¤ç§é»è®¤çæºå¨å¦ä¹ ç®æ³ä¾ä½ éæ©ç¨äºé对ä¸åHDFSç¹å¾éè¿è¡å»ºæ¨¡ï¼éè¿åå²è¡ä¸ºæ¨¡åï¼Eagleå¯ä»¥å®æ¶å°æ£æµå¼å¸¸ç¨æ·è¡ä¸ºå¹¶äº§çé¢è¦ã</li>
+ <li><strong>å¼æº</strong>ï¼Eagleä¸ç´æ ¹æ®å¼æºçæ åå¼åï¼å¹¶æ建äºè¯¸å¤å¤§æ°æ®é¢åçå¼æºäº§åä¹ä¸ï¼å æ¤æ们å³å®ä»¥Apache许å¯è¯å¼æºEagleï¼ä»¥åé¦ç¤¾åºï¼åæ¶ä¹æå¾
è·å¾ç¤¾åºçåé¦ãåä½ä¸æ¯æã</li>
+</ul>
+
+<h2 id="eagle">Eagleæ¦è§</h2>
+
+<p><img src="/images/posts/eagle-group.png" alt="" /></p>
+
+<h4 id="data-collection-and-storage">æ°æ®æµæ¥å
¥ååå¨ï¼Data Collection and Storageï¼</h4>
+<p>Eagleæä¾é«åº¦å¯æ©å±çç¼ç¨APIï¼å¯ä»¥æ¯æå°ä»»ä½ç±»åçæ°æ®æºéæå°Eagleççç¥æ§è¡å¼æä¸ãä¾å¦ï¼å¨Eagle HDFS 审计äºä»¶ï¼Auditï¼çæ§æ¨¡åä¸ï¼éè¿Kafkaæ¥å®æ¶æ¥æ¶æ¥èªNamenode Log4j Appender æè
Logstash Agent æ¶éçæ°æ®ï¼å¨Eagle Hive çæ§æ¨¡åä¸ï¼éè¿YARN API æ¶éæ£å¨è¿è¡JobçHive æ¥è¯¢æ¥å¿ï¼å¹¶ä¿è¯æ¯è¾é«çå¯ä¼¸ç¼©æ§å容éæ§ã</p>
+
+<h4 id="data-processing">æ°æ®å®æ¶å¤çï¼Data Processingï¼</h4>
+
+<p><strong>æµå¤çAPIï¼Stream Processing APIï¼Eagle</strong> æä¾ç¬ç«äºç©çå¹³å°èé«åº¦æ½è±¡çæµå¤çAPIï¼ç®åé»è®¤æ¯æApache Stormï¼ä½æ¯ä¹å
许æ©å±å°å
¶ä»ä»»ææµå¤çå¼æï¼æ¯å¦Flink æè
Samzaçã该å±æ½è±¡å
许å¼åè
å¨å®ä¹çæ§æ°æ®å¤çé»è¾æ¶ï¼æ éå¨ç©çæ§è¡å±ç»å®ä»»ä½ç¹å®æµå¤çå¹³å°ï¼èåªééè¿å¤ç¨ãæ¼æ¥åç»è£
ä¾å¦æ°æ®è½¬æ¢ãè¿æ»¤ãå¤é¨æ°æ®Joinçç»ä»¶ï¼ä»¥å®ç°æ»¡è¶³éæ±çDAGï¼æåæ ç¯å¾ï¼ï¼åæ¶ï¼å¼åè
ä¹å¯�
�»¥å¾å®¹æå°ä»¥ç¼ç¨å°æ¹å¼å°ä¸å¡é»è¾æµç¨åEagle çç¥å¼ææ¡æ¶éæèµ·æ¥ãEagleæ¡æ¶å
é¨ä¼å°æè¿°ä¸å¡é»è¾çDAGç¼è¯æåºå±æµå¤çæ¶æçåçåºç¨ï¼ä¾å¦Apache Storm Topology çï¼ä»äºå®ç°å¹³å°çç¬ç«ã</p>
+
+<p><strong>以ä¸æ¯ä¸ä¸ªEagleå¦ä½å¤çäºä»¶ååè¦ç示ä¾ï¼</strong></p>
+
+<pre><code>StormExecutionEnvironment env = ExecutionEnvironmentFactory.getStorm(config); // storm env
+StreamProducer producer = env.newSource(new KafkaSourcedSpoutProvider().getSpout(config)).renameOutputFields(1) // declare kafka source
+ .flatMap(new AuditLogTransformer()) // transform event
+ .groupBy(Arrays.asList(0)) // group by 1st field
+ .flatMap(new UserProfileAggregatorExecutor()); // aggregate one-hour data by user
+ .alertWithConsumer(âuserActivityâ,âuserProfileExecutorâ) // ML policy evaluation
+env.execute(); // execute stream processing and alert
+</code></pre>
+
+<p><strong>åè¦æ¡æ¶ï¼Alerting Frameworkï¼Eagle</strong>åè¦æ¡æ¶ç±æµå
æ°æ®APIãçç¥å¼ææå¡æä¾APIãçç¥Partitioner API 以åé¢è¦å»éæ¡æ¶çç»æ:</p>
+
+<ul>
+ <li><strong>æµå
æ°æ®API</strong> å
许ç¨æ·å£°æäºä»¶çSchemaï¼å
æ¬äºä»¶ç±åªäºå±æ§ææãæ¯ä¸ªå±æ§çç±»åï¼ä»¥åå½ç¨æ·é
ç½®çç¥æ¶å¦ä½å¨è¿è¡æ¶å¨æ解æå±æ§çå¼çã</li>
+ <li><strong>çç¥å¼ææå¡æä¾API</strong> å
许å¼åè
å¾å®¹æå°ä»¥æ件çå½¢å¼æ©å±æ°ççç¥å¼æãWSO2 Siddhi CEP å¼ææ¯Eagle ä¼å
é»è®¤æ¯æççç¥å¼æï¼åæ¶æºå¨å¦ä¹ ç®æ³ä¹å¯ä½ä¸ºå¦ä¸ç§çç¥å¼ææ§è¡ã</li>
+ <li>
+ <p><strong>æ©å±æ§</strong> Eagleççç¥å¼ææå¡æä¾APIå
è®¸ä½ æå
¥æ°ççç¥å¼æ</p>
+
+ <pre><code> public interface PolicyEvaluatorServiceProvider {
+ public String getPolicyType(); // literal string to identify one type of policy
+ public Class<? extends PolicyEvaluator> getPolicyEvaluator(); // get policy evaluator implementation
+ public List<Module> getBindingModules(); // policy text with json format to object mapping
+ }
+ public interface PolicyEvaluator {
+ public void evaluate(ValuesArray input) throws Exception; // evaluate input event
+ public void onPolicyUpdate(AlertDefinitionAPIEntity newAlertDef); // invoked when policy is updated
+ public void onPolicyDelete(); // invoked when policy is deleted
+ }
+</code></pre>
+ </li>
+ <li><strong>çç¥Partitioner API</strong> å
许çç¥å¨ä¸åçç©çèç¹ä¸å¹¶è¡æ§è¡ãä¹å
è®¸ä½ èªå®ä¹çç¥Partitionerç±»ãè¿äºåè½ä½¿å¾çç¥åäºä»¶å®å
¨ä»¥åå¸å¼çæ¹å¼æ§è¡ã</li>
+ <li>
+ <p><strong>å¯ä¼¸ç¼©æ§</strong> Eagle éè¿æ¯æçç¥çååºæ¥å£æ¥å®ç°å¤§éççç¥å¯ä¼¸ç¼©å¹¶åå°è¿è¡</p>
+
+ <pre><code> public interface PolicyPartitioner extends Serializable {
+ int partition(int numTotalPartitions, String policyType, String policyId); // method to distribute policies
+ }
+</code></pre>
+
+ <p><img src="/images/posts/policy-partition.png" alt="" /></p>
+
+ <blockquote>
+ <p>å¯ä¼¸ç¼©çEagleçç¥æ§è¡æ¡æ¶</p>
+ </blockquote>
+ </li>
+</ul>
+
+<p><strong>æºå¨å¦ä¹ 模å:</strong>
+Eagle æ¯ææ ¹æ®ç¨æ·å¨Hadoopå¹³å°ä¸åå²ä½¿ç¨è¡ä¸ºä¹ æ¯æ¥å®ä¹è¡ä¸ºæ¨¡å¼æç¨æ·Profileçè½åãæ¥æäºè¿ä¸ªåè½ï¼ä¸éè¦å¨ç³»ç»ä¸é¢å
设置åºå®ä¸´çå¼çæ
åµä¸ï¼ä¹å¯ä»¥å®ç°æºè½å°æ£æµåºå¼å¸¸çè¡ä¸ºãEagleä¸ç¨æ·Profileæ¯éè¿æºå¨å¦ä¹ ç®æ³çæï¼ç¨äºå¨ç¨æ·å½åå®æ¶è¡ä¸ºæ¨¡å¼ä¸å
¶å¯¹åºçåå²æ¨¡å模å¼åå¨ä¸å®ç¨åº¦çå·®å¼æ¶è¯å«ç¨æ·è¡ä¸ºæ¯å¦ä¸ºå¼å¸¸ãç®åï¼Eagle å
ç½®æä¾ä»¥ä¸ä¸¤ç§ç®æ³æ¥æ£æµå¼å¸¸ï¼åå«
为ç¹å¾å¼å解ï¼Eigen-Value Decompositionï¼å å¯åº¦ä¼°è®¡ï¼Density Estimationï¼ãè¿äºç®æ³ä»HDFS 审计æ¥å¿ä¸è¯»åæ°æ®ï¼å¯¹æ°æ®è¿è¡åå²ã审æ¥ã交ååæï¼å¨ææ§å°ä¸ºæ¯ä¸ªç¨æ·ä¾æ¬¡å建Profile è¡ä¸ºæ¨¡åãä¸æ¦æ¨¡åçæï¼Eagleçå®æ¶æµçç¥å¼æè½å¤è¿ä¹å®æ¶å°è¯å«åºå¼å¸¸ï¼å辨å½åç¨æ·çè¡ä¸ºå¯ççæè
ä¸ä»ä»¬çåå²è¡ä¸ºæ¨¡åä¸ç¸ç¬¦ã</p>
+
+<p>ä¸å¾ç®åæè¿°äºç®åEagleä¸ç¨æ·Profileç离线è®ç»å»ºæ¨¡åå¨çº¿å®æ¶çæµçæ°æ®æµï¼</p>
+
+<p><img src="/images/posts/ml-pipeline.png" alt="" /></p>
+
+<blockquote>
+ <p>ç¨æ·Profile 离线è®ç»ä»¥åå¼å¸¸çæµæ¶æ</p>
+</blockquote>
+
+<p>åºäºç¨æ· ProfileçEagleå¨çº¿å®æ¶å¼å¸¸çæµæ¯æ ¹æ®Eagleçéç¨çç¥æ¡æ¶å®ç°çï¼ç¨æ·Profileåªæ¯è¢«å®ä¹ä¸ºEagleç³»ç»ä¸ä¸ä¸ªçç¥èå·²ï¼ç¨æ·Profileççç¥æ¯éè¿ç»§æ¿èªEagleç»ä¸çç¥æ§è¡æ¥å£çæºå¨å¦ä¹ Evaluatoræ¥æ§è¡ï¼å
¶çç¥çå®ä¹ä¸å
æ¬å¼å¸¸æ£æµè¿ç¨ä¸éè¦çç¹å¾åéçï¼å¨çº¿æ£æµä¸ç¦»çº¿è®ç»ä¿æä¸è´ï¼ã</p>
+
+<p>æ¤å¤ï¼Eagle æä¾èªå¨è®ç»è°åº¦å¨ï¼å¯æ ¹æ®æ件æè
UIé
ç½®çæ¶é´å¨æåç²åº¦æ¥è°åº¦è¿ä¸ªåºäºSparkç离线è®ç»ç¨åºï¼ç¨äºæ¹éå建ç¨æ·Profileåè¡ä¸ºæ¨¡åï¼é»è®¤è¯¥è®ç»ç³»ç»ä»¥æ¯æçé¢çæ´æ°æ¨¡åï¼æ¨¡åç²åº¦ä¸ºä¸åéã</p>
+
+<p>Eagle å
ç½®çæºå¨å¦ä¹ ç®æ³åºæ¬ææ³å¦ä¸ï¼</p>
+
+<p><strong>æ ¸å¯åº¦ä¼°è®¡ç®æ³ (Density Estimation)</strong>
+该ç®æ³çåºæ¬ææ³æ¯æ ¹æ®æ£æµçè®ç»æ ·æ¬æ°æ®é对æ¯ä¸ªç¨æ·è®¡ç®åºå¯¹åºçæ¦çå¯åº¦åå¸å½æ°ãé¦å
ï¼æ们对è®ç»æ°æ®éçæ¯ä¸ªç¹å¾åå¼æ ååï¼æ ååå¯ä»¥ä½¿å¾æææ°æ®é转å为ç¸å尺度ãç¶åï¼å¨æ们çéæºåéæ¦çåå¸ä¼°è®¡ä¸ï¼æ们éç¨é«æ¯åå¸å¼å½æ°æ¥è®¡ç®æ¦çå¯åº¦ãå设任æç¹å¾å½¼æ¤ç¸äºç¬ç«ï¼é£ä¹æç»çé«æ¯æ¦çå¯åº¦å°±å¯ä»¥éè¿å解å个ç¹å¾çæ¦çå¯åº¦è计ç®å¾å°�
�å¨çº¿å®æ¶æ£æµé¶æ®µï¼æ们å¯ä»¥é¦å
计ç®åºæ¯ä¸ªç¨æ·å®æ¶è¡ä¸ºçæ¦çãå¦æç¨æ·åºç°å½åè¡ä¸ºçå¯è½æ§ä½äºæ个临çå¼ï¼æ们表è¯ä¸ºå¼å¸¸è¦åï¼èè¿ä¸ªä¸´çå¼å®å
¨ç±ç¦»çº¿è®ç»ç¨åºéè¿ç§°ä¸ºâ马修æ¯ç¸å
³ç³»æ°âï¼Mathews Correlation Coefficientï¼çæ¹æ³è®¡ç®èå¾ã</p>
+
+<p><img src="/images/posts/density-estimation.png" alt="" /></p>
+
+<blockquote>
+ <p>å±ç¤ºåä¸ç»´åº¦ä¸ç¨æ·è¡ä¸ºç´æ¹å¾</p>
+</blockquote>
+
+<p><strong>ç¹å¾å¼å解ç®æ³ï¼Eigen-Value Decompositionï¼</strong>
+该ç®æ³ä¸ï¼æ们认为çæç¨æ·Profileç主è¦ç®çæ¯ä¸ºäºä»ä¸åç°æä»·å¼çç¨æ·è¡ä¸ºæ¨¡å¼ã为äºå®ç°è¿ä¸ªç®çï¼æ们å¯ä»¥èè对ç¹å¾ä¾æ¬¡è¿è¡ç»åï¼ç¶åè§å¯ä»ä»¬ç¸äºä¹é´æ¯å¦ä½å½±åçãå½æ°æ®éé常巨大æ¶ï¼æ£å¦é常æ们æéå°çåºæ¯ï¼ç±äºæ£å¸¸æ¨¡å¼çæ°éé常ä¹å¤ï¼ä»¥è³äºç¹å¾éçå¼å¸¸ç模å¼å¾å®¹æ被忽è§ãç±äºæ£å¸¸çè¡ä¸ºæ¨¡å¼é常å¤äºé常ä½ç»´çå空é´å
ï¼å æ¤æ们ä¹è®¸å¯ä»¥
éè¿éä½æ°æ®éç维度æ¥æ´å¥½çç解ç¨æ·ççæ£çè¡ä¸ºæ¨¡å¼ã该æ¹æ³åæ ·å¯ä»¥å¯¹äºè®ç»æ°æ®éè¿è¡éåªãæ ¹æ®å¯¹å¤§éç¨æ·ç¹å¾æ°æ®æ¹å·®çè¿è¡è¿ç®ï¼é常å¨æ们çç¨ä¾åºæ¯ä¸éåæ¹å·®ä¸º95%ä½ä¸ºåºåï¼æ们å¯ä»¥å¾å°æ¹å·®ä¸º95%ç主æåçæ°é为kï¼å æ¤æ们å°åk个主æå认为æ¯ç¨æ·çæ£å¸¸å空é´ï¼èå©ä¸ç(n-k)个主æåå被è§ä¸ºå¼å¸¸å空é´ã</p>
+
+<p>å½çº¿å®æ¶å¼å¸¸æ£æµæ¶ï¼å¦æç¨æ·è¡ä¸ºæ¨¡å¼ä½äºæ£å¸¸å空é´éè¿ï¼å认为该è¡ä¸ºæ£å¸¸ï¼å¦åï¼å¦æç¨æ·è¡ä¸ºæ¨¡å¼ä½äºå¼å¸¸å空é´éè¿ï¼åä¼ç«å³æ¥è¦ï¼å 为æ们ç¸ä¿¡é常ç¨æ·è¡ä¸ºä¸è¬åºè¯¥ä½äºæ£å¸¸å空é´å
ãè³äºå¦ä½è®¡ç®ç¨æ·å½åè¡ä¸ºæ¥è¿æ£å¸¸è¿æ¯å¼å¸¸å空é´ï¼æ们éç¨çæ¯æ¬§æ°è·ç¦»æ³ï¼Euclidian distance methodï¼ã</p>
+
+<p><img src="/images/posts/eigen-decomposition.png" alt="" /></p>
+
+<blockquote>
+ <p>å±ç¤ºéè¦çç¨æ·è¡ä¸ºæ¨¡å¼æå</p>
+</blockquote>
+
+<p><strong>Eagle æå¡</strong></p>
+
+<p><strong>çç¥ç®¡çå¨</strong> Eagleçç¥ç®¡çå¨æä¾äº¤äºå好çç¨æ·çé¢åREST API ä¾ç¨æ·è½»æ¾å°å®ä¹å管ççç¥ï¼ä¸ååªéå æ¬¡é¼ æ ç¹å»èå·²ãEagleçç¨æ·çé¢ä½¿å¾çç¥ç管çãææå
æ°æ®çæ è¯å导å
¥ãHDFSæHive çèµæºæµè§ä»¥åé¢è¦ä»ªè¡¨çåè½é½é常æäºä½¿ç¨ã</p>
+
+<p>Eagle çç¥å¼æé»è®¤æ¯æWSO2çSiddhi CEPå¼æåæºå¨å¦ä¹ å¼æï¼ä»¥ä¸æ¯å 个åºäºSiddi CEPççç¥ç¤ºä¾</p>
+
+<ul>
+ <li>
+ <p>åä¸äºä»¶æ§è¡çç¥ï¼ç¨æ·è®¿é®Hiveä¸çæææ°æ®åï¼</p>
+
+ <pre><code> from hiveAccessLogStream[sensitivityType=='PHONE_NUMBER'] select * insert into outputStream;
+</code></pre>
+ </li>
+ <li>
+ <p>åºäºçªå£ççç¥ï¼ç¨æ·å¨10åéå
访é®ç®å½ /tmp/private å¤ä½ 5次ï¼</p>
+
+ <pre><code> hdfsAuditLogEventStream[(src == '/tmp/private')]#window.externalTime(timestamp,10 min) select user, count(timestamp) as aggValue group by user having aggValue >= 5 insert into outputStream;
+</code></pre>
+ </li>
+</ul>
+
+<p><strong>æ¥è¯¢æå¡ï¼Query Serviceï¼</strong> Eagle æä¾ç±»SQLçREST APIç¨æ¥å®ç°é对海éæ°æ®éç综å计ç®ãæ¥è¯¢ååæçè½åï¼æ¯æä¾å¦è¿æ»¤ãèåãç´æ¹è¿ç®ãæåºãtopãç®æ¯è¡¨è¾¾å¼ä»¥åå页çãEagleä¼å
æ¯æHBase ä½ä¸ºå
¶é»è®¤æ°æ®åå¨ï¼ä½æ¯åæ¶ä¹æ¯æåºJDBCçå
³ç³»åæ°æ®åºãç¹å«æ¯å½éæ©ä»¥HBaseä½ä¸ºåå¨æ¶ï¼Eagle便åçæ¥æäºHBaseåå¨åæ¥è¯¢æµ·éçæ§æ°æ®çè½åï¼Eagle æ¥è¯¢æ¡æ¶ä¼å°ç¨æ·æä¾çç±»SQLæ¥è¯¢è¯æ³æç»ç¼è¯æ
为HBase åççFilter 对象ï¼å¹¶æ¯æéè¿HBase Coprocessorè¿ä¸æ¥æåååºé度ã</p>
+
+<pre><code>query=AlertDefinitionService[@dataSource="hiveQueryLog"]{@policyDef}&pageSize=100000
+</code></pre>
+
+<h2 id="eagleebay">Eagleå¨eBayç使ç¨åºæ¯</h2>
+<p>ç®åï¼Eagleçæ°æ®è¡ä¸ºçæ§ç³»ç»å·²ç»é¨ç½²å°ä¸ä¸ªæ¥æ2500å¤ä¸ªèç¹çHadoopé群ä¹ä¸ï¼ç¨ä»¥ä¿æ¤æ°ç¾PBæ°æ®çå®å
¨ï¼å¹¶æ£è®¡åäºä»å¹´å¹´åºä¹åæ©å±å°å
¶ä»ä¸å个Hadoopé群ä¸ï¼ä»èè¦çeBay ææ主è¦Hadoopç10000å¤å°èç¹ãå¨æ们çç产ç¯å¢ä¸ï¼æ们已é对HDFSãHive çé群ä¸çæ°æ®é
ç½®äºä¸äºåºç¡çå®å
¨çç¥ï¼å¹¶å°äºå¹´åºä¹åä¸æå¼å
¥æ´å¤ççç¥ï¼ä»¥ç¡®ä¿éè¦æ°æ®çç»å¯¹å®å
¨ãç®åï¼Eagleççç¥æ¶µçå¤ç§æ¨�
�å¼ï¼å
æ¬ä»è®¿é®æ¨¡å¼ãé¢ç¹è®¿é®æ°æ®éï¼é¢å®ä¹æ¥è¯¢ç±»åãHive 表ååãHBase 表以ååºäºæºå¨å¦ä¹ 模åçæçç¨æ·Profileç¸å
³çææçç¥çãåæ¶ï¼æ们ä¹æ广æ³ççç¥æ¥é²æ¢æ°æ®ç丢失ãæ°æ®è¢«æ·è´å°ä¸å®å
¨å°ç¹ãæææ°æ®è¢«æªææåºå访é®çãEagleçç¥å®ä¹ä¸æ大ççµæ´»æ§åæ©å±æ§ä½¿å¾æ们æªæ¥å¯ä»¥è½»æå°ç»§ç»æ©å±æ´å¤æ´å¤æççç¥ä»¥æ¯ææ´å¤å¤å
åçç¨ä¾åºæ¯ã</p>
+
+<h2 id="section-1">åç»è®¡å</h2>
+<p>è¿å»ä¸¤å¹´ä¸ï¼å¨eBay é¤äºè¢«ç¨äºæ°æ®è¡ä¸ºçæ§ä»¥å¤ï¼Eagle æ ¸å¿æ¡æ¶è¿è¢«å¹¿æ³ç¨äºçæ§èç¹å¥åº·ç¶åµãHadoopåºç¨æ§è½ææ ãHadoop æ ¸å¿æå¡ä»¥åæ´ä¸ªHadoopé群çå¥åº·ç¶åµç诸å¤é¢åãæ们è¿å»ºç«ä¸ç³»åçèªå¨åæºå¶ï¼ä¾å¦èç¹ä¿®å¤çï¼å¸®å©æ们平å°é¨é¨æ大å¾èçäºæ们人工å³åï¼å¹¶ææå°æåäºæ´ä¸ªé群èµæºå°å©ç¨çã</p>
+
+<p>以ä¸æ¯æ们ç®åæ£å¨å¼åä¸å°ä¸äºç¹æ§ï¼</p>
+
+<ul>
+ <li>æ©å±æºå¨å¦ä¹ 模å对HiveåHBaseæ¯æ</li>
+ <li>æä¾é«åº¦å¯æ©å±çAPIï¼ä»¥æ¹ä¾¿éç®åä¸ç广æ³ä½¿ç¨çå
¶ä»çæ§é¢è¦å¹³å°æè
å·¥å
·ï¼å¦GangliaåNagiosçï¼åæ¶æ¯ææææ°æ®ç导å
¥ï¼å¦ä¸Dataguise éæçã</li>
+ <li>æ¤å¤ï¼æ们æ£å¨ç§¯ææ´çå
¶ä»Hadoop é群çæ§æ¨¡åï¼ææå¨åç»åå¸ä¸å¼æºç»ç¤¾åºï¼ä¾å¦
+ <ul>
+ <li>HBase çæ§</li>
+ <li>Hadoop ä½ä¸æ§è½çæ§</li>
+ <li>Hadoop èç¹çæ§</li>
+ </ul>
+ </li>
+</ul>
+
+<h2 id="section-2">å
³äºä½è
</h2>
+<p><a href="https://github.com/haoch">é浩</a>ï¼Apache Eagle Committer å PMC æåï¼eBay åæå¹³å°åºç¡æ¶æé¨é¨é«çº§è½¯ä»¶å·¥ç¨å¸ï¼è´è´£Eagleç产å设计ãææ¯æ¶æãæ ¸å¿å®ç°ä»¥åå¼æºç¤¾åºæ¨å¹¿çã</p>
+
+<p>æ谢以ä¸æ¥èªApache Eagle社åºåeBayå
¬å¸çèåä½è
们对æ¬æçè´¡ç®ï¼</p>
+
+<ul>
+ <li><a href="https://github.com/yonzhang">å¼ å</a>ï¼Apache Eagle CommitteråPMCï¼eBay èµæ·±æ¶æå¸</li>
+ <li><a href="https://github.com/sunlibin">åç«æ</a>ï¼Apache Eagle CommitteråPMCï¼eBay 软件工ç¨å¸</li>
+ <li><a href="https://github.com/zombiej">èåéº</a>ï¼Apache Eagle CommitteråPMCï¼eBay 软件工ç¨å¸</li>
+ <li><a href="https://github.com/qingwen220">èµµæ´é¯</a>ï¼Apache Eagle CommitteråPMCï¼eBay 软件工ç¨å¸</li>
+</ul>
+
+<p>eBay åæå¹³å°åºç¡æ¶æé¨ï¼Analytics Data Infrastructureï¼æ¯eBayçå
¨çæ°æ®ååæåºç¡æ¶æé¨é¨ï¼è´è´£eBayå¨æ°æ®åºãæ°æ®ä»åºãHadoopãåå¡æºè½ä»¥åæºå¨å¦ä¹ çå个æ°æ®å¹³å°å¼åã管çç,æ¯æeBayå
¨çåé¨é¨è¿ç¨é«ç«¯çæ°æ®åæ解å³æ¹æ¡ä½åºåæ¶ææçä½ä¸å³çï¼ä¸ºéå¸å
¨ççä¸å¡ç¨æ·æä¾æ°æ®åæ解å³æ¹æ¡ã</p>
+
+<h2 id="section-3">åèèµæ</h2>
+
+<ul>
+ <li>Apache Eagle ææ¡£ï¼<a href="http://goeagle.io">http://goeagle.io</a></li>
+ <li>Apache Eagle æºç ï¼<a href="http://github.com/ebay/eagle">http://github.com/ebay/eagle</a></li>
+ <li>Apache Eagle 项ç®ï¼<a href="http://incubator.apache.org/projects/eagle.html">http://incubator.apache.org/projects/eagle.html</a></li>
+</ul>
+
+<h2 id="section-4">å¼ç¨é¾æ¥</h2>
+<ul>
+ <li><strong>CSDN</strong>: <a href="http://www.csdn.net/article/2015-10-29/2826076">http://www.csdn.net/article/2015-10-29/2826076</a></li>
+ <li><strong>OSCHINA</strong>: <a href="http://www.oschina.net/news/67515/apache-eagle">http://www.oschina.net/news/67515/apache-eagle</a></li>
+ <li><strong>China Hadoop Summit</strong>: <a href="http://mp.weixin.qq.com/s?__biz=MzA4MTkyODIzMA==&mid=400298495&idx=1&sn=954031ba8065481c31a3464e2c8a26a5&scene=1&srcid=1102zgGQzedckCmNrfRwounA&uin=MjYyNzgwNDQwMA%3D%3D&key=04dce534b3b035efe14d53fcf6e7062a63179003551e59fad5cf8584703fcaa38779cc4c93cbf931c25f6b34cb2d7653&devicetype=iMac+MacBookPro11%2C3+OSX+OSX+10.10.5+build(14F1021)&version=11020201&lang=en&pass_ticket=TC%2Bod2ZeFnhmci%2Bi4%2BxTTVD6moUrNFX8RXppzoQSa%2BXO3C7evUDs6njeYbsYyCFD">http://mp.weixin.qq.com/s?â¦</a></li>
+ <li><strong>Apache Kylin</strong>: <a href="http://mp.weixin.qq.com/s?__biz=MzAwODE3ODU5MA==&mid=400287781&idx=1&sn=343b2b29a37f8ed53a7ecb0465faf515&scene=0&uin=MjYyNzgwNDQwMA%3D%3D&key=04dce534b3b035ef73f964362ac4c43d452ab1b208eb357c488dfcd7d69209e060cfe01e9b146752517d2096f6751370&devicetype=iMac+MacBookPro11%2C3+OSX+OSX+10.10.5+build(14F1021)&version=11020201&lang=en&pass_ticket=TC%2Bod2ZeFnhmci%2Bi4%2BxTTVD6moUrNFX8RXppzoQSa%2BXO3C7evUDs6njeYbsYyCFD">http://mp.weixin.qq.com/s?â¦</a></li>
+</ul>
+
+<hr />
+
+<p><em>æ¬ææ¥èªApache Eagleç½ç«ï¼<a href="http://goeagle.io">http://goeagle.io</a>ï¼è½¬è½½è¯·æ³¨æåºå¤åæ¥æºã</em></p>
+
+ </article>
+</div>
+
+ </div>
+ </div>
+ <!-- footer start -->
+<div class="footerwrapper">
+ <div class="container">
+ <div class="row">
+ <div class="col-md-12"><div style="margin-left:auto; margin-right:auto; text-align:center">Copyright © 2015 <a href="#">eBay</a> | 2065 Hamilton Ave, San Jose, CA </div></div>
+ </div>
+ </div>
+</div>
+<!-- footer end -->
+
+<!-- JavaScripts -->
+<script src="/js/jquery-1.11.1.min.js"></script>
+<script src="/js/jquery.singlePageNav.js"></script>
+<script src="/js/jquery.flexslider.js"></script>
+<script src="/js/modernizr.min.js"></script>
+<script src="/js/svg.js"></script>
+<script>
+ /************** FlexSlider *********************/
+ $('.flexslider').flexslider({
+ animation: "fade",
+ directionNav: false
+ });
+</script>
+ </body>
+</html>
\ No newline at end of file