SlideShare ist ein Scribd-Unternehmen logo
1 von 106
Map Reduce  王耀聰 陳威宇 [email_address] [email_address] 教育訓練課程
Computing with big datasets   is a fundamentally different challenge than doing “big compute” over a small dataset
平行分散式運算 ,[object Object],[object Object],[object Object],[object Object],[object Object]
分散大量資料:  Slow and Tricky ,[object Object],[object Object],[object Object],[object Object]
數字會說話 ,[object Object],[object Object],[object Object],[object Object],[object Object]
所以 … ,[object Object],[object Object],[object Object],[object Object]
MapReduce  的動機 ,[object Object],[object Object],[object Object],[object Object],[object Object]
How MapReduce is Structured ,[object Object],[object Object],[object Object]
By Using Map / Reduce ,[object Object]
Hadoop MapReduse Hadoop MapReduce  是一套儲存並處理 petabytes  等級資訊的雲端運算技術
Hadoop  提供 ,[object Object],[object Object],[object Object],[object Object]
Hadoop Applications (1) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Hadoop Applications (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Hadoop Applications (4) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Hadoop Applications (5) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Hadoop Applications (6) ,[object Object],[object Object],[object Object],[object Object],[object Object]
MapReduce Conclusions ,[object Object],[object Object],[object Object],[object Object]
Map Reduce  原理說明 王耀聰 陳威宇 [email_address] [email_address]
Algorithms  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Divide and Conquer  範例四: 眼前有五階樓梯,每次可踏上一階或踏上兩階,那麼爬完五階共有幾種踏法? Ex :  (1,1,1,1,1)  or  (1,2,1,1) 範例一:十分逼近法 範例二:方格法求面積 範例三:鋪滿  L  形磁磚
Programming Model ,[object Object],[object Object],[object Object]
Map ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],let map(k, v) = Emit(k.toUpper(), v.toUpper()) let map(k, v) = foreach char c in v: emit(k, c) ,[object Object],[object Object]
Reduce ,[object Object],let reduce(k, vals) = sum = 0 foreach int v in vals: sum += v emit(k, sum) (“A”, [42, 100, 312])    (“A”, 454) (“B”, [12, 6, -2])     (“B”, 16)
MapReduce   運作流程 part0 map map map reduce reduce part1 input HDFS sort/copy merge output HDFS JobTracker 跟 NameNode 取得需要運算的 blocks JobTracker 選數個 TaskTracker 來作 Map 運算,產生些中間檔案 JobTracker 將中間檔案整合排序後,複製到需要的 TaskTracker 去 JobTracker 派遣 TaskTracker   作 reduce reduce 完後通知 JobTracker 與 Namenode 以產生 output split 0 split 1 split 2 split 3 split 4
MapReduce  圖解 Map  數量依輸入檔案的 block 數為主, Reduce 數量由系統決定 Sort  的規則為  key 的字母順序
MapReduce in Parallel
範例 JobTracker 先選了三個 Tracker 做 map I am a tiger, you are also a tiger a,2 also,1  am,1 are,1  I,1 tiger,2  you,1 reduce reduce map map map Map 結束後, hadoop 進行中間資料的整理與排序 JobTracker 再選兩個 TaskTracker 作 reduce I,1  am,1 a,1 tiger,1 you,1 are,1 also,1 a, 1 tiger,1 a,2 also,1 am,1  are,1 I, 1  tiger,2  you,1 a, 1 a,1 also,1  am,1 are,1 I,1  tiger,1 tiger,1 you,1
Console  端 編譯與執行 王耀聰 陳威宇 [email_address] [email_address]
Java  之編譯與執行 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
WordCount1  練習  (I) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
WordCount1  練習  (II) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
WordCount1  練習 (III)
WordCount1  練習 (IV)
BTW … ,[object Object],[object Object],[object Object],[object Object]
透過 Eclipse 開發 王耀聰 陳威宇 [email_address] [email_address]
Requirements ,[object Object],[object Object],[object Object],[object Object]
安裝 Hadoop Eclipse Plugin ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
1  打開 Eclipse,  設定專案目錄
2.  使用 Hadoop mode 視野 Window     Open Perspective    Other 若有看到 MapReduce 的大象圖示代表 Hadoop Eclipse plugin  有安裝成功, 若沒有請檢查是否有安之裝正確
3.  使用 Hadoop 視野,主畫面將出現三個功能
4. 建立一個 Hadoop 專案 開出新專案 選擇 Map/Reduce  專案
4-1.  輸入專案名稱並點選設定 Hadoop 安裝路徑 由此設定 Hadoop 的安裝路徑 由此設定專案名稱
4-1-1.  填入 Hadoop 安裝路徑 於此輸入您 Hadoop 的安裝路徑,之後選擇  ok
5.  設定 Hadoop 專案細節 1.  右鍵點選 2.  選擇 Properties
5-1.  設定原始碼與文件路徑 以下請輸入正確的 Hadoop 原始碼與 API 文件檔路徑,如 source  : /opt/hadoop/src/core/ javadoc : file:/opt/hadoop/docs/api/ 選擇  Java Build Path
5-1-1.  完成圖
5-2.  設定 java doc 的完整路徑 輸入 java 6  的 API 正確路徑,輸入完後可選擇 validate 以驗證是否正確 選擇  Javadoc Location
6.  連結 Hadoop Server 與 Eclipse 點選此圖示
6-1 .  設定你要連接的 Hadoop 主機 輸入主機位址或 domain name MapReduce  監聽的 Port  ( 設定於 mapred-site.xml) HDFS 監聽的 Port  ( 設定於 core-site.xml) 你在此 Hadoop Server 上的 Username 任意填一個名稱
6-2  若正確設定則可得到以下畫面 HDFS 的資訊,可直接於此操作檢視、新增、上傳、刪除等命令 若有 Job 運作,可於此視窗檢視
7.  新增一個 Hadoop 程式 首先先建立一個 WordCount 程式,其他欄位任意
7.1  於程式窗格內輸入程式碼 此區為程式窗格
7.2  補充:若之前 doc 部份設定正確,則滑鼠移至程式碼可取得 API 完整說明
8.  運作 於欲運算的 程式碼 處點選右鍵     Run As      Run on Hadoop
8-1  選擇之前設定好所要運算的主機
8.2  運算資訊出現於 Eclipse  右下方的 Console  視窗 放大
8.3  剛剛運算的結果出現如下圖 放大
Conclusions ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Map Reduce  程式架構 王耀聰 陳威宇 [email_address] [email_address]
<Key, Value> Pair Row Data Map Reduce Reduce Input Output key values key1 val key2 val key1 val … … Map Input Output Select Key key1 val val … . val
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Program Prototype (v 0.20) Map  程式碼 Reduce  程式碼 其他的設定參數程式碼 Map  區 Reduce  區 設定區
Class Mapper (v 0.20) class  MyMap   extends    Mapper <   ,  ,  ,  >  { //  全域變數區 public void  map  (  key,  value ,    Context  context  ) throws  IOException,InterruptedException   { //  區域變數與程式邏輯區 context.write (  NewKey, NewValue ); } } 1 2 3 4 5 6 7 8 9 INPUT  KEY Class OUTPUT VALUE Class OUTPUT KEY Class INPUT VALUE Class INPUT VALUE Class INPUT  KEY Class import org.apache.hadoop.mapreduce.Mapper;
Class Reducer (v 0.20) class  MyRed   extends    Reducer <  ,  ,  ,  >  { //  全域變數區 public void  reduce  (  key, Iterable<  > values ,  Context  context )  throws IOException, InterruptedException  { //  區域變數與程式邏輯區 context. write(  NewKey, NewValue ); } } 1 2 3 4 5 6 7 8 9 INPUT  KEY Class OUTPUT VALUE Class OUTPUT KEY Class INPUT VALUE Class INPUT  KEY Class INPUT VALUE Class import org.apache.hadoop.mapreduce.Reducer;
其他常用的設定參數 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Class Combiner ,[object Object],[object Object],[object Object],[object Object],[object Object]
範例一  (1) - mapper ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
範例一  (2) - reducer ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
範例一  (3) - main ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
程式設計一 ,[object Object]
傳送檔案至 HDFS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],//  將檔案從 local 上傳到  hdfs , src  為  local  的來源 , dst  為  hdfs  的目的端
從 HDFS 取回檔案 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],//  將檔案從 hdfs 下載回 local, src  為  hdfs 的來源 , dst  為  local  的目的端
檢查與刪除檔案 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],// checkAndDelete 函式,檢查是否存在該資料夾,若有則刪除之
程式設計二 ,[object Object]
範例二  (1) HelloHadoopV2 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
範例二  (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],FileInputFormat.addInputPath (job, new Path(&quot;input&quot;)); FileOutputFormat.setOutputPath (job, new Path(&quot;output-hh2&quot;)); //  呼叫 checkAndDelete 函式, //  檢查是否存在該資料夾,若有則刪除之 CheckAndDelete.checkAndDelete(&quot;output-hh2&quot;, conf); boolean status = job.waitForCompletion(true); if (status) { System.err.println(&quot;Integrate Alert Job Finished !&quot;); } else { System.err.println(&quot;Integrate Alert Job Failed !&quot;); System.exit(1); } } }
範例二  (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
範例三  (1) HelloHadoopV3  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
範例三  (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Job job = new Job(conf, &quot;Hadoop Hello World&quot;); job.setJarByClass(HelloHadoopV3.class); //  再利用上個範例的 map  與  reduce job.setMapperClass(HelloMapperV2.class); job.setCombinerClass(HelloReducerV2.class); job.setReducerClass(HelloReducerV2.class); //  設定 map reduce  的 key value 輸出型態 job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class);
範例三  (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],//  把 hdfs 的結果取下 GetFromHdfs.getFromHdfs(hdfs_output, args[1], conf); boolean status = job.waitForCompletion(true); //  計算時間 if (status) { System.err.println(&quot;Integrate Alert Job Finished !&quot;); long time = System.nanoTime() - start; System.err.println(time * (1E-9) + &quot; secs.&quot;); } else { System.err.println(&quot;Integrate Alert Job Failed !&quot;); System.exit(1); } }  }
範例四  (1) public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println(&quot;Usage: hadoop jar WordCount.jar <input> <output>&quot;); System.exit(2); } Job job = new Job(conf, &quot;Word Count&quot;); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); CheckAndDelete.checkAndDelete(args[1], conf); System.exit(job.waitForCompletion(true) ? 0 : 1); }
範例四  (2) class  TokenizerMapper   extends MapReduceBase   implements Mapper<LongWritable, Text, Text, IntWritable>  { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(  LongWritable key, Text value, Context context ) throws IOException  ,  InterruptedException  { String line = ((Text) value).toString(); StringTokenizer itr = new StringTokenizer(line); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); }}} 1 2 3 4 5 6 7 8 9 < no , 1 > < news , 1 > < is , 1 > < a, 1 > < good , 1 > < news, 1 > <word,one> Input key Input value ………………… . ………………… No news is a good news. ………………… /user/hadooper/input/a.txt itr line no news news is good a itr itr itr itr itr itr
範例四  (3) class  IntSumReducer   extends  Reducer<  Text ,  IntWritable ,  Text, IntWritable >  { IntWritable  result  = new IntWritable(); public void reduce(  Text key ,  Iterable   < IntWritable >  values ,  Context context ) throws IOException ,  InterruptedException { int sum = 0; for (  IntWritable   val  :  values  )  sum +=  val .get();  result.set(sum); context .write (  key, result ); }} 1 2  3 4 5 6 7 8 < news , 2 > <key,SunValue> <word,one> news 1 1 < a, 1 > < good, 1 > < is, 1 > < news, 1  1 > < no, 1 > for ( int i ; i < values.length ; i ++ ){   sum += values[i].get()  }
範例五  (1) WordCountV2 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object], .  ,  !
範例五  (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],private void parseSkipFile(Path patternsFile) { try { BufferedReader fis = new BufferedReader(new FileReader( patternsFile.toString())); String pattern = null; while ((pattern = fis.readLine()) != null) { patternsToSkip.add(pattern);  } } catch (IOException ioe) { System.err.println(&quot;Caught exception while parsing the cached file '&quot;+ patternsFile + &quot;' : &quot; + tringUtils.stringifyException(ioe));  }} public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = (caseSensitive) ? value.toString() : value.toString() .toLowerCase(); for (String pattern : patternsToSkip)  line = line.replaceAll(pattern, &quot;&quot;); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); reporter.incrCounter(Counters.INPUT_WORDS, 1); }
範例五  (3) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],conf.setMapperClass(Map.class); conf.setCombinerClass(Reduce.class); conf.setReducerClass(Reduce.class); conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); List<String> other_args = new ArrayList<String>(); for (int i = 0; i < args.length; ++i) { if (&quot;-skip&quot;.equals(args[i])) { DistributedCache .addCacheFile(new Path(args[++i]).toUri(), conf); conf.setBoolean(&quot;wordcount.skip.patterns&quot;, true); } else {other_args.add(args[i]); }  } FileInputFormat.setInputPaths(conf, new Path(other_args.get(0))); FileOutputFormat.setOutputPath(conf, new Path(other_args.get(1))); CheckAndDelete.checkAndDelete(other_args.get(1), conf); JobClient.runJob(conf); return 0;  } public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new WordCountV2(), args); System.exit(res); }}
範例六  (1) WordIndex ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
範例六  (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],static public class wordindexR  extends Reducer<Text, Text, Text, Text> { public void reduce(Text key, Iterable<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException { String v = &quot;&quot;; StringBuilder ret = new StringBuilder(&quot;&quot;); for (Text val : values) { v += val.toString().trim(); if (v.length() > 0) ret.append(v + &quot;&quot;); } output.collect((Text) key, new Text(ret.toString())); }  }
範例六  (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); job.setMapperClass(wordindexM.class); job.setReducerClass(wordindexR.class); job.setCombinerClass(wordindexR.class); FileInputFormat.setInputPaths(job, args[0]); CheckAndDelete.checkAndDelete(args[1], conf); FileOutputFormat.setOutputPath(job, new Path(args[1])); long start = System.nanoTime(); job.waitForCompletion(true); long time = System.nanoTime() - start; System.err.println(time * (1E-9) + &quot; secs.&quot;); }}
範例七  (1) TsmMenu ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
範例七  (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],try { pgd.addClass(&quot;HelloHadoop&quot;, HelloHadoop.class, &quot; Hadoop hello world&quot;); pgd.addClass(&quot;HelloHadoopV2&quot;, HelloHadoopV2.class, &quot; Hadoop hello world V2&quot;); pgd.addClass(&quot;HelloHadoopV3&quot;, HelloHadoopV3.class, &quot; Hadoop hello world V3&quot;); pgd.addClass(&quot;WordCount&quot;, WordCount.class, &quot; word count.&quot;); pgd.addClass(&quot;WordCountV2&quot;, WordCountV2.class, &quot; word count V2.&quot;); pgd.addClass(&quot;WordIndex&quot;, WordIndex.class, &quot;invert each word in line&quot;); pgd.driver(argv); // Success exitCode = 0; System.exit(exitCode); } catch (Throwable e) { e.printStackTrace(); }}}}
Conclusions ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Program Prototype (v 0.18) Map  程式碼 Reduce  程式碼 其他的設定參數程式碼 Map  區 Reduce  區 設定區 補充
Class Mapper (v0.18) 補充 class  MyMap   extends MapReduceBase  implements Mapper <   ,  ,  ,  >  { //  全域變數區 public void  map  (  key,  value ,  OutputCollector<  ,  >  output ,    Reporter  reporter)  throws IOException  { //  區域變數與程式邏輯區 output .collect(  NewKey, NewValue ); } } 1 2 3 4 5 6 7 8 9 INPUT  KEY INPUT VALUE OUTPUT VALUE OUTPUT KEY INPUT  KEY INPUT VALUE OUTPUT VALUE OUTPUT KEY import org.apache.hadoop.mapred.*;
Class Reducer (v0.18) 補充 class  MyRed   extends MapReduceBase  implements Reducer <  ,  ,  ,  >  { //  全域變數區 public void  reduce  (  key, Iterator<  > values ,  OutputCollector<  ,  >  output ,    Reporter  reporter)  throws IOException  { //  區域變數與程式邏輯區 output .collect(  NewKey, NewValue ); } } 1 2 3 4 5 6 7 8 9 INPUT  KEY INPUT VALUE OUTPUT VALUE OUTPUT KEY INPUT  KEY INPUT VALUE OUTPUT VALUE OUTPUT KEY import org.apache.hadoop.mapred.*;
News! Google  獲得 MapReduce 專利 ,[object Object],[object Object],[object Object],[object Object],[object Object],2010/01/20 ~
Map Reduce  專案分享 王耀聰 陳威宇 [email_address] [email_address]
用 Hadoop  打造  Location Plus ,[object Object],[object Object],[object Object],[object Object],[object Object],2009/11/17
Yahoo  使用 Hadoop 平台來發現發送垃圾郵件的殭屍網絡 ( 1 ) 垃圾郵件網站 ( 2 ) 垃圾郵件 ( 3 ) 垃圾郵件軟體( 4 ) 被感染的電腦 ( 5 ) 病毒或木馬 ( 6 ) 信件伺服器 ( 7 ) 用戶  ( 8 ) 網路流量
案例:警訊整合系統 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[**] [1:538:15] NETBIOS SMB IPC$ unicode share access [**] [Classification: Generic Protocol Command Decode] [Priority: 3]  09/04-17:53:56.363811 168.150.177.165:1051 -> 168.150.177.166:139 TCP TTL:128 TOS:0x0 ID:4000 IpLen:20 DgmLen:138 DF ***AP*** Seq: 0x2E589B8  Ack: 0x642D47F9  Win: 0x4241  TcpLen: 20 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3]  09/04-17:53:56.385573 168.150.177.164:1032 -> 239.255.255.250:1900 UDP TTL:1 TOS:0x0 ID:80 IpLen:20 DgmLen:161 Len: 133 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3]  09/04-17:53:56.386910 168.150.177.164:1032 -> 239.255.255.250:1900 UDP TTL:1 TOS:0x0 ID:82 IpLen:20 DgmLen:161 Len: 133 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3]  09/04-17:53:56.388244 168.150.177.164:1032 -> 239.255.255.250:1900 UDP TTL:1 TOS:0x0 ID:84 IpLen:20 DgmLen:161 Len: 133 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3]  09/04-17:53:56.417045 168.150.177.164:45461 -> 168.150.177.1:1900 UDP TTL:1 TOS:0x0 ID:105 IpLen:20 DgmLen:161 Len: 133 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3]  09/04-17:53:56.420759 168.150.177.164:45461 -> 168.150.177.1:1900 UDP TTL:1 TOS:0x0 ID:117 IpLen:20 DgmLen:160 Len: 132 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3]  09/04-17:53:56.422095 168.150.177.164:45461 -> 168.150.177.1:1900 UDP TTL:1 TOS:0x0 ID:118 IpLen:20 DgmLen:161 Len: 133 [**] [1:2351:10] NETBIOS DCERPC ISystemActivator path overflow attempt little endian unicode [**] [Classification: Attempted Administrator Privilege Gain] [Priority: 1]  09/04-17:53:56.442445 198.8.16.1:10179 -> 168.150.177.164:135 TCP TTL:105 TOS:0x0 ID:49809 IpLen:20 DgmLen:1420 DF ***A**** Seq: 0xF9589BBF  Ack: 0x82CCF5B7  Win: 0xFFFF  TcpLen: 20 [Xref => http://www.microsoft.com/technet/security/bulletin/MS03-026.mspx][Xref => http://cgi.nessus.org/plugins/dump.php3?id=11808][Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2003-0352][Xref => http://www.securityfocus.com/bid/8205] 輸入資料
輸出資料 Generate dot graph format
系統分析 前處理 Map Reduce 運算 後續處理 網頁介面 輸入 資料 瀏覽 結果 報告
Alert Merge Example Key Values Host_1 Trojan Sip1,Sip2 80,443 4077,5002 tcp T1,T2,T3 Host_2 Trojan Sip1 443 5002 tcp T4 Host_3 D.D.O.S. Sip3,Sip4,Sip5 ,Sip6 53 6007,6008 tcp, udp T5 Destination IP Attack Signature Source IP Destination Port Source Port Packet Protocol Timestamp Host_1 Trojan Sip1 80 4077 tcp T1 Host_1 Trojan Sip2 80 4077 tcp T2 Host_1 Trojan Sip1 443 5002 tcp T3 Host_2 Trojan Sip1 443 5002 tcp T4 Host_3 D.D.O.S Sip3 53 6007 udp T5 Host_3 D.D.O.S Sip4 53 6008 tcp T5 Host_3 D.D.O.S Sip5 53 6007 udp T5 Host_3 D.D.O.S Sip6 53 6008 tcp T5
程式流程圖 Source Regulation Integrate Alert Merge Extenstion Correlation Record Snort Logs Final  Report
結論 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
QUESTIONS & THANKS

Weitere ähnliche Inhalte

Was ist angesagt?

Apache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them AllApache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them AllMichael Mior
 
forestFloorパッケージを使ったrandomForestの感度分析
forestFloorパッケージを使ったrandomForestの感度分析forestFloorパッケージを使ったrandomForestの感度分析
forestFloorパッケージを使ったrandomForestの感度分析Satoshi Kato
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門Akihiro Kuwano
 
よくわかるフリストンの自由エネルギー原理
よくわかるフリストンの自由エネルギー原理よくわかるフリストンの自由エネルギー原理
よくわかるフリストンの自由エネルギー原理Masatoshi Yoshida
 
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)Kentaro Minami
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介cyberagent
 
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動Kanahiro Iguchi
 
Gcpで多言語対応チャットボット作ってみた
Gcpで多言語対応チャットボット作ってみたGcpで多言語対応チャットボット作ってみた
Gcpで多言語対応チャットボット作ってみたRyo Takano
 
ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33horihorio
 
200611material ozaki
200611material ozaki200611material ozaki
200611material ozakiRCCSRENKEI
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~Takuya Akiba
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
Databricks の始め方
Databricks の始め方Databricks の始め方
Databricks の始め方Ryoma Nagata
 
Graph Attention Network
Graph Attention NetworkGraph Attention Network
Graph Attention NetworkTakahiro Kubo
 
より効果的な論文執筆を目指して ー査読者の視点に立った論文執筆ー
より効果的な論文執筆を目指して ー査読者の視点に立った論文執筆ーより効果的な論文執筆を目指して ー査読者の視点に立った論文執筆ー
より効果的な論文執筆を目指して ー査読者の視点に立った論文執筆ーJunSuzuki21
 
ベイズ推定の概要@広島ベイズ塾
ベイズ推定の概要@広島ベイズ塾ベイズ推定の概要@広島ベイズ塾
ベイズ推定の概要@広島ベイズ塾Yoshitake Takebayashi
 
Optimizing Apache Spark SQL Joins
Optimizing Apache Spark SQL JoinsOptimizing Apache Spark SQL Joins
Optimizing Apache Spark SQL JoinsDatabricks
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京Koichi Hamada
 

Was ist angesagt? (20)

Apache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them AllApache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them All
 
forestFloorパッケージを使ったrandomForestの感度分析
forestFloorパッケージを使ったrandomForestの感度分析forestFloorパッケージを使ったrandomForestの感度分析
forestFloorパッケージを使ったrandomForestの感度分析
 
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
 
よくわかるフリストンの自由エネルギー原理
よくわかるフリストンの自由エネルギー原理よくわかるフリストンの自由エネルギー原理
よくわかるフリストンの自由エネルギー原理
 
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介
 
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
Foss4G Japan 2021 シェープファイルの真の後継規格 FlatGeobufの普及啓蒙活動
 
Gcpで多言語対応チャットボット作ってみた
Gcpで多言語対応チャットボット作ってみたGcpで多言語対応チャットボット作ってみた
Gcpで多言語対応チャットボット作ってみた
 
ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33
 
Gephi Quick Start (Japanese)
Gephi Quick Start (Japanese)Gephi Quick Start (Japanese)
Gephi Quick Start (Japanese)
 
200611material ozaki
200611material ozaki200611material ozaki
200611material ozaki
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
Databricks の始め方
Databricks の始め方Databricks の始め方
Databricks の始め方
 
PFI Seminar 2010/02/18
PFI Seminar 2010/02/18PFI Seminar 2010/02/18
PFI Seminar 2010/02/18
 
Graph Attention Network
Graph Attention NetworkGraph Attention Network
Graph Attention Network
 
より効果的な論文執筆を目指して ー査読者の視点に立った論文執筆ー
より効果的な論文執筆を目指して ー査読者の視点に立った論文執筆ーより効果的な論文執筆を目指して ー査読者の視点に立った論文執筆ー
より効果的な論文執筆を目指して ー査読者の視点に立った論文執筆ー
 
ベイズ推定の概要@広島ベイズ塾
ベイズ推定の概要@広島ベイズ塾ベイズ推定の概要@広島ベイズ塾
ベイズ推定の概要@広島ベイズ塾
 
Optimizing Apache Spark SQL Joins
Optimizing Apache Spark SQL JoinsOptimizing Apache Spark SQL Joins
Optimizing Apache Spark SQL Joins
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
 

Ähnlich wie Hadoop Map Reduce 程式設計

Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Wei-Yu Chen
 
Zh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceZh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceTrendProgContest13
 
Hadoop与数据分析
Hadoop与数据分析Hadoop与数据分析
Hadoop与数据分析George Ang
 
Hadoop学习总结
Hadoop学习总结Hadoop学习总结
Hadoop学习总结ordinary2012
 
Hadoop基础及hive入门
Hadoop基础及hive入门Hadoop基础及hive入门
Hadoop基础及hive入门haiwang
 
打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsight打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsightKuo-Chun Su
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践guestf5121c
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践xcq
 
Hadoop系统及其关键技术
Hadoop系统及其关键技术Hadoop系统及其关键技术
Hadoop系统及其关键技术冬 陈
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理Kay Yan
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理airsex
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big DataKuo-Chun Su
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010Chuanying Du
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验QLeelulu
 
DISQL 2.0: Language for Big Data Analysis Widely Adopted in Baidu
DISQL 2.0: Language for Big Data Analysis Widely Adopted in BaiduDISQL 2.0: Language for Big Data Analysis Widely Adopted in Baidu
DISQL 2.0: Language for Big Data Analysis Widely Adopted in BaiduXiaoming Chen
 
Spark调研串讲
Spark调研串讲Spark调研串讲
Spark调研串讲jie cao
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradleChing Yi Chan
 
Voldemort Intro Tangfl
Voldemort Intro TangflVoldemort Intro Tangfl
Voldemort Intro Tangflfulin tang
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集zhen chen
 

Ähnlich wie Hadoop Map Reduce 程式設計 (20)

Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計
 
Hadoop 介紹 20141024
Hadoop 介紹 20141024Hadoop 介紹 20141024
Hadoop 介紹 20141024
 
Zh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduceZh tw introduction_to_map_reduce
Zh tw introduction_to_map_reduce
 
Hadoop与数据分析
Hadoop与数据分析Hadoop与数据分析
Hadoop与数据分析
 
Hadoop学习总结
Hadoop学习总结Hadoop学习总结
Hadoop学习总结
 
Hadoop基础及hive入门
Hadoop基础及hive入门Hadoop基础及hive入门
Hadoop基础及hive入门
 
打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsight打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsight
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践
 
Hadoop系统及其关键技术
Hadoop系统及其关键技术Hadoop系统及其关键技术
Hadoop系统及其关键技术
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big Data
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 
DISQL 2.0: Language for Big Data Analysis Widely Adopted in Baidu
DISQL 2.0: Language for Big Data Analysis Widely Adopted in BaiduDISQL 2.0: Language for Big Data Analysis Widely Adopted in Baidu
DISQL 2.0: Language for Big Data Analysis Widely Adopted in Baidu
 
Spark调研串讲
Spark调研串讲Spark调研串讲
Spark调研串讲
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
 
Voldemort Intro Tangfl
Voldemort Intro TangflVoldemort Intro Tangfl
Voldemort Intro Tangfl
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
 

Mehr von Wei-Yu Chen

Clipper@datacon.2019.tw
Clipper@datacon.2019.twClipper@datacon.2019.tw
Clipper@datacon.2019.twWei-Yu Chen
 
大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術Wei-Yu Chen
 
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduceWei-Yu Chen
 
Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Wei-Yu Chen
 
Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Wei-Yu Chen
 
Cloudslam09:Building a Cloud Computing Analysis System for Intrusion Detection
Cloudslam09:Building a Cloud Computing Analysis System for  Intrusion DetectionCloudslam09:Building a Cloud Computing Analysis System for  Intrusion Detection
Cloudslam09:Building a Cloud Computing Analysis System for Intrusion DetectionWei-Yu Chen
 

Mehr von Wei-Yu Chen (9)

Clipper@datacon.2019.tw
Clipper@datacon.2019.twClipper@datacon.2019.tw
Clipper@datacon.2019.tw
 
大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術
 
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
 
Hadoop sqoop
Hadoop sqoop Hadoop sqoop
Hadoop sqoop
 
Hadoop pig
Hadoop pigHadoop pig
Hadoop pig
 
Hadoop hive
Hadoop hiveHadoop hive
Hadoop hive
 
Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來
 
Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系
 
Cloudslam09:Building a Cloud Computing Analysis System for Intrusion Detection
Cloudslam09:Building a Cloud Computing Analysis System for  Intrusion DetectionCloudslam09:Building a Cloud Computing Analysis System for  Intrusion Detection
Cloudslam09:Building a Cloud Computing Analysis System for Intrusion Detection
 

Hadoop Map Reduce 程式設計

  • 1. Map Reduce 王耀聰 陳威宇 [email_address] [email_address] 教育訓練課程
  • 2. Computing with big datasets is a fundamentally different challenge than doing “big compute” over a small dataset
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10. Hadoop MapReduse Hadoop MapReduce 是一套儲存並處理 petabytes 等級資訊的雲端運算技術
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. Map Reduce 原理說明 王耀聰 陳威宇 [email_address] [email_address]
  • 19.
  • 20. Divide and Conquer 範例四: 眼前有五階樓梯,每次可踏上一階或踏上兩階,那麼爬完五階共有幾種踏法? Ex : (1,1,1,1,1) or (1,2,1,1) 範例一:十分逼近法 範例二:方格法求面積 範例三:鋪滿 L 形磁磚
  • 21.
  • 22.
  • 23.
  • 24. MapReduce 運作流程 part0 map map map reduce reduce part1 input HDFS sort/copy merge output HDFS JobTracker 跟 NameNode 取得需要運算的 blocks JobTracker 選數個 TaskTracker 來作 Map 運算,產生些中間檔案 JobTracker 將中間檔案整合排序後,複製到需要的 TaskTracker 去 JobTracker 派遣 TaskTracker 作 reduce reduce 完後通知 JobTracker 與 Namenode 以產生 output split 0 split 1 split 2 split 3 split 4
  • 25. MapReduce 圖解 Map 數量依輸入檔案的 block 數為主, Reduce 數量由系統決定 Sort 的規則為 key 的字母順序
  • 27. 範例 JobTracker 先選了三個 Tracker 做 map I am a tiger, you are also a tiger a,2 also,1 am,1 are,1 I,1 tiger,2 you,1 reduce reduce map map map Map 結束後, hadoop 進行中間資料的整理與排序 JobTracker 再選兩個 TaskTracker 作 reduce I,1 am,1 a,1 tiger,1 you,1 are,1 also,1 a, 1 tiger,1 a,2 also,1 am,1 are,1 I, 1 tiger,2 you,1 a, 1 a,1 also,1 am,1 are,1 I,1 tiger,1 tiger,1 you,1
  • 28. Console 端 編譯與執行 王耀聰 陳威宇 [email_address] [email_address]
  • 29.
  • 30.
  • 31.
  • 34.
  • 35. 透過 Eclipse 開發 王耀聰 陳威宇 [email_address] [email_address]
  • 36.
  • 37.
  • 38. 1 打開 Eclipse, 設定專案目錄
  • 39. 2. 使用 Hadoop mode 視野 Window  Open Perspective  Other 若有看到 MapReduce 的大象圖示代表 Hadoop Eclipse plugin 有安裝成功, 若沒有請檢查是否有安之裝正確
  • 40. 3. 使用 Hadoop 視野,主畫面將出現三個功能
  • 41. 4. 建立一個 Hadoop 專案 開出新專案 選擇 Map/Reduce 專案
  • 42. 4-1. 輸入專案名稱並點選設定 Hadoop 安裝路徑 由此設定 Hadoop 的安裝路徑 由此設定專案名稱
  • 43. 4-1-1. 填入 Hadoop 安裝路徑 於此輸入您 Hadoop 的安裝路徑,之後選擇 ok
  • 44. 5. 設定 Hadoop 專案細節 1. 右鍵點選 2. 選擇 Properties
  • 45. 5-1. 設定原始碼與文件路徑 以下請輸入正確的 Hadoop 原始碼與 API 文件檔路徑,如 source : /opt/hadoop/src/core/ javadoc : file:/opt/hadoop/docs/api/ 選擇 Java Build Path
  • 47. 5-2. 設定 java doc 的完整路徑 輸入 java 6 的 API 正確路徑,輸入完後可選擇 validate 以驗證是否正確 選擇 Javadoc Location
  • 48. 6. 連結 Hadoop Server 與 Eclipse 點選此圖示
  • 49. 6-1 . 設定你要連接的 Hadoop 主機 輸入主機位址或 domain name MapReduce 監聽的 Port ( 設定於 mapred-site.xml) HDFS 監聽的 Port ( 設定於 core-site.xml) 你在此 Hadoop Server 上的 Username 任意填一個名稱
  • 50. 6-2 若正確設定則可得到以下畫面 HDFS 的資訊,可直接於此操作檢視、新增、上傳、刪除等命令 若有 Job 運作,可於此視窗檢視
  • 51. 7. 新增一個 Hadoop 程式 首先先建立一個 WordCount 程式,其他欄位任意
  • 52. 7.1 於程式窗格內輸入程式碼 此區為程式窗格
  • 53. 7.2 補充:若之前 doc 部份設定正確,則滑鼠移至程式碼可取得 API 完整說明
  • 54. 8. 運作 於欲運算的 程式碼 處點選右鍵  Run As  Run on Hadoop
  • 56. 8.2 運算資訊出現於 Eclipse 右下方的 Console 視窗 放大
  • 58.
  • 59. Map Reduce 程式架構 王耀聰 陳威宇 [email_address] [email_address]
  • 60. <Key, Value> Pair Row Data Map Reduce Reduce Input Output key values key1 val key2 val key1 val … … Map Input Output Select Key key1 val val … . val
  • 61.
  • 62. Class Mapper (v 0.20) class MyMap extends Mapper < , , , > { // 全域變數區 public void map ( key, value , Context context ) throws IOException,InterruptedException { // 區域變數與程式邏輯區 context.write ( NewKey, NewValue ); } } 1 2 3 4 5 6 7 8 9 INPUT KEY Class OUTPUT VALUE Class OUTPUT KEY Class INPUT VALUE Class INPUT VALUE Class INPUT KEY Class import org.apache.hadoop.mapreduce.Mapper;
  • 63. Class Reducer (v 0.20) class MyRed extends Reducer < , , , > { // 全域變數區 public void reduce ( key, Iterable< > values , Context context ) throws IOException, InterruptedException { // 區域變數與程式邏輯區 context. write( NewKey, NewValue ); } } 1 2 3 4 5 6 7 8 9 INPUT KEY Class OUTPUT VALUE Class OUTPUT KEY Class INPUT VALUE Class INPUT KEY Class INPUT VALUE Class import org.apache.hadoop.mapreduce.Reducer;
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80. 範例四 (1) public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println(&quot;Usage: hadoop jar WordCount.jar <input> <output>&quot;); System.exit(2); } Job job = new Job(conf, &quot;Word Count&quot;); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); CheckAndDelete.checkAndDelete(args[1], conf); System.exit(job.waitForCompletion(true) ? 0 : 1); }
  • 81. 範例四 (2) class TokenizerMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map( LongWritable key, Text value, Context context ) throws IOException , InterruptedException { String line = ((Text) value).toString(); StringTokenizer itr = new StringTokenizer(line); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); }}} 1 2 3 4 5 6 7 8 9 < no , 1 > < news , 1 > < is , 1 > < a, 1 > < good , 1 > < news, 1 > <word,one> Input key Input value ………………… . ………………… No news is a good news. ………………… /user/hadooper/input/a.txt itr line no news news is good a itr itr itr itr itr itr
  • 82. 範例四 (3) class IntSumReducer extends Reducer< Text , IntWritable , Text, IntWritable > { IntWritable result = new IntWritable(); public void reduce( Text key , Iterable < IntWritable > values , Context context ) throws IOException , InterruptedException { int sum = 0; for ( IntWritable val : values ) sum += val .get(); result.set(sum); context .write ( key, result ); }} 1 2 3 4 5 6 7 8 < news , 2 > <key,SunValue> <word,one> news 1 1 < a, 1 > < good, 1 > < is, 1 > < news, 1  1 > < no, 1 > for ( int i ; i < values.length ; i ++ ){ sum += values[i].get() }
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93. Class Mapper (v0.18) 補充 class MyMap extends MapReduceBase implements Mapper < , , , > { // 全域變數區 public void map ( key, value , OutputCollector< , > output , Reporter reporter) throws IOException { // 區域變數與程式邏輯區 output .collect( NewKey, NewValue ); } } 1 2 3 4 5 6 7 8 9 INPUT KEY INPUT VALUE OUTPUT VALUE OUTPUT KEY INPUT KEY INPUT VALUE OUTPUT VALUE OUTPUT KEY import org.apache.hadoop.mapred.*;
  • 94. Class Reducer (v0.18) 補充 class MyRed extends MapReduceBase implements Reducer < , , , > { // 全域變數區 public void reduce ( key, Iterator< > values , OutputCollector< , > output , Reporter reporter) throws IOException { // 區域變數與程式邏輯區 output .collect( NewKey, NewValue ); } } 1 2 3 4 5 6 7 8 9 INPUT KEY INPUT VALUE OUTPUT VALUE OUTPUT KEY INPUT KEY INPUT VALUE OUTPUT VALUE OUTPUT KEY import org.apache.hadoop.mapred.*;
  • 95.
  • 96. Map Reduce 專案分享 王耀聰 陳威宇 [email_address] [email_address]
  • 97.
  • 98. Yahoo 使用 Hadoop 平台來發現發送垃圾郵件的殭屍網絡 ( 1 ) 垃圾郵件網站 ( 2 ) 垃圾郵件 ( 3 ) 垃圾郵件軟體( 4 ) 被感染的電腦 ( 5 ) 病毒或木馬 ( 6 ) 信件伺服器 ( 7 ) 用戶 ( 8 ) 網路流量
  • 99.
  • 100. [**] [1:538:15] NETBIOS SMB IPC$ unicode share access [**] [Classification: Generic Protocol Command Decode] [Priority: 3] 09/04-17:53:56.363811 168.150.177.165:1051 -> 168.150.177.166:139 TCP TTL:128 TOS:0x0 ID:4000 IpLen:20 DgmLen:138 DF ***AP*** Seq: 0x2E589B8 Ack: 0x642D47F9 Win: 0x4241 TcpLen: 20 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3] 09/04-17:53:56.385573 168.150.177.164:1032 -> 239.255.255.250:1900 UDP TTL:1 TOS:0x0 ID:80 IpLen:20 DgmLen:161 Len: 133 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3] 09/04-17:53:56.386910 168.150.177.164:1032 -> 239.255.255.250:1900 UDP TTL:1 TOS:0x0 ID:82 IpLen:20 DgmLen:161 Len: 133 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3] 09/04-17:53:56.388244 168.150.177.164:1032 -> 239.255.255.250:1900 UDP TTL:1 TOS:0x0 ID:84 IpLen:20 DgmLen:161 Len: 133 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3] 09/04-17:53:56.417045 168.150.177.164:45461 -> 168.150.177.1:1900 UDP TTL:1 TOS:0x0 ID:105 IpLen:20 DgmLen:161 Len: 133 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3] 09/04-17:53:56.420759 168.150.177.164:45461 -> 168.150.177.1:1900 UDP TTL:1 TOS:0x0 ID:117 IpLen:20 DgmLen:160 Len: 132 [**] [1:1917:6] SCAN UPnP service discover attempt [**] [Classification: Detection of a Network Scan] [Priority: 3] 09/04-17:53:56.422095 168.150.177.164:45461 -> 168.150.177.1:1900 UDP TTL:1 TOS:0x0 ID:118 IpLen:20 DgmLen:161 Len: 133 [**] [1:2351:10] NETBIOS DCERPC ISystemActivator path overflow attempt little endian unicode [**] [Classification: Attempted Administrator Privilege Gain] [Priority: 1] 09/04-17:53:56.442445 198.8.16.1:10179 -> 168.150.177.164:135 TCP TTL:105 TOS:0x0 ID:49809 IpLen:20 DgmLen:1420 DF ***A**** Seq: 0xF9589BBF Ack: 0x82CCF5B7 Win: 0xFFFF TcpLen: 20 [Xref => http://www.microsoft.com/technet/security/bulletin/MS03-026.mspx][Xref => http://cgi.nessus.org/plugins/dump.php3?id=11808][Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2003-0352][Xref => http://www.securityfocus.com/bid/8205] 輸入資料
  • 101. 輸出資料 Generate dot graph format
  • 102. 系統分析 前處理 Map Reduce 運算 後續處理 網頁介面 輸入 資料 瀏覽 結果 報告
  • 103. Alert Merge Example Key Values Host_1 Trojan Sip1,Sip2 80,443 4077,5002 tcp T1,T2,T3 Host_2 Trojan Sip1 443 5002 tcp T4 Host_3 D.D.O.S. Sip3,Sip4,Sip5 ,Sip6 53 6007,6008 tcp, udp T5 Destination IP Attack Signature Source IP Destination Port Source Port Packet Protocol Timestamp Host_1 Trojan Sip1 80 4077 tcp T1 Host_1 Trojan Sip2 80 4077 tcp T2 Host_1 Trojan Sip1 443 5002 tcp T3 Host_2 Trojan Sip1 443 5002 tcp T4 Host_3 D.D.O.S Sip3 53 6007 udp T5 Host_3 D.D.O.S Sip4 53 6008 tcp T5 Host_3 D.D.O.S Sip5 53 6007 udp T5 Host_3 D.D.O.S Sip6 53 6008 tcp T5
  • 104. 程式流程圖 Source Regulation Integrate Alert Merge Extenstion Correlation Record Snort Logs Final Report
  • 105.

Hinweis der Redaktion

  1. 一個使用在大量節點叢集上計算各式各樣問題的軟體架構
  2. 一個使用在大量節點叢集上計算各式各樣問題的軟體架構