跟我一起学Spark之——自定义分区实现

实现功能:将数据按照某个字段进行分开存储

样例数据:

20170721101954    http://sport.sina.cn/sport/race/nba.shtml
20170721101954    http://sport.sina.cn/sport/watch.shtml
20170721101954    http://car.sina.cn/car/fps.shtml
20170721101954    http://sport.sina.cn/sport/watch.shtml
20170721101956    http://sport.sina.cn/sport/race/nba.shtml
20170721101957    http://sport.sina.cn/sport/watch.shtml
20170721101958    http://car.sina.cn/car/fps.shtml
20170721101959    http://sport.sina.cn/sport/watch.shtml
20170721101951    http://sport.sina.cn/sport/race/nba.shtml
20170721101951    http://sport.sina.cn/sport/watch.shtml
20170721101952    http://car.sina.cn/car/fps.shtml
20170721101953    http://sport.sina.cn/sport/watch.shtml
20170721101953    http://sport.sina.cn/sport/race/nba.shtml
20170721101950    http://sport.sina.cn/sport/watch.shtml
20170721101950    http://car.sina.cn/car/fps.shtml
20170721101950    http://sport.sina.cn/sport/watch.shtml
package 自定义分区
import java.net.URL
import org.apache.spark.{HashPartitioner, Partitioner, SparkConf, SparkContext}
import scala.collection.mutable

object Partition {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("UrlCount").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val lines = sc.textFile("E:\\Users\\11046\\IdeaProjects\\SparkFly\\url1.log")
    // 20170721101954	http://sport.sina.cn/sport/race/nba.shtml
    val text = lines.map(line => {
      val f = line.split("\t")
      (f(1), 1) //最后一行作为返回值的  先给每个域名  后面增加1
    })
    val text1 = text.reduceByKey(_ + _) //统计每个域名的个数
    //    println(text1.collect.toBuffer)
    // http://sport.sina.cn/sport/race/nba.shtml   1
    val text2 = text1.map(t => {
      val url = t._1 //每个url
      val host = new URL(url).getHost
      (host, (url, t._2)) //返回每个host
    })

    val fornum = text2.map(_._1).distinct().collect()
    //    println(fornum)
    val np = new HostParitioner(fornum)
    //后面的partitionBy也是一个固定写法
    text2.partitionBy(np).saveAsTextFile("E:\\Users\\11046\\IdeaProjects\\SparkFly\\output2")

    sc.stop() //关闭
  }
}

自定义分区内容:

package 自定义分区
import org.apache.spark.Partitioner
import scala.collection.mutable

//程序代码中的自定义分区
class HostParitioner(ins: Array[String]) extends Partitioner {

  val parMap = new mutable.HashMap[String, Int]()
  var count = 0// 表示分区号
  // 对for循环的目的是使 每个host 作为一个分区
  for(i <- ins){
    parMap += (i -> count)
    count += 1
  }
  // 为了保证每一个域名有一个分区,就用fornum.length的形式  源码用到
  override def numPartitions: Int = ins.length
  //获得每个key的分区号  源码用到
  override def getPartition(key: Any): Int = {
    parMap.getOrElse(key.toString, 0)
  }
}

结果展示:

第一部分:

(sport.sina.cn,(http://sport.sina.cn/sport/watch.shtml,8))
(sport.sina.cn,(http://sport.sina.cn/sport/race/nba.shtml,4))

第二部分:

(car.sina.cn,(http://car.sina.cn/car/fps.shtml,4))

原文链接:https://blog.csdn.net/zhaoxiangchong/article/details/78409235

### 使用 Burp Suite 进行网络数据捕获 #### 配置 Burp Suite 的代理设置 为了准备使用 Burp Suite 抓包,需确保其抓包功能已开启。进入 `Proxy` -> `Options` 界面增添计算机 IP 地址和端口号[^2]。 对于 DVWA 初级靶场测试环境而言,HTTP 代理地址应设为 `127.0.0.1`,而端口则设定为 `8080`[^1]。 #### 安装 CA 证书至目标设备 为了让浏览器信任来自 Burp Suite 的 SSL/TLS 加密连接,必须导出并安装由该软件签发的中间人(MITM)CA 证书: - **Web 浏览器**:通过访问 http://burp 收集 `.cer` 文件,并按照提示将其作为受信根认证机构导入操作系统或特定应用内。 - **移动装置 (Android)**:利用 ADB 工具推送经 OpenSSL 转换成 PEM 格式的证书文件到 `/sdcard/Download` 目录下;接着前往「设置」-> 「安全」-> 「加密与凭证」-> 「从储存空间安装」完成加载过程[^4]。 #### 开启拦截模式 Intercept 功能 当计划分析具体请求细节时,可暂时关闭截留开关以便顺利浏览网页资源。一旦定位到感兴趣的链接,则重新激活此特性来细致审查交互流程[^3]。 #### 设置客户端代理配置 依据不同场景需求调整终端侧参数以实现有效监听: - **桌面平台上的 Web 应用** - 创建新的情境模式(SwitchyOmega 插件),指定 HTTP(S) 通道指向本地运行中的 Burp 实例。 - **移动端 App 或者其他不具备内置代理选项的服务** - 修改 Wi-Fi 接入点属性里的网关字段匹配宿主机公网出口; - 对于缺乏显式代理入口的应用程序来说,借助 Proxifier 类第三方中介层间接达成目的——即关联待监测进程同自定义规则下的远程转发节点。 ```bash openssl x509 -inform DER -in burpsuite.der -out burpsuite.pem adb push burpsuite.pem /sdcard/Download/ ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值