Flink在IDEA上的开发是创建的maven项目,IDEA上maven的配置方法不在介绍,可自行参考网上资料进行配置maven环境。
1、打开IDEA,创建一个maven工程:
file->new->project->Maven->Next
2、设置GroupId和ArtifacId:
注意Version使用1.0
继续创建项目,然后点击Finsh完成创建
3、配置项目的maven仓库:
file->Settings->Maven,设置好你的maven仓库和路径,之后点击Apply,再点ok
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目录
6、配置scala的环境:
1) file->Project Structure->Modules,把你的scala目录Mark as成Sources,再把Language level 设置成 8-Lambdas,type annotations etc. ,再点Apply
2) Project Structure下配置Libiraies,选择 + ,选中Scala SDK (未安装Scala的自行搜索安装),点击ok选择scala,再点击Apply,再点OK,这样就配置好开发环境
3)设置java Compiler,选择你的jdk版本(我的1.8)点击Apply,再点击OK,
最后点击Import Changes即可,至此flink开发环境配置完成。
1、在scala下新建包:
2、在com\hn\operator包下新建scala文件:
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也可以)
2)再启动SocketWordCount 程序,然后在cmd上输入统计的数据,会把实时的显示在程序的控制台上。
3)在浏览器上输入 http://localhost:8080/ 能访问flink的web页面