spark 根据关键字查询日志信息(关键字下行10行)

业务需要根据关键字查询HDFS日志信息,并且需要查看关键字Key之下10行

package com.spark.scala
import org.apache.spark.{SparkContext,SparkConf}

class mylog{

}

object mylog{
        def main(args: Array[String]) {
            //没有数据源,退出
            if(args(0) == 0){
                System.err.println("Usage:  mylog ")
                System.exit(1)
            }
            val conf = new SparkConf().setAppName("mylog")
            val sc = new SparkContext(conf)
            //加载数据、为每行数据添加索引并调换索引与Value值位置
            val f = sc.textFile(args(0)).zipWithIndex.map{
                    case(x,y)=>(y,x)}
            //过滤每行数据是否包含关键字
            val lf = f.filter(line=>line._2.toString
                        .contains(args(1)))
            //取得包含关键字数据所在行的索引号
            val num = lf.map(x=>x._1.toInt)
            //定义查询数据的起止索引
            val startNum = num.first + 0
            val endNum = num.first + 10
            //按起止索引过滤数据,并设置结果只为Value值数据
            val s = f.filter(startNum <= _._1).filter(
                    _._1 <= endNum).map(x=>x._2)
            //重设分区以便保存数据到HDFS上为单文件(结果数据较少)
            s.repartition(1).saveAsTextFile(args(2))
            System.exit(0)
    }
}

spark-defaults.conf
测试环境虚拟机内存比较小,设置spark.executor.memory为512m

spark.master   yarn-client
spark.executor.memory  512m
spark.local.dir  /usr/local/spark/data/tmp_spark_dir

spark-env.sh
spark 根据关键字查询日志信息(关键字下行10行)_第1张图片

建一个脚本submit-yarn.sh执行提交作业工作
cd home
vim submit-yarn.sh

cd  /usr/local/spark/spark-1.2.0-bin-hadoop2.4/

./bin/spark-submit  --name sparklog \
                    --class com.spark.scala.mylog \
                    /home/sparklog.jar \
                    hdfs://SparkMaster:9000/data \
                    chensy \
                    hdfs://SparkMaster:9000/mylog

/home/sparklog.jar 对应的是idea打包后为sparklog.jar,并存放在/home
hdfs://SparkMaster:9000/data 对应代码args(0),输入数据
chensy 对应代码args(1),是查询关键字
hdfs://SparkMaster:9000/mylog 对应代码args(2),输出数据

直接在home目录下,执行 ./submit-yarn.sh
查询结果: hadoop fs -ls /mylog

你可能感兴趣的:(spark,spark查询日志)