1. flink如何去接受kafka安装和配置
纯java开发的软件在linux下面也可以应用自如。
那么首先就需要配置好linux下的java环境,具体说来,就是配置jdk环境变量。
介绍在linux下配置jdk环境变量的几种常用方法。
首先在linux下安装jdk,如果出现提示权限不够(且root下也提示权限不够)
2. : java.lang.OutOfMemoryError ,编译flink的 FlinkKafkaJavaExample:jar报错了
这是运行时错误, 非编译错误
3. 小白想转行做大数据,怎么入行
大数据技术专业属于交叉学科:以统计学、数学、计算机为三大支撑性学科;生物、医学、环境科学、经济学、社会学、管理学为应用拓展性学科。
此外还需学习数据采集、分析、处理软件,学习数学建模软件及计算机编程语言等,知识结构是二专多能复合的跨界人才(有专业知识、有数据思维)。
大数据时代则对从业人员素质的要求越来越高,因为数据处理变得越来越复杂,数据人才的竞争也越来越激烈,很多大公司都在寻找尖端人才。而且,大到国防、金融,小到跟生活息息相关的物流、购物、医疗、交通等,都日益需要大数据的支撑。大数据正在成为一门“显学”。
对于大数据开发的学习,重在掌握基本知识以及实践应用,合理安排基础知识的学习,可以起到事半功倍的效果,以下是比较经典的大数据开发学习路线:
第一阶段:JavaSE+MySql+Linux
Java语言入门 → OOP编程 → Java常用Api、集合 → IO/NIO → Java实用技术 → Mysql数据库 → 阶段项目实战 → Linux基础 → shell编程
第二阶段:Hadoop与生态系统
Hadoop → MapRece → Avro → Hive → Hbase → Zookeeper → Flume → Kafka → Sqoop → Pig
第三阶段:Storm与Spark及其生态圈
Storm → Scala → Spark → Spark SQL → Spark Streaming → Spark机器学习
第四阶段:其他
Mahout机器学习 → R语言 → python
第五阶段:项目实战、技术综合运用
希望对您有所帮助!~
4. 怎么在java的flink中调用python程序
1. 在java类中直接执行python语句
此方法需要引用 org.python包,需要下载Jpython。在这里先介绍一下Jpython。下面引入网络的解释:
Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。
这里我建议下载最新版本的Jpython,因为可以使用的python函数库会比老版本的多些,目前最新版本为2.7。
下载jar包请点击Download Jython 2.7.0 - Standalone Jar
下载安装程序请点击Download Jython 2.7.0 - Installer
如果使用maven依赖添加的话,使用下面的语句
<dependency>
<groupId>org.python</groupId>
<artifactId>jython-standalone</artifactId>
<version>2.7.0</version>
</dependency>
以上准备好了,就可以直接在java类中写python语句了,具体代码如下:
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("a=[5,2,3,9,4,0]; ");
interpreter.exec("print(sorted(a));"); //此处python语句是3.x版本的语法
interpreter.exec("print sorted(a);"); //此处是python语句是2.x版本的语法
输出结果如下:这里会看到输出的结果都是一样的,也就是说Jpython兼容python2.x和3.x版本的语句,运行速度会比直接运行python程序稍慢一点。
但是每次运行结果都会提示console: Failed to install ”: java.nio.charset.UnsupportedCharsetException: cp0. 这样看起来很烦,因为每次运行结果都会出现红色的提示语句,以为是错误,程序员应该都不愿意看到这一幕,得想个办法解决。
解决方法如下:
在要执行的代码上右键, Run As>Run Configurations,选择第二个页签Arguments,在VM arguments中添加以下语句
-Dpython.console.encoding=UTF-8
然后Apply->Run就可以了。
5. Java开发想尝试大数据和数据挖掘,如何规划学习
大数据前景是很不错的,像大数据这样的专业还是一线城市比较好,师资力量跟得上、就业的薪资也是可观的,学习大数据可以按照路线图的顺序,
学大数据关键是找到靠谱的大数据培训机构,你可以深度了解机构的口碑情况,问问周围知道这家机构的人,除了口碑再了解机构的以下几方面:
1.师资力量雄厚
要想有1+1>2的实际效果,很关键的一点是师资队伍,你接下来无论是找个工作还是工作中出任哪些的人物角色,都越来越爱你本身的技术专业大数据技术性,也许的技术专业大数据技术性则绝大多数来自你的技术专业大数据教师,一个好的大数据培训机构必须具备雄厚的师资力量。
2. 就业保障完善
实现1+1>2效果的关键在于能够为你提供良好的发展平台,即能够为你提供良好的就业保障,让学员能够学到实在实在的知识,并向大数据学员提供一对一的就业指导,确保学员找到自己的心理工作。
3. 学费性价比高
一个好的大数据培训机构肯定能给你带来1+1>2的效果,如果你在一个由专业的大数据教师领导并由大数据培训机构自己提供的平台上工作,你将获得比以往更多的投资。
希望你早日学有所成。
6. maven打包成jar找不到main-class
pom.xml 报错先调试好
测试类需要继承TestCase
编译后\target\test-classes下面要有class和测试需要的资源文件,就需要在pom.xml中加
<build><testResources><testResource><directory> src/main/resources</directory><filtering>true</filtering></testResource></testResources></build>
7. 阿里云如何查看flink的Web Dashboard
阿里云帮助中心查看下,没有相关介绍的话 最好提交工单咨询阿里云技术
8. apache flink支持sql吗
org.apache.jsp.check_005flinkcard_jsp._jspService(org.apache.jsp.check_005flinkcard_jsp:102)可以看出你写的jsp在运行期遇到空指针错误,如果是tomcat可以到apache-tomcat-6.0.16\work\Catalina\localhost\testhttps\org\apache\jsp地方找到check_005flinkcard_jsp.java的102行,查看jsp编译成java文件的源码
9. 网上找的几行代码,编译出现很多错误,帮我看下
PLIST_ENTRY Head,Cur;
PPEB_LDR_DATA ldr;
PLDR_MODULE ldm;
这个几个变量类型生的很,vc的库里似乎没有。你要确认这几个数据类型已经定义,应该还有头文件,如果只是简单的粘贴这段代码,肯定出错。
10. 如何选择Apache Spark和Apache Flink
我们是否还需要另外一个新的数据处理引擎?当我第一次听到flink的时候这是我是非常怀疑的。在大数据领域,现在已经不缺少数据处理框架了,但是没有一个框架能够完全满足不同的处理需求。自从Apache spark出现后,貌似已经成为当今把大部分的问题解决得最好的框架了,所以我对另外一款解决类似问题的框架持有很强烈的怀疑态度。
不过因为好奇,我花费了数个星期在尝试了解flink。一开始仔细看了flink的几个例子,感觉和spark非常类似,心理就倾向于认为flink又是一个模仿spark的框架。但是随着了解的深入,这些API体现了一些flink的新奇的思路,这些思路还是和spark有着比较明显的区别的。我对这些思路有些着迷了,所以花费了更多的时间在这上面。
flink中的很多思路,例如内存管理,dataset API都已经出现在spark中并且已经证明 这些思路是非常靠谱的。所以,深入了解flink也许可以帮助我们分布式数据处理的未来之路是怎样的
在后面的文章里,我会把自己作为一个spark开发者对flink的第一感受写出来。因为我已经在spark上干了2年多了,但是只在flink上接触了2到3周,所以必然存在一些bias,所以大家也带着怀疑和批判的角度来看这篇文章吧。
Apache Flink是什么
flink是一款新的大数据处理引擎,目标是统一不同来源的数据处理。这个目标看起来和spark和类似。没错,flink也在尝试解决spark在解决的问题。这两套系统都在尝试建立一个统一的平台可以运行批量,流式,交互式,图处理,机器学习等应用。所以,flink和spark的目标差别并不大,他们最主要的区别在于实现的细节。
后面我会重点从不同的角度对比这两者。
Apache Spark vs Apache Flink
1.抽象 Abstraction
spark中,对于批处理我们有RDD,对于流式,我们有DStream,不过内部实际还是RDD.所以所有的数据表示本质上还是RDD抽象。
后面我会重点从不同的角度对比这两者。在flink中,对于批处理有DataSet,对于流式我们有DataStreams。看起来和spark类似,他们的不同点在于:
一)DataSet在运行时是表现为运行计划(runtime plans)的
在spark中,RDD在运行时是表现为java objects的。通过引入Tungsten,这块有了些许的改变。但是在flink中是被表现为logical plan(逻辑计划)的,听起来很熟悉?没错,就是类似于spark中的dataframes。所以在flink中你使用的类Dataframe api是被作为第一优先级来优化的。但是相对来说在spark RDD中就没有了这块的优化了。
flink中的Dataset,对标spark中的Dataframe,在运行前会经过优化。
在spark 1.6,dataset API已经被引入spark了,也许最终会取代RDD 抽象。
二)Dataset和DataStream是独立的API
在spark中,所有不同的API,例如DStream,Dataframe都是基于RDD抽象的。但是在flink中,Dataset和DataStream是同一个公用的引擎之上两个独立的抽象。所以你不能把这两者的行为合并在一起操作,当然,flink社区目前在朝这个方向努力(https://issues.apache.org/jira/browse/FLINK-2320),但是目前还不能轻易断言最后的结果。
2.内存管理
一直到1.5版本,spark都是试用java的内存管理来做数据缓存,明显很容易导致OOM或者gc。所以从1.5开始,spark开始转向精确的控制内存的使用,这就是tungsten项目了
flink从第一天开始就坚持自己控制内存试用。这个也是启发了spark走这条路的原因之一。flink除了把数据存在自己管理的内存以外,还直接操作二进制数据。在spark中,从1.5开始,所有的dataframe操作都是直接作用在tungsten的二进制数据上。
3.语言实现
spark是用scala来实现的,它提供了Java,Python和R的编程接口。
flink是java实现的,当然同样提供了Scala API
所以从语言的角度来看,spark要更丰富一些。因为我已经转移到scala很久了,所以不太清楚这两者的java api实现情况。
4.API
spark和flink都在模仿scala的collection API.所以从表面看起来,两者都很类似。下面是分别用RDD和DataSet API实现的word count
// Spark wordcount
object WordCount {
def main(args: Array[String]) {
val env = new SparkContext("local","wordCount")
val data = List("hi","how are you","hi")
val dataSet = env.parallelize(data)
val words = dataSet.flatMap(value => value.split("\\s+"))
val mappedWords = words.map(value => (value,1))
val sum = mappedWords.receByKey(_+_)
println(sum.collect())
}
}
// Flink wordcount
object WordCount {
def main(args: Array[String]) {
val env = ExecutionEnvironment.getExecutionEnvironment
val data = List("hi","how are you","hi")
val dataSet = env.fromCollection(data)
val words = dataSet.flatMap(value => value.split("\\s+"))
val mappedWords = words.map(value => (value,1))
val grouped = mappedWords.groupBy(0)
val sum = grouped.sum(1)
println(sum.collect())
}
}
不知道是偶然还是故意的,API都长得很像,这样很方便开发者从一个引擎切换到另外一个引擎。我感觉以后这种Collection API会成为写data pipeline的标配。
Steaming
spark把streaming看成是更快的批处理,而flink把批处理看成streaming的special case。这里面的思路决定了各自的方向,其中两者的差异点有如下这些:
实时 vs 近实时的角度
flink提供了基于每个事件的流式处理机制,所以可以被认为是一个真正的流式计算。它非常像storm的model。
而spark,不是基于事件的粒度,而是用小批量来模拟流式,也就是多个事件的集合。所以spark被认为是近实时的处理系统。
Spark streaming 是更快的批处理,而Flink Batch是有限数据的流式计算。
虽然大部分应用对准实时是可以接受的,但是也还是有很多应用需要event level的流式计算。这些应用更愿意选择storm而非spark streaming,现在,flink也许是一个更好的选择。
流式计算和批处理计算的表示
spark对于批处理和流式计算,都是用的相同的抽象:RDD,这样很方便这两种计算合并起来表示。而flink这两者分为了DataSet和DataStream,相比spark,这个设计算是一个糟糕的设计。
对 windowing 的支持
因为spark的小批量机制,spark对于windowing的支持非常有限。只能基于process time,且只能对batches来做window。
而Flink对window的支持非常到位,且Flink对windowing API的支持是相当给力的,允许基于process time,data time,record 来做windowing。
我不太确定spark是否能引入这些API,不过到目前为止,Flink的windowing支持是要比spark好的。
Steaming这部分flink胜
SQL interface
目前spark-sql是spark里面最活跃的组件之一,Spark提供了类似Hive的sql和Dataframe这种DSL来查询结构化数据,API很成熟,在流式计算中使用很广,预计在流式计算中也会发展得很快。
至于flink,到目前为止,Flink Table API只支持类似DataFrame这种DSL,并且还是处于beta状态,社区有计划增加SQL 的interface,但是目前还不确定什么时候才能在框架中用上。
所以这个部分,spark胜出。
Data source Integration
Spark的数据源 API是整个框架中最好的,支持的数据源包括NoSql db,parquet,ORC等,并且支持一些高级的操作,例如predicate push down
Flink目前还依赖map/rece InputFormat来做数据源聚合。
这一场spark胜
Iterative processing
spark对机器学习的支持较好,因为可以在spark中利用内存cache来加速机器学习算法。
但是大部分机器学习算法其实是一个有环的数据流,但是在spark中,实际是用无环图来表示的,一般的分布式处理引擎都是不鼓励试用有环图的。
但是flink这里又有点不一样,flink支持在runtime中的有环数据流,这样表示机器学习算法更有效而且更有效率。
这一点flink胜出。
Stream as platform vs Batch as Platform
Spark诞生在Map/Rece的时代,数据都是以文件的形式保存在磁盘中,这样非常方便做容错处理。
Flink把纯流式数据计算引入大数据时代,无疑给业界带来了一股清新的空气。这个idea非常类似akka-streams这种。
成熟度
目前的确有一部分吃螃蟹的用户已经在生产环境中使用flink了,不过从我的眼光来看,Flink还在发展中,还需要时间来成熟。
结论
目前Spark相比Flink是一个更为成熟的计算框架,但是Flink的很多思路很不错,Spark社区也意识到了这一点,并且逐渐在采用Flink中的好的设计思路,所以学习一下Flink能让你了解一下Streaming这方面的更迷人的思路。