正在加载图片...
第1期 邵秀丽,等:检测僵尸网络的贝叶斯算法的MapReduce并行化实现 .29. 2.1 MapReducel的设计 yes/sum、sum_no/sum计算得到先验概率P(n)和 Mapl接收到的训练数据是被Hadoop处理形成 P(b),并以成员变量sum_-yes_-P和sum_no_p存储。 的(Key,Value〉对,形式为(该行起始位置相对于文 Reducel过程伪代码如下。 件起始位置的偏移量,文本文件中的一行信息〉的 输入:Text、Int Writable 信息。由于MapReducel是计算贝叶斯的先验概 输出:Text、Float Writable 率,只需用到Value的类标签属性,所以Mapl将每 reduce(Key,Value) 行Vaue数据按空格分隔成字符串数组,取出数组 for(Int Writable val:Value) 最后一项,即类标签值。判断类标签值,若为0,输 Suml+=val.get();/若Key为“正常网络”, 出中间结果〈Keyl,Valuel〉对的形式为(“正常网 统计的是正常网络数据行数;否则为僵尸网络数据 络”,1):若为1,输出中间结果(Keyl,Value1〉对的 行数 形式为(“僵尸网络”,I〉。并且,MapReduce框架每 If(Key.equals(“正常网络”)) 执行一次map()说明处理一行数据,通过累加统计 {sum_yes=suml;/存储正常网络数据行数 训练数据总行数,以成员变量sum存储。Mapl只是 sum_-yes-p=sum_yes/sum;//正常网络先验 一个数据准备阶段,使Reducel能在该准备数据上 概率 继续处理。Mapl过程伪代码如下。 } 输入:Object、Texto Else 输出:Text、Int Writable。. {sum_no=suml:/存储僵尸网络数据行数 map(Key、Value) sum no_p=sum_no/sum;/僵尸网络先验概率 StringTokenizer itr new StringTokenizer(value. } toString()); Context.write(key,(float)sum1/sum));// String[]temp=new String[9] 出先验概率 While(itr.hasMoreTokens()) } {temp[i]=itr.next Token():/属性字符串数组 经过MapReducel的处理,形成2个以成员变 i++; 量sum_-yesp、sum_no_p存储的概率,即正常网络先 验概率和僵尸网络先验概率,构成知识库的一部分, Sum++;//网络数据总行数 供检测阶段使用。 If(temp[8].equals(0))/类标签0为正常网络 2.2 MapReduce2的设计 Context..wite(“正常网络”,l); Map2接收到的信息与Mapl相同,是训练数据 Else//表示为僵尸网络 被Hadoop处理形成的(Key,Vaue〉对,形式为(该 Context..write(“僵尸网络”,1); 行起始位置相对于文件起始位置的偏移量,文本文 件中的一行信息)的信息。MapReduce2计算贝叶斯 经过Mapl把分块的每行信息都处理成〈Keyl, 的条件概率,需用到Value的6个属性列及类标签 Valuel)形式的等待整体处理的中间文件输出,Ma- 值。因此Map2将每行Value数据按空格分割成字 pReduce框架将每个Mapl输出的中间文件的结果 符串数组,取出数组的第3~9项01,心2,…,心6,以及 (“正常网络”,1〉或(“僵尸网络”,1〉按照Ky值 类标签值。首先判断类标签值是否为“0”,然后判 (正常网络、僵尸网络)进行分组形成新的(Key2, 断各属性是否在各自阈值内。若标签值为“0”且属 Value2)对,形式为(类标签值,{1,1,…,1})。 性值在阈值内,输出中间结果〈Key3,Value3)对的形 Reducel接收到的信息为(Key2,Value2.〉。Re ducel的任务是对Key2相同的中间结果计数,若 式为(“w:In”,1〉;若标签值为“0”且属性值在阈值 Key2值为“正常网络”,统计的Value22的行数为正 外,输出中间结果〈Key3,Value3〉对的形式为 常网络个数,并以成员变量sum-yes存储;若Key2 〈“0,1n”,1〉:若标签值为“1”且属性值在阈值内,输 值为“僵尸网络”,统计的Value2的行数为僵尸网络 出中间结果〈Key3,Value.3〉对的形式为 个数,并以成员变量sum_no存储。并分别用sum_ 〈“0:1b”,1〉;若标签值为“1”且属性值在阈值外,输2.1 MapReduce1 的设计 Map1 接收到的训练数据是被 Hadoop 处理形成 的〈Key,Value〉对,形式为〈该行起始位置相对于文 件起始位置的偏移量, 文本文件中的一行信息〉的 信息。 由于 MapReduce1 是计算贝叶斯的先验概 率,只需用到 Value 的类标签属性,所以 Map1 将每 行 Value 数据按空格分隔成字符串数组,取出数组 最后一项,即类标签值。 判断类标签值,若为 0,输 出中间结果〈Key1,Value1〉 对的形式为〈“正常网 络”,1〉;若为 1,输出中间结果〈Key1,Value1〉对的 形式为〈“僵尸网络”,1〉。 并且,MapReduce 框架每 执行一次 map( )说明处理一行数据,通过累加统计 训练数据总行数,以成员变量 sum 存储。 Map1 只是 一个数据准备阶段,使 Reduce1 能在该准备数据上 继续处理。 Map1 过程伪代码如下。 输入:Object、Text。 输出:Text、IntWritable。 map(Key、Value) {StringTokenizer itr = new StringTokenizer( value. toString()); String[]temp = new String[9]; While(itr.hasMoreTokens()) {temp[i] =itr.nextToken();/ / 属性字符串数组 i++; } Sum++; / / 网络数据总行数 If(temp[8].equals(0)) / / 类标签 0 为正常网络 Context.write(“正常网络”,1); Else / / 表示为僵尸网络 Context.write(“僵尸网络”,1); } 经过 Map1 把分块的每行信息都处理成〈Key1, Value1〉形式的等待整体处理的中间文件输出,Ma⁃ pReduce 框架将每个 Map1 输出的中间文件的结果 〈“正常网络”,1〉 或〈“僵尸网络”,1〉 按照 Key 值 (正常网络、僵尸网络) 进行分组形成新的〈Key2, Value2〉对,形式为〈类标签值,{1,1,…,1 }〉。 Reduce1 接收到的信息为〈Key2,Value2〉。 Re⁃ duce1 的任务是对 Key2 相同的中间结果计数,若 Key2 值为“正常网络”,统计的 Value2 的行数为正 常网络个数,并以成员变量 sum_yes 存储;若 Key2 值为“僵尸网络”,统计的 Value2 的行数为僵尸网络 个数,并以成员变量 sum_no 存储。 并分别用 sum_ yes/ sum、sum_no / sum 计算得到先验概率 P( n) 和 P(b),并以成员变量 sum_yes_p 和 sum_no_p 存储。 Reduce1 过程伪代码如下。 输入:Text、IntWritable。 输出:Text、FloatWritable。 reduce(Key,Value) {for(IntWritable val:Value) Sum1+ = val.get( ); / / 若 Key 为“正常网络”, 统计的是正常网络数据行数;否则为僵尸网络数据 行数 If(Key.equals(“正常网络”)) {sum_yes = sum1; / / 存储正常网络数据行数 sum_yes_p = sum_yes/ sum; / / 正常网络先验 概率 } Else {sum_no = sum1; / / 存储僵尸网络数据行数 sum_no_p=sum_no / sum;/ / 僵尸网络先验概率 } Context.write(key,(float)(sum1 / sum)); / / 输 出先验概率 } 经过 MapReduce1 的处理,形成 2 个以成员变 量 sum_yes_p、sum_no_p 存储的概率,即正常网络先 验概率和僵尸网络先验概率,构成知识库的一部分, 供检测阶段使用。 2.2 MapReduce2 的设计 Map2 接收到的信息与 Map1 相同,是训练数据 被 Hadoop 处理形成的〈Key,Value〉 对,形式为〈该 行起始位置相对于文件起始位置的偏移量, 文本文 件中的一行信息〉的信息。 MapReduce2 计算贝叶斯 的条件概率,需用到 Value 的 6 个属性列及类标签 值。 因此 Map2 将每行 Value 数据按空格分割成字 符串数组,取出数组的第 3~9 项 w1 ,w2 ,…,w6 ,以及 类标签值。 首先判断类标签值是否为“0”,然后判 断各属性是否在各自阈值内。 若标签值为“0”且属 性值在阈值内,输出中间结果〈Key3,Value3〉对的形 式为〈“wi | n”,1〉;若标签值为“0”且属性值在阈值 外,输 出 中 间 结 果 〈 Key3, Value3 〉 对 的 形 式 为 〈“wi | n”,1〉;若标签值为“1”且属性值在阈值内,输 出 中 间 结 果 〈 Key3, Value3 〉 对 的 形 式 为 〈“wi | b”,1〉;若标签值为“1”且属性值在阈值外,输 第 1 期 邵秀丽,等:检测僵尸网络的贝叶斯算法的 MapReduce 并行化实现 ·29·
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有