(二)IDEA本地开发Flink之环境搭建与WordCount测试

一、Flink在IDEA上的环境配置

Flink在IDEA上的开发是创建的maven项目,IDEA上maven的配置方法不在介绍,可自行参考网上资料进行配置maven环境。
1、打开IDEA,创建一个maven工程
file->new->project->Maven->Next
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第1张图片
2、设置GroupId和ArtifacId:

注意Version使用1.0

(二)IDEA本地开发Flink之环境搭建与WordCount测试_第2张图片

继续创建项目,然后点击Finsh完成创建
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第3张图片
3、配置项目的maven仓库
file->Settings->Maven,设置好你的maven仓库和路径,之后点击Apply,再点ok
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第4张图片
4、添加pom文件
把以下配置放到你项目的pom文件中

	
        .compiler.source>1.8</maven.compiler.source>
        .compiler.target>1.8</maven.compiler.target>
        .compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>

    
        
            org.scala-lang</groupId>
            scala-library</artifactId>
            2.11.8</version>
            compile</scope>
        </dependency>

        
            org.slf4j</groupId>
            slf4j-log4j12</artifactId>
            1.7.7</version>
            compile</scope>
        </dependency>

        
            log4j</groupId>
            log4j</artifactId>
            1.2.17</version>
            compile</scope>
        </dependency>
        <!-- flink的hadoop兼容 -->
        
            org.apache.flink</groupId>
            flink-shaded-hadoop2</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>
        <!-- flink的hadoop兼容 -->
        
            org.apache.flink</groupId>
            flink-hadoop-compatibility_2.11</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>
        <!-- flink的scala的api -->
        
            org.apache.flink</groupId>
            flink-scala_2.11</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>
        <!-- flink streaming的scala的api -->
        
            org.apache.flink</groupId>
            flink-streaming-scala_2.11</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>
        <!-- flink的java的api -->
        
            org.apache.flink</groupId>
            flink-java</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>
        <!-- flink streaming的java的api -->
        
            org.apache.flink</groupId>
            flink-streaming-java_2.11</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>
        <!-- flink运行时的webUI -->
        
            org.apache.flink</groupId>
            flink-runtime-web_2.11</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>        
        <!-- flink 的kafkaconnector -->
        
            org.apache.flink</groupId>
            flink-connector-kafka-0.10_2.11</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>
        <!-- 使用rocksdb保存flink的state -->
        
            org.apache.flink</groupId>
            flink-statebackend-rocksdb_2.11</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>
        <!-- flink操作hbase -->
        
            org.apache.flink</groupId>
            flink-hbase_2.11</artifactId>
            1.7.2</version>
            compile</scope>
        </dependency>
        <!-- flink操作es -->
        
            org.apache.flink</groupId>
            flink-connector-elasticsearch5_2.11</artifactId>
            1.5.3</version>
            compile</scope>
        </dependency>
        <!-- mysql连接驱动 -->
        
            mysql</groupId>
            mysql-connector-java</artifactId>
            5.1.35</version>
            compile</scope>
        </dependency>
        <!-- redis连接 -->
        
            redis.clients</groupId>
            jedis</artifactId>
            2.9.0</version>
            compile</scope>
        </dependency>
        <!-- 解析dom -->
        
            org.jsoup</groupId>
            jsoup</artifactId>
            1.9.2</version>
            compile</scope>
        </dependency>
        
            cn.wanghaomiao</groupId>
            JsoupXpath</artifactId>
            0.3.2</version>
            compile</scope>
        </dependency>
    </dependencies>

5、在main中创建scala目录
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第5张图片
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第6张图片
6、配置scala的环境:
1) file->Project Structure->Modules,把你的scala目录Mark as成Sources,再把Language level 设置成 8-Lambdas,type annotations etc. ,再点Apply
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第7张图片
2) Project Structure下配置Libiraies,选择 + ,选中Scala SDK (未安装Scala的自行搜索安装),点击ok选择scala,再点击Apply,再点OK,这样就配置好开发环境
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第8张图片
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第9张图片
3)设置java Compiler,选择你的jdk版本(我的1.8)点击Apply,再点击OK,
最后点击Import Changes即可,至此flink开发环境配置完成。
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第10张图片

二、Flink开发wordCount

1、在scala下新建包:
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第11张图片
2、在com\hn\operator包下新建scala文件:
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第12张图片
3、 log4j.properties 文件配置
在resources下创建一个log4j.properties文件,把以下内容放到log4j.properties文件里,是为了在控制台上少打印东西,配置了一个日志输出目录

log4j.rootLogger=WARN, console, file
log4j.logger.akka=WARN, console
log4j.logger.org.apache.kafka=WARN
log4j.logger.org.apache.hadoop=WARN
log4j.logger.org.apache.zookeeper=WARN

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
# Log all infos in the given file
log4j.appender.file=org.apache.log4j.FileAppender
# 注意这里要修改成自己的日志目录
log4j.appender.file.file=D://tmp//flink//flink_log
log4j.appender.file.append=false
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%n

4、写wordCount代码:

package com.hn.operator

import org.apache.flink.configuration.{ConfigConstants, Configuration}
import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}

object SocketWordCount {
  def main(args: Array[String]): Unit = {
    //生成了配置对象
    val config = new Configuration()
    //打开flink-webui
    config.setBoolean(ConfigConstants.LOCAL_START_WEBSERVER, true)
    //配置webui的日志文件,否则打印日志到控制台,这样你的控制台就清净了
    config.setString("web.log.path", "D:\\tmp\\flink\\flink_log")
    //配置taskManager的日志文件,否则打印日志到控制台,这样你的控制台就清净了
    config.setString(ConfigConstants.TASK_MANAGER_LOG_PATH_KEY, "D:\\tmp\\flink\\flink_log")

    //获得local运行环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(config)
    //定义socket的source源
    val text: DataStream[String] = env.socketTextStream( hostname="localhost", port = 6666)

    //scala开发需要加一行隐式转换,否则在调用operator的时候会报错,作用是找到scala类型的TypeInformation
    import org.apache.flink.api.scala._

    //定义operators,作用是解析数据,分组,并且求wordCount
    val wordCount: DataStream[(String, Int)] = text.flatMap(_.split(" ")).map((_,1)).keyBy(_._1).sum( position = 1)

    //定义sink,打印数据到控制台
    wordCount.print()

    //定义任务的名称并运行
    //注意:operator是惰性的,只有遇到execute才执行
    env.execute(jobName = "SocketWordCount")

  }
}

5、运行测试wordCount:
1)先在cmd下启动一个socketServer :ncat -lp 6666(注意:要在本地安装ncat,使用nc也可以)
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第13张图片
2)再启动SocketWordCount 程序,然后在cmd上输入统计的数据,会把实时的显示在程序的控制台上。
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第14张图片
3)在浏览器上输入 http://localhost:8080/ 能访问flink的web页面
(二)IDEA本地开发Flink之环境搭建与WordCount测试_第15张图片

你可能感兴趣的:(Apache,Flink)