http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/docs/user-profile-ml.html ---------------------------------------------------------------------- diff --git a/eagle-site/_site/docs/user-profile-ml.html b/eagle-site/_site/docs/user-profile-ml.html new file mode 100644 index 0000000..6a172d4 --- /dev/null +++ b/eagle-site/_site/docs/user-profile-ml.html @@ -0,0 +1,231 @@ +<!DOCTYPE html> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + + <title>Eagle - User Profile Machine Learning</title> + <meta name="description" content="Eagle - Analyze Big Data Platforms for Security and Performance"> + + <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> +<!-- header start --> +<div id="home_page"> + <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="headerimage"> + <div class="flexslider"> + <ul class="slides"> + <li><img src="/images/slider/4.jpg" alt="Slide 1"></li> + </ul> + </div> + </div> + <div class="particles" style="height:40%"> </div><!---particles--> + <div class="slider-caption" style="top:80px;"> + <div class="homewrapper"> + <div class="hometitle"> + <a href="/"> + <img src="/images/feather.png" height="80px"> + </a> + </div> + <div class="hometext"> + <h2>Analyze Big Data Platforms For Security and Performance</h2> + <div class="social-buttons"> + <a href="https://github.com/apache/eagle"><i class="fa fa-github"></i></a> + <a href="http://twitter.com/TheApacheEagle"><i class="fa fa-twitter"></i></a> + <a href="https://www.facebook.com/TheApacheEagle/"><i class="fa fa-facebook"></i></a> + <a href="#"><i class="fa fa-weixin"></i></a> + <!-- <a href="https://www.weibo.com/ApacheEagle/"><i class="fa fa-weibo"></i></a> --> + </div> + </div> + </div> + </div> +</div> +<!-- header end --> +<div class="container-fluid page-content"> + <div class="row"> + <div class="col-md-10 col-md-offset-1"> + <!-- sidebar --> + <div class="col-xs-6 col-sm-3" id="sidebar" role="navigation"> + <ul class="nav" id="adminnav"> + + <li class="heading">Getting Started</li> + + <li class="sidenavli "><a href="/docs/index.html" data-permalink="/docs/user-profile-ml.html" id="">Introduction</a></li> + + <li class="sidenavli "><a href="/docs/usecases.html" data-permalink="/docs/user-profile-ml.html" id="">Use Cases</a></li> + + <li class="sidenavli "><a href="/docs/terminology.html" data-permalink="/docs/user-profile-ml.html" id="">Terminology</a></li> + + <li class="sidenavli "><a href="/docs/ecosystem.html" data-permalink="/docs/user-profile-ml.html" id="">Ecosystem</a></li> + + <li class="sidenavli "><a href="/docs/community.html" data-permalink="/docs/user-profile-ml.html" id="">Community</a></li> + + <li class="sidenavli "><a href="/docs/FAQ.html" data-permalink="/docs/user-profile-ml.html" id="">FAQ</a></li> + + <li class="divider"></li> + + <li class="heading">Documentations</li> + + <li class="sidenavli "><a href="/docs/latest/" data-permalink="/docs/user-profile-ml.html" id="">Latest version (v0.5.0)</a></li> + + <li class="divider"></li> + + <li class="heading">Download</li> + + <li class="sidenavli "><a href="/docs/download-latest.html" data-permalink="/docs/user-profile-ml.html" id="">Latest version (v0.5.0)</a></li> + + <li class="sidenavli "><a href="/docs/download.html" data-permalink="/docs/user-profile-ml.html" id="">Archived</a></li> + + <li class="divider"></li> + + <li class="heading">Supplement</li> + + <li class="sidenavli "><a href="/docs/security.html" data-permalink="/docs/user-profile-ml.html" id="">Security</a></li> + + <li class="divider"></li> + + <li class="sidenavli"> + <a href="mailto:[email protected]" target="_blank">Need Help?</a> + </li> + </ul> + </div> + <div class="col-xs-6 col-sm-9 page-main-content" style="margin-left: -15px" id="loadcontent"> + <h1 class="page-header" style="margin-top: 0px">User Profile Machine Learning</h1> + <p>Apache Eagle (called Eagle in the following) provides capabilities to define user activity patterns or user profiles for Apache Hadoop users based on the user behavior in the platform. The idea is to provide anomaly detection capability without setting hard thresholds in the system. The user profiles generated by our system are modeled using machine-learning algorithms and used for detection of anomalous user activities, where usersâ activity pattern differs from their pattern history. Currently Eagle uses two algorithms for anomaly detection: Eigen-Value Decomposition and Density Estimation. The algorithms read data from HDFS audit logs, slice and dice data, and generate models for each user in the system. Once models are generated, Eagle uses the Apache Storm framework for near-real-time anomaly detection to determine if current user activities are suspicious or not with respect to their model. The block diagram below shows the current pipeline for user profile traini ng and online detection.</p> + +<p><img src="/images/docs/userprofile-arch.png" alt="" /></p> + +<p>Eagle online anomaly detection uses the Eagle policy framework, and the user profile is defined as one of the policies in the system. The user profile policy is evaluated by a machine-learning evaluator extended from the Eagle policy evaluator. Policy definition includes the features that are needed for anomaly detection (same as the ones used for training purposes).</p> + +<p>A scheduler runs a Apache Spark based offline training program (to generate user profiles or models) at a configurable time interval; currently, the training program generates new models once every month.</p> + +<p>The following are some details on the algorithms.</p> + +<ul> + <li><strong>Density Estimation</strong>: In this algorithm, the idea is to evaluate, for each user, a probability density function from the observed training data sample. We mean-normalize a training dataset for each feature. Normalization allows datasets to be on the same scale. In our probability density estimation, we use a Gaussian distribution function as the method for computing probability density. Features are conditionally independent of one another; therefore, the final Gaussian probability density can be computed by factorizing each featureâs probability density. During the online detection phase, we compute the probability of a userâs activity. If the probability of the user performing the activity is below threshold (determined from the training program, using a method called Mathews Correlation Coefficient), we signal anomaly alerts.</li> + <li><strong>Eigen-Value Decomposition</strong>: Our goal in user profile generation is to find interesting behavioral patterns for users. One way to achieve that goal is to consider a combination of features and see how each one influences the others. When the data volume is large, which is generally the case for us, abnormal patterns among features may go unnoticed due to the huge number of normal patterns. As normal behavioral patterns can lie within very low-dimensional subspace, we can potentially reduce the dimension of the dataset to better understand the user behavior pattern. This method also reduces noise, if any, in the training dataset. Based on the amount of variance of the data we maintain for a user, which is usually 95% for our case, we seek to find the number of principal components k that represents 95% variance. We consider first k principal components as normal subspace for the user. The remaining (n-k) principal components are considered as abnormal subspace.</ li> +</ul> + +<p>During online anomaly detection, if the user behavior lies near normal subspace, we consider the behavior to be normal. On the other hand, if the user behavior lies near the abnormal subspace, we raise an alarm as we believe usual user behavior should generally fall within normal subspace. We use the Euclidian distance method to compute whether a userâs current activity is near normal or abnormal subspace.</p> + +<p><img src="/images/docs/userprofile-model.png" alt="" /></p> + + </div><!--end of loadcontent--> + </div> + <!--end of centered content--> + </div> +</div> +<!--end of container--> + +<!-- 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;font-size: 12px"> +<div> +</div> +<div> +<a href="http://www.apache.org"> +<img id="asf-logo" alt="Apache Software Foundation" src="/images/apache-logo-small.gif"> +</a> +</div> +<div> +Copyright © 2015 <a href="http://www.apache.org">The Apache Software Foundation</a>, Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>. +</div> +<div> +Apache Eagle, Eagle, Apache Hadoop, Hadoop, Apache HBase, HBase, Apache Hive, Hive, Apache Ambari, Ambari, Apache Spark, Spark, Apache Kafka, Kafka, Apache Storm, Storm, Apache Maven, Maven, Apache Tomcat, Tomcat, Apache Derby, Derby, Apache Cassandra, Cassandra, Apache ZooKeeper, ZooKeeper, Apache, the Apache feather logo, and the Apache project logo are trademarks of The Apache Software Foundation. +</div> + </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> + +<script> + /************** FlexSlider *********************/ + $('.flexslider').flexslider({ + animation: "fade", + directionNav: false + }); +</script> +</body> +</html>
http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/feed.xml ---------------------------------------------------------------------- diff --git a/eagle-site/_site/feed.xml b/eagle-site/_site/feed.xml new file mode 100644 index 0000000..67bdd11 --- /dev/null +++ b/eagle-site/_site/feed.xml @@ -0,0 +1,243 @@ +<?xml version="1.0" encoding="UTF-8"?> +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> + <channel> + <title>Eagle</title> + <description>Eagle - Analyze Big Data Platforms for Security and Performance</description> + <link>http://goeagle.io/</link> + <atom:link href="http://goeagle.io/feed.xml" rel="self" type="application/rss+xml"/> + <pubDate>Mon, 03 Apr 2017 19:17:59 +0800</pubDate> + <lastBuildDate>Mon, 03 Apr 2017 19:17:59 +0800</lastBuildDate> + <generator>Jekyll v2.5.3</generator> + + <item> + <title>Apache Eagle æ£å¼åå¸ï¼åå¸å¼å®æ¶Hadoopæ°æ®å®å ¨æ¹æ¡</title> + <description><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&lt;? extends PolicyEvaluator&gt; getPolicyEvaluator(); // get policy evaluator implementation + public List&lt;Module&gt; 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 &gt;= 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}&amp;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/apache/incubator-eagle">http://github.com/apache/incubator-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==&amp;mid=400298495&amp;idx=1&amp;sn=954031ba8065481c31a3464e2c8a26a5&amp;scene=1&amp;srcid=1102zgGQzedckCmNrfRwounA&amp;uin=MjYyNzgwNDQwMA%3D%3D&amp;key=04dce534b3b035efe14d53fcf6e7062a63179003551e59fad5cf8584703fcaa38779cc4c93cbf931c25f6b34cb2d7653&amp;devicetype=iMac+MacBookPro11%2C3+OSX+OSX+10.10.5+build(14F1021)&amp;version=11020201&amp;lang=en&amp;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==&amp;mid=400287781&amp;idx=1&amp;sn=343b2b29a37f8ed53a7ecb0465faf515&amp;scene=0&amp;uin=MjYyNzgwNDQwMA%3D%3D&amp;key=04dce534b3b035ef73f964362ac4c43d452ab1b208eb357c488dfcd7d69209e060cfe01e9b146752517d2096f6751370&amp;devicetype=iMac+MacBookPro11%2C3+OSX+OSX+10.10.5+build(14F1021)&amp;version=11020201&amp;lang=en&amp;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> +</description> + <pubDate>Tue, 27 Oct 2015 03:24:33 +0800</pubDate> + <link>http://goeagle.io/post/2015/10/27/apache-eagle-announce-cn.html</link> + <guid isPermaLink="true">http://goeagle.io/post/2015/10/27/apache-eagle-announce-cn.html</guid> + + + <category>post</category> + + </item> + + </channel> +</rss> http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/fonts/FontAwesome.otf ---------------------------------------------------------------------- diff --git a/eagle-site/_site/fonts/FontAwesome.otf b/eagle-site/_site/fonts/FontAwesome.otf new file mode 100644 index 0000000..681bdd4 Binary files /dev/null and b/eagle-site/_site/fonts/FontAwesome.otf differ http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/fonts/flexslider-icon.eot ---------------------------------------------------------------------- diff --git a/eagle-site/_site/fonts/flexslider-icon.eot b/eagle-site/_site/fonts/flexslider-icon.eot new file mode 100755 index 0000000..97c4196 Binary files /dev/null and b/eagle-site/_site/fonts/flexslider-icon.eot differ http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/fonts/flexslider-icon.svg ---------------------------------------------------------------------- diff --git a/eagle-site/_site/fonts/flexslider-icon.svg b/eagle-site/_site/fonts/flexslider-icon.svg new file mode 100755 index 0000000..89fd1ab --- /dev/null +++ b/eagle-site/_site/fonts/flexslider-icon.svg @@ -0,0 +1,19 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata> +This is a custom SVG font generated by IcoMoon. +<iconset grid="14"></iconset> +</metadata> +<defs> +<font id="flexslider-icon" horiz-adv-x="448" > +<font-face units-per-em="448" ascent="384" descent="-64" /> +<missing-glyph horiz-adv-x="448" /> +<glyph unicode="" d="M 185.50-9.25l-163.00,162.75q-9.25,9.25 -9.25,22.625t 9.25,22.625l 163.00,162.75q 9.25,9.25 22.625,9.25t 22.625-9.25l 18.75-18.75q 9.25-9.25 9.25-22.625t-9.25-22.625l-121.50-121.50l 121.50-121.25q 9.25-9.50 9.25-22.75t-9.25-22.50l-18.75-18.75q-9.25-9.25 -22.625-9.25t-22.625,9.25z" horiz-adv-x="288" /> +<glyph unicode="" d="M 274.75,176.00q0.00-13.00 -9.25-22.75l-163.00-162.75q-9.25-9.25 -22.50-9.25t-22.50,9.25l-19.00,18.75q-9.25,9.75 -9.25,22.75q0.00,13.25 9.25,22.50l 121.50,121.50l-121.50,121.25q-9.25,9.75 -9.25,22.75q0.00,13.25 9.25,22.50l 19.00,18.75q 9.00,9.50 22.50,9.50t 22.50-9.50l 163.00-162.75q 9.25-9.25 9.25-22.50z" horiz-adv-x="288" /> +<glyph unicode="" d="M 346.00,152.25l-332.00-184.50q-5.75-3.25 -9.875-0.75t-4.125,9.00l0.00,368.00 q0.00,6.50 4.125,9.00t 9.875-0.75l 332.00-184.50q 5.75-3.25 5.75-7.75t-5.75-7.75z" horiz-adv-x="352" /> +<glyph unicode="" d="M 384.00,336.00l0.00-352.00 q0.00-6.50 -4.75-11.25t-11.25-4.75l-128.00,0.00 q-6.50,0.00 -11.25,4.75t-4.75,11.25l0.00,352.00 q0.00,6.50 4.75,11.25t 11.25,4.75l 128.00,0.00 q 6.50,0.00 11.25-4.75t 4.75-11.25zM 160.00,336.00l0.00-352.00 q0.00-6.50 -4.75-11.25t-11.25-4.75l-128.00,0.00 q-6.50,0.00 -11.25,4.75t-4.75,11.25l0.00,352.00 q0.00,6.50 4.75,11.25t 11.25,4.75l 128.00,0.00 q 6.50,0.00 11.25-4.75t 4.75-11.25z" horiz-adv-x="384" /> +<glyph unicode="" d="M 402.75,208.00q0.00-13.25 -9.25-22.50l-162.75-162.75q-9.50-9.50 -22.75-9.50q-13.50,0.00 -22.50,9.50l-162.75,162.75q-9.50,9.00 -9.50,22.50q0.00,13.25 9.50,22.75l 18.50,18.75q 9.75,9.25 22.75,9.25q 13.25,0.00 22.50-9.25l 121.50-121.50l 121.50,121.50q 9.25,9.25 22.50,9.25q 13.00,0.00 22.75-9.25l 18.75-18.75q 9.25-9.75 9.25-22.75z" horiz-adv-x="416" /> +<glyph unicode=" " horiz-adv-x="224" /> +<glyph class="hidden" unicode="" d="M0,384L 448 -64L0 -64 z" horiz-adv-x="0" /> +</font></defs></svg> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/fonts/flexslider-icon.ttf ---------------------------------------------------------------------- diff --git a/eagle-site/_site/fonts/flexslider-icon.ttf b/eagle-site/_site/fonts/flexslider-icon.ttf new file mode 100755 index 0000000..0543298 Binary files /dev/null and b/eagle-site/_site/fonts/flexslider-icon.ttf differ http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/fonts/flexslider-icon.woff ---------------------------------------------------------------------- diff --git a/eagle-site/_site/fonts/flexslider-icon.woff b/eagle-site/_site/fonts/flexslider-icon.woff new file mode 100755 index 0000000..10c4eeb Binary files /dev/null and b/eagle-site/_site/fonts/flexslider-icon.woff differ http://git-wip-us.apache.org/repos/asf/eagle/blob/0ecb7c1c/eagle-site/_site/fonts/fontawesome-webfont.eot ---------------------------------------------------------------------- diff --git a/eagle-site/_site/fonts/fontawesome-webfont.eot b/eagle-site/_site/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..a30335d Binary files /dev/null and b/eagle-site/_site/fonts/fontawesome-webfont.eot differ
