Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Flink ÆÊÎö
 
  1811  次浏览      32
 2019-5-8
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬±¾ÎÄÖ÷Òª½éÉÜÁË¶Ô Flink ×öÒ»¸ö¼òÒªµÄÆÊÎöÈÏʶÒÔ¼° Flink°æ±¾ÖÐ µÄ½Ó¿ÚÖ§³Ö£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

1.¸ÅÊö

ÔÚÈç½ñÊý¾Ý±¬Õ¨µÄʱ´ú£¬ÆóÒµµÄÊý¾ÝÁ¿ÓëÈÕ¾ãÔö£¬´óÊý¾Ý²úÆ·²ã³ö²»Çî¡£½ñÌì¸ø´ó¼Ò·ÖÏíÒ»¿î²úÆ·¡ª¡ª Apache Flink£¬Ä¿Ç°£¬ÒÑÊÇ Apache ¶¥¼¶ÏîĿ֮һ¡£ÄÇô£¬½ÓÏÂÀ´£¬±ÊÕßΪ´ó¼Ò½éÉÜFlink µÄÏà¹ØÄÚÈÝ¡£

2.ÄÚÈÝ

2.1 What's Flink

Apache Flink ÊÇÒ»¸öÃæÏò·Ö²¼Ê½Êý¾ÝÁ÷´¦ÀíºÍÅúÁ¿Êý¾Ý´¦ÀíµÄ¿ªÔ´¼ÆËãÆ½Ì¨£¬ËüÄܹ»»ùÓÚͬһ¸öFlinkÔËÐÐʱ£¨Flink Runtime£©£¬Ìṩ֧³ÖÁ÷´¦ÀíºÍÅú´¦ÀíÁ½ÖÖÀàÐÍÓ¦ÓõŦÄÜ¡£ÏÖÓеĿªÔ´¼ÆËã·½°¸£¬»á°ÑÁ÷´¦ÀíºÍÅú´¦Àí×÷ΪÁ½ÖÖ²»Í¬µÄÓ¦ÓÃÀàÐÍ£¬ÒòΪËûÃÇËüÃÇËùÌṩµÄSLAÊÇÍêÈ«²»ÏàͬµÄ£ºÁ÷´¦ÀíÒ»°ãÐèÒªÖ§³ÖµÍÑÓ³Ù¡¢Exactly-once±£Ö¤£¬¶øÅú´¦ÀíÐèÒªÖ§³Ö¸ßÍÌÍ¡¢¸ßЧ´¦Àí£¬ËùÒÔÔÚʵÏÖµÄʱºòͨ³£ÊÇ·Ö±ð¸ø³öÁ½Ì×ʵÏÖ·½·¨£¬»òÕßͨ¹ýÒ»¸ö¶ÀÁ¢µÄ¿ªÔ´¿ò¼ÜÀ´ÊµÏÖÆäÖÐÿһÖÖ´¦Àí·½°¸¡£ÀýÈ磬ʵÏÖÅú´¦ÀíµÄ¿ªÔ´·½°¸ÓÐMapReduce¡¢Tez¡¢Crunch¡¢Spark£¬ÊµÏÖÁ÷´¦ÀíµÄ¿ªÔ´·½°¸ÓÐSamza¡¢Storm¡£ FlinkÔÚʵÏÖÁ÷´¦ÀíºÍÅú´¦Àíʱ£¬Ó봫ͳµÄһЩ·½°¸ÍêÈ«²»Í¬£¬Ëü´ÓÁíÒ»¸öÊӽǿ´´ýÁ÷´¦ÀíºÍÅú´¦Àí£¬½«¶þÕßͳһÆðÀ´£ºFlinkÊÇÍêȫ֧³ÖÁ÷´¦Àí£¬Ò²¾ÍÊÇ˵×÷ΪÁ÷´¦Àí¿´´ýʱÊäÈëÊý¾ÝÁ÷ÊÇÎÞ½çµÄ£»Åú´¦Àí±»×÷ΪһÖÖÌØÊâµÄÁ÷´¦Àí£¬Ö»ÊÇËüµÄÊäÈëÊý¾ÝÁ÷±»¶¨ÒåΪÓнçµÄ¡£»ùÓÚͬһ¸öFlinkÔËÐÐʱ£¨Flink Runtime£©£¬·Ö±ðÌṩÁËÁ÷´¦ÀíºÍÅú´¦ÀíAPI£¬¶øÕâÁ½ÖÖAPIÒ²ÊÇʵÏÖÉϲãÃæÏòÁ÷´¦Àí¡¢Åú´¦ÀíÀàÐÍÓ¦Óÿò¼ÜµÄ»ù´¡¡£

Flink ÊÇÒ»¿îеĴóÊý¾Ý´¦ÀíÒýÇæ£¬Ä¿±êÊÇͳһ²»Í¬À´Ô´µÄÊý¾Ý´¦Àí¡£Õâ¸öÄ¿±ê¿´ÆðÀ´ºÍ Spark ºÍÀàËÆ¡£ÕâÁ½Ì×ϵͳ¶¼ÔÚ³¢ÊÔ½¨Á¢Ò»¸öͳһµÄƽ̨¿ÉÒÔÔËÐÐÅúÁ¿£¬Á÷ʽ£¬½»»¥Ê½£¬Í¼´¦Àí£¬»úÆ÷ѧϰµÈÓ¦Óá£ËùÒÔ£¬Flink ºÍ Spark µÄÄ¿±ê²îÒì²¢²»´ó£¬ËûÃÇ×îÖ÷ÒªµÄÇø±ðÔÚÓÚʵÏÖµÄϸ½Ú¡£

ÏÂÃæ¸½ÉÏ Flink ¼¼ÊõÕ»µÄÒ»¸ö×ÜÀÀ£¬ÈçÏÂͼËùʾ£º

2.2 Compare

Á˽â Flink µÄ×÷ÓúÍÓÅȱµã£¬ÐèÒªÓÐÒ»¸ö²ÎÕÕÎÕâÀ±ÊÕßÒÔËüÓë Spark À´¶Ô±È²ûÊö¡£´Ó³éÏó²ã£¬ÄÚ´æ¹ÜÀí£¬ÓïÑÔʵÏÖ£¬ÒÔ¼° API ºÍ SQL µÈ·½ÃæÀ´×¸Êö¡£

2.2.1 Abstraction

½Ó´¥¹ý Spark µÄͬѧ£¬Ó¦¸Ã±È½ÏÊìϤ£¬ÔÚ´¦ÀíÅú´¦ÀíÈÎÎñ£¬¿ÉÒÔʹÓà RDD£¬¶ø¶ÔÓÚÁ÷´¦Àí£¬¿ÉÒÔʹÓà Streaming£¬È»ÆäÊÀ¼Í»¹ÊÇ RDD£¬ËùÒÔ±¾ÖÊÉÏ»¹ÊÇ RDD ³éÏó¶øÀ´¡£µ«ÊÇ£¬ÔÚ Flink ÖУ¬Åú´¦ÀíÓà DataSet£¬¶ÔÓÚÁ÷´¦Àí£¬ÓÐ DataStreams¡£Ë¼ÏëÀàËÆ£¬µ«È´ÓÐËù²»Í¬£ºÆäÒ»£¬DataSet ÔÚÔËÐÐʱ±íÏÖΪ Runtime Plans£¬¶øÔÚ Spark ÖУ¬RDD ÔÚÔËÐÐʱ±íÏÖΪ Java Objects¡£ÔÚ Flink ÖÐÓÐ Logical Plan £¬ÕâºÍ Spark ÖÐµÄ DataFrames ÀàËÆ¡£Òò¶ø£¬ÔÚ Flink ÖУ¬ÈôÊÇʹÓÃÕâÀà API £¬»á±»ÓÅÏÈÀ´ÓÅ»¯£¨¼´£º×Ô¶¯ÓÅ»¯µü´ú£©¡£ÈçÏÂͼËùʾ£º

È»¶ø£¬ÔÚ Spark ÖУ¬RDD ¾ÍûÓÐÕâ¿éµÄÏà¹ØÓÅ»¯£¬ÈçÏÂͼËùʾ£º

ÁíÍ⣬DataSet ºÍ DataStream ÊÇÏà¶Ô¶ÀÁ¢µÄ API£¬ÔÚ Spark ÖУ¬ËùÓв»Í¬µÄ API£¬±ÈÈç Streaming£¬DataFrame ¶¼ÊÇ»ùÓÚ RDD ³éÏóµÄ¡£È»¶øÔÚ Flink ÖУ¬DataSet ºÍ DataStream ÊÇͬһ¸ö¹«ÓÃÒýÇæÖ®ÉϵÄÁ½¸ö¶ÀÁ¢µÄ³éÏó¡£ËùÒÔ£¬²»ÄܰÑÕâÁ½ÕßµÄÐÐΪºÏ²¢ÔÚÒ»Æð²Ù×÷£¬Ä¿Ç°¹Ù·½ÕýÔÚ´¦ÀíÕâÖÖÎÊÌ⣬Ïê¼û£ÛFLINK-2320£Ý

2.2.2 Memory

ÔÚ֮ǰµÄ°æ±¾£¨1.5ÒÔǰ£©£¬Spark ÑÓÓà Java µÄÄÚ´æ¹ÜÀíÀ´×öÊý¾Ý»º´æ£¬ÕâÑùºÜÈÝÒ×µ¼Ö OOM »òÕß GC¡£Ö®ºó£¬Spark ¿ªÊ¼×ªÏòÁíÍâ¸ü¼ÓÓѺú;«×¼µÄ¿ØÖÆÄڴ棬¼´£ºTungsten ÏîÄ¿¡£È»¶ø£¬¶ÔÓÚ Flink À´Ëµ£¬´ÓÒ»¿ªÊ¼¾Í¼á³ÖʹÓÃ×Ô¼º¿ØÖÆÄÚ´æ¡£Flink ³ý°ÑÊý¾Ý´æÔÚ×Ô¼º¹ÜÀíµÄÄÚ´æÖ®Í⣬»¹Ö±½Ó²Ù×÷¶þ½øÖÆÊý¾Ý¡£ÔÚ Spark 1.5Ö®ºóµÄ°æ±¾¿ªÊ¼£¬ËùÓÐµÄ DataFrame ²Ù×÷¶¼ÊÇÖ±½Ó×÷ÓÃÓÚ Tungsten µÄ¶þ½øÖÆÊý¾ÝÉÏ¡£

PS£ºTungsten ÏîÄ¿½«ÊÇ Spark ×Ôµ®ÉúÒÔÀ´Äں˼¶±ðµÄ×î´ó¸Ä¶¯£¬ÒÔ´ó·ù¶ÈÌáÉý Spark Ó¦ÓóÌÐòµÄÄÚ´æºÍ CPU ÀûÓÃÂÊΪĿ±ê£¬Ö¼ÔÚ×î´ó³Ì¶ÈÉÏÀûÓÃÓ²¼þÐÔÄÜ¡£¸ÃÏîÄ¿°üÀ¨ÁËÈý¸ö·½ÃæµÄ¸Ä½ø£º

ÄÚ´æ¹ÜÀíºÍ¶þ½øÖÆ´¦Àí£º¸ü¼ÓÃ÷È·µÄ¹ÜÀíÄڴ棬Ïû³ý JVM ¶ÔÏóÄ£ÐͺÍÀ¬»ø»ØÊÕ¿ªÏú¡£

»º´æÓѺüÆË㣺ʹÓÃËã·¨ºÍÊý¾Ý½á¹¹À´ÊµÏÖÄÚ´æ·Ö¼¶½á¹¹¡£

´úÂëÉú³É£ºÊ¹ÓôúÂëÉú³ÉÀ´ÀûÓÃÐÂÐͱàÒëÆ÷ºÍ CPU¡£

2.2.3 Program

Spark ʹÓà Scala À´ÊµÏֵģ¬ËüÌṩÁË Java£¬Python ÒÔ¼° R ÓïÑԵıà³Ì½Ó¿Ú¡£¶ø¶ÔÓÚ Flink À´Ëµ£¬ËüÊÇʹÓà Java ʵÏֵģ¬Ìṩ Scala ±à³Ì API¡£´Ó±à³ÌÓïÑԵĽǶÈÀ´¿´£¬Spark ÂÔÏԷḻһЩ¡£

2.2.4 API

Spark ºÍ Flink Á½Õß¶¼ÇãÏòÓÚʹÓà Scala À´ÊµÏÖ¶ÔÓ¦µÄÒµÎñ¡£¶Ô±ÈÁ½ÕßµÄ WordCount ʾÀý£¬ºÜÀàËÆ¡£ÈçÏÂËùʾ£¬·Ö±ðΪ RDD ºÍ DataSet API µÄʾÀý´úÂ룺

RDD

// Spark WordCount
object WordCount {
def main(args: Array[String]) {
val env = new SparkContext("local","WordCount")
val data = List("hi","spark cluster","hi","spark")
val dataSet = env.parallelize(data)
val words = dataSet.flatMap(value => value.split("\\s+"))
val mappedWords = words.map(value => (value,1))
val sum = mappedWords.reduceByKey(_+_)
println(sum.collect())
}
}

DataSet

// Flink WordCount
object WordCount {
def main(args: Array[String]) {
val env = ExecutionEnvironment.getExecutionEnvironment
val data = List("hello","flink cluster","hello")
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())
}
}

¶ÔÓÚ Streaming£¬Spark °ÑËü¿´³É¸ü¿ìµÄÅú´¦Àí£¬¶ø Flink °ÑÅú´¦Àí¿´³É Streaming µÄÌØÊâÀý×Ó£¬²îÒìÈçÏ£ºÆäÒ»£¬ÔÚʵʱ¼ÆËãÎÊÌâÉÏ£¬Flink ÌṩÁË»ùÓÚÿ¸öʼþµÄÁ÷ʽ´¦Àí»úÖÆ£¬ËùÒÔËü¿ÉÒÔ±»ÈÏΪÊÇÒ»¸öÕæÕýÒâÒåÉϵÄÁ÷ʽ¼ÆË㣬ÀàËÆÓÚ Storm µÄ¼ÆËãÄ£ÐÍ¡£¶ø¶ÔÓÚ Spark À´Ëµ£¬²»ÊÇ»ùÓÚʼþÁ£¶ÈµÄ£¬¶øÊÇÓÃСÅúÁ¿À´Ä£ÄâÁ÷ʽ£¬Ò²¾ÍÊǶà¸öʼþµÄ¼¯ºÏ¡£ËùÒÔ£¬Spark ±»ÈÏΪÊÇÒ»¸ö½Ó½üʵʱµÄ´¦Àíϵͳ¡£ËäÈ»£¬´ó²¿·ÖÓ¦ÓÃʵʱÊÇ¿ÉÒÔ½ÓÊܵ쬵«¶ÔÓںܶàÓ¦ÓÃÐèÒª»ùÓÚʼþ¼¶±ðµÄÁ÷ʽ¼ÆËã¡£Òò¶ø£¬»áÑ¡Ôñ Storm ¶ø²»ÊÇ Spark Streaming£¬ÏÖÔÚ£¬Flink Ò²ÐíÊÇÒ»¸ö²»´íµÄÑ¡Ôñ¡£

2.2.5 SQL

Ŀǰ£¬Spark SQL ÊÇÆä×é¼þÖнÏΪ»îÔ¾µÄÒ»²¿·Ö£¬ËüÌṩÁËÀàËÆÓÚ Hive SQL À´²éѯ½á¹¹»¯Êý¾Ý£¬API ÒÀÈ»ºÜ³ÉÊì¡£¶ÔÓÚ Flink À´Ëµ£¬½ØÖÁµ½Ä¿Ç° 1.0 °æ±¾£¬Ö»Ö§³Ö Flink Table API£¬¹Ù·½ÔÚ Flink 1.1 °æ±¾ÖлáÌí¼Ó SQL µÄ½Ó¿ÚÖ§³Ö¡££ÛFlink 1.1 SQL ÏêÇ鼯»®£Ý

3.Features

Flink °üº¬Ò»ÏÂÌØÐÔ£º

¸ßÍÌÍ & µÍÑÓʱ

Ö§³Ö Event Time & ÂÒÐòʼþ

״̬¼ÆËãµÄ Exactly-Once ÓïÒå

¸ß¶ÈÁé»îµÄÁ÷ʽ´°¿Ú

´ø·´Ñ¹µÄÁ¬ÐøÁ÷Ä£ÐÍ

ÈÝ´íÐÔ

Á÷´¦ÀíºÍÅú´¦Àí¹²ÓÃÒ»¸öÒýÇæ

ÄÚ´æ¹ÜÀí

µü´ú & ÔöÁ¿µü´ú

³ÌÐòµ÷ÓÅ

Á÷´¦ÀíÓ¦ÓÃ

Åú´¦ÀíÓ¦ÓÃ

Àà¿âÉú̬

¹ã·º¼¯³É

3.1 ¸ßÍÌÍ & µÍÑÓʱ

Flink µÄÁ÷´¦ÀíÒýÇæÖ»ÐèÒªºÜÉÙÅäÖþÍÄÜʵÏÖ¸ßÍÌÍÂÂʺ͵ÍÑÓ³Ù¡£ÏÂͼչʾÁËÒ»¸ö·Ö²¼Ê½¼ÆÊýµÄÈÎÎñµÄÐÔÄÜ£¬°üÀ¨ÁËÁ÷Êý¾Ý shuffle ¹ý³Ì¡£

3.2 Ö§³Ö Event Time & ÂÒÐòʼþ

Flink Ö§³ÖÁËÁ÷´¦ÀíºÍ Event Time ÓïÒåµÄ´°¿Ú»úÖÆ¡£Event time ʹµÃ¼ÆËãÂÒÐòµ½´ïµÄʼþ»ò¿ÉÄÜÑÓ³Ùµ½´ïµÄʼþ¸ü¼Ó¼òµ¥¡£ÈçÏÂͼËùʾ£º

3.3 ״̬¼ÆËãµÄ exactly-once ÓïÒå

Á÷³ÌÐò¿ÉÒÔÔÚ¼ÆËã¹ý³ÌÖÐά»¤×Ô¶¨Òå״̬¡£Flink µÄ checkpointing »úÖÆ±£Ö¤Á˼´Ê±ÔÚ¹ÊÕÏ·¢ÉúÏÂÒ²Äܱ£ÕÏ״̬µÄ exactly once ÓïÒå¡£

3.4 ¸ß¶ÈÁé»îµÄÁ÷ʽ´°¿Ú

Flink Ö§³ÖÔÚʱ¼ä´°¿Ú£¬Í³¼Æ´°¿Ú£¬session ´°¿Ú£¬ÒÔ¼°Êý¾ÝÇý¶¯µÄ´°¿Ú£¬´°¿Ú¿ÉÒÔͨ¹ýÁé»îµÄ´¥·¢Ìõ¼þÀ´¶¨ÖÆ£¬ÒÔÖ§³Ö¸´ÔÓµÄÁ÷¼ÆËãģʽ¡£

3.5 ´ø·´Ñ¹µÄÁ¬ÐøÁ÷Ä£ÐÍ

Êý¾ÝÁ÷Ó¦ÓÃÖ´ÐеÄÊDz»¼ä¶ÏµÄ£¨³£×¤£©operators¡£Flink streaming ÔÚÔËÐÐʱÓÐ×ÅÌìÈ»µÄÁ÷¿Ø£ºÂýµÄÊý¾Ý sink ½Úµã»á·´Ñ¹£¨backpressure£©¿ìµÄÊý¾ÝÔ´£¨sources£©¡£

3.6 ÈÝ´íÐÔ

Flink µÄÈÝ´í»úÖÆÊÇ»ùÓÚ Chandy-Lamport distributed snapshots À´ÊµÏֵġ£ÕâÖÖ»úÖÆÊǷdz£ÇáÁ¿¼¶µÄ£¬ÔÊÐíϵͳӵÓиßÍÌÍÂÂʵÄͬʱ»¹ÄÜÌṩǿһÖÂÐԵı£ÕÏ¡£

3.7 Á÷´¦ÀíºÍÅú´¦Àí¹²ÓÃÒ»¸öÒýÇæ

Flink ΪÁ÷´¦ÀíºÍÅú´¦ÀíÓ¦Óù«ÓÃÒ»¸öͨÓõÄÒýÇæ¡£Åú´¦ÀíÓ¦ÓÿÉÒÔÒÔÒ»ÖÖÌØÊâµÄÁ÷´¦ÀíÓ¦ÓøßЧµØÔËÐС£ÈçÏÂͼËùʾ£º

3.8 ÄÚ´æ¹ÜÀí

Flink ÔÚ JVM ÖÐʵÏÖÁË×Ô¼ºµÄÄÚ´æ¹ÜÀí¡£Ó¦ÓÿÉÒÔ³¬³öÖ÷ÄÚ´æµÄ´óСÏÞÖÆ£¬²¢ÇÒ³ÐÊܸüÉÙµÄÀ¬»øÊÕ¼¯µÄ¿ªÏú¡£

3.9 µü´úºÍÔöÁ¿µü´ú

Flink ¾ßÓеü´ú¼ÆËãµÄרÃÅÖ§³Ö£¨±ÈÈçÔÚ»úÆ÷ѧϰºÍͼ¼ÆËãÖУ©¡£ÔöÁ¿µü´ú¿ÉÒÔÀûÓÃÒÀÀµ¼ÆËãÀ´¸ü¿ìµØÊÕÁ²¡£ÈçÏÂͼËùʾ£º

3.10 ³ÌÐòµ÷ÓÅ

Åú´¦Àí³ÌÐò»á×Ô¶¯µØÓÅ»¯Ò»Ð©³¡¾°£¬±ÈÈç±ÜÃâһЩ°º¹óµÄ²Ù×÷£¨Èç shuffles ºÍ sorts£©£¬»¹Óлº´æÒ»Ð©ÖмäÊý¾Ý¡£

3.11 Á÷´¦ÀíÓ¦ÓÃ

DataStream API Ö§³ÖÁËÊý¾ÝÁ÷Éϵĺ¯Êýʽת»»£¬¿ÉÒÔʹÓÃ×Ô¶¨ÒåµÄ״̬ºÍÁé»îµÄ´°¿Ú¡£ÏÂÃæÊ¾ÀýչʾÁËÈçºÎÒÔ»¬¶¯´°¿ÚµÄ·½Ê½Í³¼ÆÎı¾Êý¾ÝÁ÷Öе¥´Ê³öÏֵĴÎÊý¡£

case class Word(word: String, freq: Long)

val texts: DataStream[String] = ...

val counts = text
.flatMap { line => line.split("\\W+") }
.map { token => Word(token, 1) }
.keyBy("word")
.timeWindow(Time.seconds(5), Time.seconds(1))
.sum("freq")

3.12 Åú´¦ÀíÓ¦ÓÃ

Flink µÄ DataSet API ¿ÉÒÔʹÄãÓà Java »ò Scala д³öƯÁÁµÄ¡¢ÀàÐͰ²È«µÄ¡¢¿Éά»¤µÄ´úÂë¡£ËüÖ§³Ö¹ã·ºµÄÊý¾ÝÀàÐÍ£¬²»½ö½öÊÇ key/value ¶Ô£¬ÒÔ¼°·á¸»µÄ operators¡£ÏÂÃæÊ¾ÀýչʾÁËͼ¼ÆËãÖÐ PageRank Ëã·¨µÄÒ»¸öºËÐÄÑ­»·¡£

case class Page(pageId: Long, rank: Double)
case class Adjacency(id: Long, neighbors: Array[Long])

val result = initialRanks.iterate(30) { pages =>
pages.join(adjacency).where("pageId").equalTo("pageId") {

(page, adj, out : Collector[Page]) => {
out.collect(Page(page.id, 0.15 / numPages))

for (n <- adj.neighbors) {
out.collect(Page(n, 0.85*page.rank/adj.neighbors.length))
}
}
}
.groupBy("pageId").sum("rank")
}

3.13 Àà¿âÉú̬

Flink Õ»ÖÐÌṩÁ˺ܶà¸ß¼¶ API ºÍÂú×㲻ͬ³¡¾°µÄÀà¿â£º»úÆ÷ѧϰ¡¢Í¼·ÖÎö¡¢¹ØÏµÊ½Êý¾Ý´¦Àí¡£µ±Ç°Àà¿â»¹ÔÚ beta ״̬£¬²¢ÇÒÔÚ´óÁ¦·¢Õ¹¡£

3.14 ¹ã·º¼¯³É

Flink Ó뿪Դ´óÊý¾Ý´¦ÀíÉú̬ϵͳÖеÄÐí¶àÏîÄ¿¶¼Óм¯³É¡£Flink ¿ÉÒÔÔËÐÐÔÚ YARN ÉÏ£¬Óë HDFS Эͬ¹¤×÷£¬´Ó Kafka ÖжÁÈ¡Á÷Êý¾Ý£¬¿ÉÒÔÖ´ÐÐ Hadoop ³ÌÐò´úÂ룬¿ÉÒÔÁ¬½Ó¶àÖÖÊý¾Ý´æ´¢ÏµÍ³¡£ÈçÏÂͼËùʾ£º

4.×ܽá

ÒÔÉÏ£¬±ãÊÇ¶Ô Flink ×öÒ»¸ö¼òÒªµÄÆÊÎöÈÏʶ£¬ÖÁÓÚÈçºÎʹÓà Flink£¬ÒÔ¼°Æä±àÒ룬°²×°£¬²¿Êð£¬ÔËÐеÈÁ÷³Ì£¬½ÏΪ¼òµ¥£¬ÕâÀï¾Í²»¶à×ö׸ÊöÁË£¬´ó¼Ò¿ÉÒÔÔÚ Flink µÄ¹ÙÍø£¬ÔĶÁÆä QuickStart ¼´¿É£¬£Û·ÃÎʵØÖ·£Ý¡£

5.½áÊøÓï

ÕâÆª²©¿Í¾ÍºÍ´ó¼Ò·ÖÏíµ½ÕâÀÈç¹û´ó¼ÒÔÚÑо¿Ñ§Ï°µÄ¹ý³Ìµ±ÖÐÓÐʲôÎÊÌ⣬¿ÉÒÔ¼ÓȺ½øÐÐÌÖÂÛ»ò·¢ËÍÓʼþ¸øÎÒ£¬ÎһᾡÎÒËùÄÜΪÄú½â´ð£¬Óë¾ý¹²Ã㣡

 

   
1811 ´Îä¯ÀÀ       32
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ