日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flink sql udf jar包_Flink 生态:一个案例快速上手 PyFlink

發(fā)布時(shí)間:2023/12/9 编程问答 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flink sql udf jar包_Flink 生态:一个案例快速上手 PyFlink 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡介: Flink 從 1.9.0 版本開始增加了對 Python 的支持(PyFlink),在剛剛發(fā)布的 Flink 1.10 中,PyFlink 添加了對 Python UDFs 的支持,現(xiàn)在可以在 Table API/SQL 中注冊并使用自定義函數(shù)。PyFlink 的架構(gòu)如何,適用于哪些場景?本文將詳細(xì)解析并進(jìn)行 CDN 日志分析的案例演示。

作者:孫金城(金竹)
Flink 從 1.9.0 版本開始增加了對 Python 的支持(PyFlink),在剛剛發(fā)布的 Flink 1.10 中,PyFlink 添加了對 Python UDFs 的支持,現(xiàn)在可以在 Table API/SQL 中注冊并使用自定義函數(shù)。PyFlink 的架構(gòu)如何,適用于哪些場景?本文將詳細(xì)解析并進(jìn)行 CDN 日志分析的案例演示。
PyFlink 的必要性
Flink on Python and Python on Flink
PyFlink 是什么?這個(gè)問題也許會讓人感覺問題的答案太明顯了,那就是 Flink + Python,也就是 Flink on Python。那么到底 Flink on Python 意味著這什么呢?那么一個(gè)非常容易想到的方面就是能夠讓 Python 用享受到 Flink 的所有功能。其實(shí)不僅如此,PyFlink 的存在還有另外一個(gè)非常重要的意義就是,Python on Flink,我們可以將 Python 豐富的生態(tài)計(jì)算能力運(yùn)行在 Flink 框架之上,這將極大的推動(dòng) Python 生態(tài)的發(fā)展。其實(shí),如果你再仔細(xì)深究一下,你會發(fā)現(xiàn)這個(gè)結(jié)合并非偶然。


Python 生態(tài)和大數(shù)據(jù)生態(tài)
Pythoh 生態(tài)與大數(shù)據(jù)生態(tài)有密不可分的關(guān)系,我們先看看大家都在用 Python 解決什么實(shí)際問題?通過一份用戶調(diào)查我們發(fā)現(xiàn),大多數(shù) Python 用戶正在解決 ”數(shù)據(jù)分析“,”機(jī)器學(xué)習(xí)“的問題,那么這些問題場景在大數(shù)據(jù)領(lǐng)域也有很好的解決方案。那么 Python 生態(tài)和大數(shù)據(jù)生態(tài)結(jié)合,拋開擴(kuò)大大數(shù)據(jù)產(chǎn)品的受眾用戶之外,對 Python 生態(tài)一個(gè)特別重要到意義就是單機(jī)到分布式的能力增強(qiáng),我想,這也是大數(shù)據(jù)時(shí)代海量數(shù)據(jù)分析對 Python 生態(tài)的強(qiáng)需求。


Why Flink and Why Python
好了, Python 生態(tài)和大數(shù)據(jù)的結(jié)合是時(shí)代的要求,那么 Flink 為啥選擇 Python 生態(tài)作為多語言支持的切入點(diǎn),而不是 Go 或者 R 呢?作為用戶的你,為啥選擇 PyFlink 而不是 PySpark 或者 PyHive 呢?
首先我們說說選擇 Flink 的理由:

  • 第一,最主要的是架構(gòu)優(yōu)勢, Flink 是純流架構(gòu)的流批統(tǒng)一的計(jì)算引擎;
  • 第二,從 ASF 的客觀統(tǒng)計(jì)看, Flink 是 2019 年度最活躍的開源項(xiàng)目,這意味著 Flink 鮮活的生命力;
  • 第三, Flink 不僅僅是開源項(xiàng)目而且也經(jīng)歷過無數(shù)次,各個(gè)大數(shù)據(jù)公司的生產(chǎn)環(huán)境的歷練,值得信賴。

那么我們再來看看 Flink 在選擇多語言支持時(shí)候,為啥選擇了 Python 而不是其他語言呢?我們還是看一下數(shù)據(jù)統(tǒng)計(jì),如下: Python 語言流行程度僅次于 Java 和 C,其實(shí)我們發(fā)現(xiàn)自18年開始 Python 的發(fā)展非常迅速,并且還在持續(xù)。那么 Java/Scala 是 Flink 的默認(rèn)語言,所以選擇 Python 來進(jìn)行 Flink 多語言的支持似乎很合理。這些權(quán)威的統(tǒng)計(jì)信息,大家可以在我提供的鏈接進(jìn)行查看更詳細(xì)的信息。


目前看 PyFlink 的產(chǎn)生是時(shí)代的必然,但僅僅想清楚 PyFlink 存在的意義還遠(yuǎn)遠(yuǎn)不夠,因?yàn)槲覀冏罱K的目標(biāo)是讓 Flink 和 Python 用戶受益,真真正正的解決實(shí)際的現(xiàn)實(shí)問題。所以,我們還需要繼續(xù)深入,一起探究 PyFlink 該如何落地?


PyFlink 架構(gòu)
任何事情在想清楚之后,還要做明白,要將 PyFlink 落地,首要解決的是分析清楚要達(dá)成的核心目標(biāo)和要達(dá)成目標(biāo)解決的核心問題。那么 PyFlink 的核心目標(biāo)到底是什么呢?
PyFlink 的核心目標(biāo)
我們在前面的分析過程中已經(jīng)提到過,這里我們再具體化一下,PyFlink 的核心目標(biāo):

  • 將 Flink 能力輸出到 Python 用戶,進(jìn)而可以讓 Python 用戶使用所有的 Flink 能力。
  • 將 Python 生態(tài)現(xiàn)有的分析計(jì)算功能運(yùn)行到 Flink 上,進(jìn)而增強(qiáng) Python 生態(tài)對大數(shù)據(jù)問題的解決能力。
  • 圍繞這 2 個(gè)核心的目標(biāo),我們再來分析,要達(dá)成這樣的目標(biāo),需要解決的核心問題是什么?


    Flink 功能 Python 化
    為了 PyFlink 落地,我們需要在 Flink 上開發(fā)一套和現(xiàn)有 Java 一樣的 Python 的引擎嗎?答案是 NO,這在 Flink 1.8 之前已經(jīng)嘗試過。我們做設(shè)計(jì)有一個(gè)很好的原則就是追求以最小的代價(jià)完成既定的目標(biāo),所以最好的方式是僅僅提供一層 Python API 復(fù)用現(xiàn)有的計(jì)算引擎。
    那么對于 Flink 而言我們要提供怎樣的 Python API 呢?那就是我們熟知的: High-level 的 TableAPI/SQL 和有狀態(tài)的 DataStream API。好,我們現(xiàn)在的思考越來越切近 Flink 內(nèi)部了,接踵而來的問題就是,我們?nèi)绾翁峁┮惶?Python 的 Table API 和 DataStream API 呢?核心要解決的問題是什么呢?

    ■ Flink 功能 Python 化的核心問題
    核心問題顯而易見是 Python VM 和 Java VM 的握手,他們之間要建立通訊,這是 Flink 多語言支持的核心問題。好,面對核心問題我們要進(jìn)行技術(shù)選型. Here we go…

    ■ Flink 功能 Python 化的 VM 通訊技術(shù)選型
    就當(dāng)前的 Java VM 和 Python VM 通訊的問題而言,目前比較顯著的解決方案有 Apache Beam,一個(gè)著名的多語言多引擎支持項(xiàng)目,另外一個(gè)專門解決 Java VM 和 Python VM 通訊問題的 Py4J。我們從不同視角進(jìn)行分析對比, 首先, Py4J 和 Beam 對比,就好像有穿山功能的穿山甲和一個(gè)力量強(qiáng)大的大象,要穿越一道墻,我們可以打個(gè)洞,也可以推到整面墻。所以在當(dāng)前 VM 通訊的場景, Beam 顯得有些復(fù)雜。因?yàn)?Beam 在通用性上做了很多的努力,在極端情況會喪失一定程度的靈活性。


    從另一個(gè)視角來看, Flink 本身有交互式編程的需求,比如 FLIP-36 ,同時(shí)還要在多語言支持的同時(shí),確保各種語言的接口設(shè)計(jì)語義一致性,這些在 Beam 現(xiàn)有的架構(gòu)下很難滿足。所以在這樣一種思考下,我們選擇 Py4J 作為 Java VM 和 Python VM 之間通訊的橋梁。

    ■ Flink 功能 Python 化的技術(shù)架構(gòu)
    其實(shí)如果我們解決了 Python VM 和 Java VM 通訊的問題,本質(zhì)上是在努力達(dá)成我們第一個(gè)目標(biāo),就是將現(xiàn)有 Flink 功能輸出給 Python 用戶,也就是我們 Flink 1.9 所完成的工作,接下來我們看看 Flink 1.9 PyFlink API 的架構(gòu),如下:
    我們利用Py4J解決通訊問題,在 PythonVM 啟動(dòng)一個(gè) Gateway,并且 Java VM 啟動(dòng)一個(gè) Gateway Server 用于接受 Python 的請求,同時(shí)在 Python API 里面提供和 Java API 一樣的對象,比如 TableENV, Table,等等。這樣 Python 在寫 Python API 的時(shí)候本質(zhì)是在調(diào)用 Java API。當(dāng)然,在 Flink 1.9 中還解決了作業(yè)部署問題,我們可以用 Python 命令,Python shell 和 CLI 等多種方式進(jìn)行作業(yè)提交。


    那么基于這樣的架構(gòu)有怎樣的優(yōu)勢呢?第一個(gè)就是簡單,并確保 Python API 語義和 Java API 的一致性,第二點(diǎn), Python 作業(yè)可以達(dá)到和 Java 一樣的極致性能,那么 Java 的性能怎樣呢?我想大家已經(jīng)熟知,在去年雙 11 Flink Java API 已經(jīng)具備了每秒25.51億次的數(shù)據(jù)處理的能力。


    Python 生態(tài)分布化
    OK,在完成了現(xiàn)有 Flink 功能向 Python 用戶的輸出之后,接下來我們繼續(xù)探討,如何將 Python 生態(tài)功能引入 Flink 中,進(jìn)而將 Python 功能分布式化。如何達(dá)成?通常我們可以有如下2種做法:

  • 選擇有代表性的 Python 類庫,將其 API 增加到 PyFlink 中,這種方式是一個(gè)漫長的過程,因?yàn)?Python 的生態(tài)庫太多了,但無論如何,我們在引入這些 APIs 之前,首要解決的問題是,解決 Python 的執(zhí)行問題。
  • 我們結(jié)合現(xiàn)有 Flink Table API 的現(xiàn)狀和現(xiàn)有 Python 類庫的特點(diǎn),我們可以對現(xiàn)有所有的 Python 類庫功能視為 用戶自定義函數(shù)(UDF),集成到 Flink 中。這樣我們就找到了集成 Python 生態(tài)到 Flink 中的手段是將其視為 UDF,也就是我們 Flink 1.10 中的工作。那么集成的核心問題是什么?沒錯(cuò),剛才說過,是 Python UDF 的執(zhí)行問題。
  • 好,我們針對這個(gè)核心問題進(jìn)行技術(shù)選型吧,Here we go…

    ■ Python 生態(tài)分布化的 UDF 執(zhí)行技術(shù)選型
    解決 Python UDF 執(zhí)行問題可不僅僅是 VM 之間通訊的問題了,它涉及到 Python 執(zhí)行環(huán)境的管理,業(yè)務(wù)數(shù)據(jù)在 Java 和 Python 之間的解析, Flink State Backend 能力向 Python 的輸出, Python UDF 執(zhí)行的監(jiān)控等等,是一個(gè)非常復(fù)雜的問題。面對這樣復(fù)雜的問題,前面我們介紹過 Apache Beam ,支持多引擎多語言,無所不能的大象可以出場了,我們來看一下 Beam 是怎么解決 Python UDF 執(zhí)行問題的 :)
    Beam 為了解決多語言和多引擎支持問題高度抽象了一個(gè)叫 Portability Framework 的架構(gòu),如下圖,Beam 目前可以支持 Java/Go/Python 等多種語言,其中圖下方 Beam Fu Runners 和 Execution 之間就解決了 引擎和 UDF 執(zhí)行環(huán)境的問題。其核心是對利用 Protobuf 進(jìn)行數(shù)據(jù)結(jié)構(gòu)抽象,利用 gRPC 協(xié)議進(jìn)行通訊,同時(shí)封裝了核心的 gRPC 服務(wù)。所以這時(shí)候 Beam 更像是一只螢火蟲,照亮了 PyFlink 解決 UDF 執(zhí)行問題之路。:)(多說一嘴,螢火蟲已經(jīng)成為了 Aapche Beam 的吉祥物)。
    我們接下來看看 Beam 到底提供了哪些 gRPC 服務(wù)。


    如圖 Runner部分是 Java 的算子執(zhí)行, SDK Worker部分是 Python 的執(zhí)行環(huán)境, Beam已經(jīng)抽象 Control/Data/State/Logging 等服務(wù)。并這些服務(wù)已經(jīng)在 Beam 的 Flink runner 上穩(wěn)定高效的運(yùn)行了很久了。所以在 PyFlink UDF 執(zhí)行上面我們可以站在巨人的肩膀上了:),這里我們發(fā)現(xiàn) Apache Beam 在 API 層面和在 UDF 的執(zhí)行層面都有解決方案,而 PyFlink 在 API 層面采用了 Py4J 解決 VM 通訊問題,在 UDF 執(zhí)行需求上采用了 Beam 的 Protability Framework 解決 UDF 執(zhí)行環(huán)境問題。
    這也表明了 PyFlink 在技術(shù)選型上嚴(yán)格遵循以最小的代價(jià)達(dá)成既定目標(biāo)的原則,在技術(shù)選型上永遠(yuǎn)會選擇最合適的,最符合 PyFlink 長期發(fā)展的技術(shù)架構(gòu)。(BTW,與 Beam 的合作過程中,我也向 Beam 社區(qū)提交了20+的優(yōu)化 patch)。

    ■ Python 生態(tài)分布化的 UDF 技術(shù)架構(gòu)
    在 UDF 的架構(gòu)中我們我既要考慮 Java VM 和 Python VM 的通訊問題,又要考慮在編譯階段和在運(yùn)行階段的不同需求。圖中我們以綠色表示 Java VM 的行為,藍(lán)色表示 Python VM 的行為。首先我們看看編譯階段,也就是local的設(shè)計(jì),在local的設(shè)計(jì)是純 API 的 mapping 調(diào)用,我們?nèi)匀灰^ Py4J 來解決通訊問題,也就是如圖 Python 每執(zhí)行一個(gè) API 就會同步的調(diào)用 Java 所對應(yīng)的 API 。
    對 UDF 的支持上,需要添加 UDF 注冊的 API , register_function,但僅僅是注冊還不夠,用戶在自定義 Python UDF 的時(shí)候往往會依賴一些三方庫,所以我們還需要增加添加依賴的方法,那就是一系列的 add 方法,比如 add_Python_file()。在編寫 Python 作業(yè)的同時(shí), Java API 也會同時(shí)被調(diào)用在提交作業(yè)之前,Java 端會構(gòu)建JobGraph。然后通過 CLI 等多種方式將作業(yè)提交到集群進(jìn)行運(yùn)行。


    我們再來看看運(yùn)行時(shí) Python 和 Java 的不同分工情況,首先在 Java 端與普通 Java 作業(yè)一樣, JobMaster 將作業(yè)分配給 TaskManger , TaskManager 會執(zhí)行一個(gè)個(gè) Task ,task里面就涉及到了Java和Python的算子執(zhí)行。在Python UDF的算子中我們會設(shè)計(jì)各種 gRPC 服務(wù)來完成 Java VM 和 Python VM 的各種通訊,比如 DataService 完成業(yè)務(wù)數(shù)據(jù)通訊, StateService 完成 Python UDF 對 Java Statebackend 的調(diào)用,當(dāng)然還有 Logging 和 Metrics 等其他服務(wù)。
    這些服務(wù)都是基于 Beam 的 Fn API 來構(gòu)建的,最終在Python的 Worker 里面運(yùn)行用戶的 UDF,運(yùn)行結(jié)束之后再利用對應(yīng)的 gRPC 服務(wù)將結(jié)果返回給 Java 端的 PythonUDF 算子。當(dāng)然 Python 的 worker 不僅僅是 Process 模式,可以是 Docker 模式甚至是 External 的服務(wù)集群。這種擴(kuò)展機(jī)制,為后面 PyFlink 與 Python 生態(tài)的其他框架集成打下了堅(jiān)實(shí)的基礎(chǔ),在后面我們介紹 PyFlink 大圖的時(shí)候,我們會介紹這一點(diǎn):)。好,這就是 PyFlink 在 1.10 中引入 Python UDF 支持的架構(gòu)。那么這樣的架構(gòu)有怎樣的優(yōu)勢呢?
    首先,Beam 是一個(gè)成熟的多語言支持框架,基于 Beam 進(jìn)行架構(gòu)我們后面可以很容易進(jìn)行其他語言的支持?jǐn)U展。 同時(shí) Beam 對 State 的服務(wù)抽象也方便 PyFlink 增加對 Stateful UDF 的支持。還有一個(gè)方面是方便維護(hù),同一套框架由 Apache Beam 和 Apache Flink 兩個(gè)非常活躍的社區(qū)共同維護(hù)和優(yōu)化 …


    PyFlink 場景,怎么用?
    好了解了這么多關(guān)于 PyFlink 的架構(gòu)和架構(gòu)背后的思考,我們還是以一個(gè)具體場景案例,來增加一些對 PyFlink 的體感吧!
    PyFlink 適用的場景
    在具體的案例之前我們先簡單分享一些 PyFlink 所能適用的業(yè)務(wù)場景。首先 PyFlink 既然是 Python+Flink,那其適用場景也可以從 java 和 Python 兩方面去分析,第一個(gè) Java 所適用的場景 PyFlink 都適用。

    • 第一個(gè),事件驅(qū)動(dòng)型,比如:刷單,監(jiān)控等;
    • 第二個(gè),數(shù)據(jù)分析型的,比如:庫存,雙11大屏等;
    • 第三個(gè)適用的場景是數(shù)據(jù)管道,也就是ETL場景,比如一些日志的解析等;
    • 第四個(gè)場景,機(jī)器學(xué)習(xí),比如個(gè)性推薦等。

    這些都可以嘗試使用 PyFlink 。除此之外還有 Python 生態(tài)特有的場景,比如科學(xué)計(jì)算等。那么這么多的應(yīng)用場景,PyFlink 到底有哪些可用的 API 呢?


    PyFlink 的安裝
    使用具體的 API 開發(fā)之前,首先要安裝 PyFlink,目前 PyFlink 支持 pip install 進(jìn)行安裝,這里特別提醒一下具體命令是:pip install apache-Flink。


    PyFlink 的 APIs
    目前 PyFlink API 完全與 Java Table API 對齊,各種關(guān)系操作都支持,同時(shí)對 window 也有很好的支持,并且這里稍微提一下就是 PyFlink 里面有些易用性 API 比 SQL 還要強(qiáng)大,比如:這些對 columns 進(jìn)行操作的 APIs。除了這些 APIs,PyFlink還提供多種定義 Python UDF 的方式。


    PyFlink 的 UDF 定義
    首先,可以擴(kuò)展 ScalarFunction,這種方式可以提供更多的輔助功能,比如添加 Metrics 。除此之外 Python 語言所支持的任何方式的方法定義,在 PyFlink UDF 中都是支持的,比如:Lambda Function,Named Function 和 CallableFunction等。
    當(dāng)定義完方法后,我們用 PyFlink 所提供的 Decorators 進(jìn)行打標(biāo),并描述 input 和 output 的數(shù)據(jù)類型就可以了。當(dāng)然后面版本我們也可以根據(jù) Python 語言的 type hint 特性再進(jìn)一步簡化,進(jìn)行類型推導(dǎo)。為了直觀,我們看一個(gè)具體的 UDF 定義的例子:


    Python UDF 定義示例
    我們定義兩個(gè)數(shù)相加的例子,首先導(dǎo)入必須的類,然后是剛才我們提到的幾種定義方式。這個(gè)簡單直接,我們閑話少敘,開始看看實(shí)際的案例吧:)


    PyFlink 案例-阿里云 CDN 實(shí)時(shí)日志分析
    我們這里以一個(gè)阿里云 CDN 實(shí)時(shí)日志分析的例子來介紹如何用 PyFlink 解決實(shí)際的業(yè)務(wù)問題。CDN 我們都很熟悉,為了進(jìn)行資源的下載加速。那么 CDN 日志的解析一般有一個(gè)通用的架構(gòu)模式,就是首先要將各個(gè)邊緣節(jié)點(diǎn)的日志數(shù)據(jù)進(jìn)行采集,一般會采集到消息隊(duì)列,然后將消息隊(duì)列和實(shí)時(shí)計(jì)算集群進(jìn)行集成進(jìn)行實(shí)時(shí)的日志分析,最后將分析的結(jié)果寫到存儲系統(tǒng)里面。那么我今天的案例將架構(gòu)實(shí)例化,消息隊(duì)列采用 Kafka,實(shí)時(shí)計(jì)算采用Flink,最終將數(shù)據(jù)存儲到 MySQL 中。

    ■ 阿里云 CDN 實(shí)時(shí)日志分析需求說明
    我們在來看看業(yè)務(wù)統(tǒng)計(jì)的需求,為了介紹方便,我們將實(shí)際的統(tǒng)計(jì)需求進(jìn)行簡化,示例中只進(jìn)行按地區(qū)分組,進(jìn)行資源訪問量,下載量和下載速度的統(tǒng)計(jì)。數(shù)據(jù)格式我們只選取核心的字段,比如:uuid,表示唯一的日志標(biāo)示,client_ip 表示訪問來源,request_time 表示資源下載耗時(shí), response_size 表示資源數(shù)據(jù)大小。其中我們發(fā)現(xiàn)我們需求是按地區(qū)分組,但是原始日志里面并沒有地區(qū)的字段信息,所以我們需要定義一個(gè) Python UDF 根據(jù) client_ip 來查詢對應(yīng)的地區(qū)。好,我們首先看如何定義這個(gè) UDF。■ 阿里云 CDN 實(shí)時(shí)日志分析 UDF 定義
    這里我們用了剛才提到的 named function 的方式定義一個(gè) ip_to_province() 的UDF,輸入是 ip 地址,輸出是地區(qū)名字字符串。我們這里描述了輸入類型是一個(gè)字符串,輸出類型也是一個(gè)字符串。當(dāng)然這里面的查詢服務(wù)僅供演示,大家在自己的生產(chǎn)環(huán)境要替換為可靠的地域查詢服務(wù)。


    import re import json from pyFlink.table import DataTypes from pyFlink.table.udf import udf from urllib.parse import quote_plus from urllib.request import urlopen @udf(input_types=[DataTypes.STRING()], result_type=DataTypes.STRING()) def ip_to_province(ip): """ format: { 'ip': '27.184.139.25', 'pro': '河北省', 'proCode': '130000', 'city': '石家莊市', 'cityCode': '130100', 'region': '靈壽縣', 'regionCode': '130126', 'addr': '河北省石家莊市靈壽縣 電信', 'regionNames': '', 'err': '' } """ try: urlobj = urlopen( 'http://whois.pconline.com.cn/ipJson.jsp?ip=%s' % quote_plus(ip)) data = str(urlobj.read(), "gbk") pos = re.search("{[^{}]+}", data).span() geo_data = json.loads(data[pos[0]:pos[1]]) if geo_data['pro']: return geo_data['pro'] else: return geo_data['err'] except: return "UnKnow"■ 阿里云 CDN 實(shí)時(shí)日志分析 Connector 定義
    我們完成了需求分析和 UDF 的定義,我們開始進(jìn)行作業(yè)的開發(fā)了,按照通用的作業(yè)結(jié)構(gòu),需要定義 Source connector 來讀取 Kafka 數(shù)據(jù),定義 Sink connector 來將計(jì)算結(jié)果存儲到 MySQL。最后是編寫統(tǒng)計(jì)邏輯。
    在這特別說明一下,在 PyFlink 中也支持 SQL DDL 的編寫,我們用一個(gè)簡單的 DDL 描述,就完成了 Source Connector的開發(fā)。其中 connector.type 填寫 kafka。SinkConnector 也一樣,用一行DDL描述即可,其中 connector.type 填寫 jdbc。描述 connector 的邏輯非常簡單,我們再看看核心統(tǒng)計(jì)邏輯是否也一樣簡單:)


    kafka_source_ddl = """ CREATE TABLE cdn_access_log ( uuid VARCHAR, client_ip VARCHAR, request_time BIGINT, response_size BIGINT, uri VARCHAR ) WITH ( 'connector.type' = 'kafka', 'connector.version' = 'universal', 'connector.topic' = 'access_log', 'connector.properties.zookeeper.connect' = 'localhost:2181', 'connector.properties.bootstrap.servers' = 'localhost:9092', 'format.type' = 'csv', 'format.ignore-parse-errors' = 'true' ) """ mysql_sink_ddl = """ CREATE TABLE cdn_access_statistic ( province VARCHAR, access_count BIGINT, total_download BIGINT, download_speed DOUBLE ) WITH ( 'connector.type' = 'jdbc', 'connector.url' = 'jdbc:mysql://localhost:3306/Flink', 'connector.table' = 'access_statistic', 'connector.username' = 'root', 'connector.password' = 'root', 'connector.write.flush.interval' = '1s' ) """■ 阿里云 CDN 實(shí)時(shí)日志分析核心統(tǒng)計(jì)邏輯
    首先從數(shù)據(jù)源讀取數(shù)據(jù),然后需要先將 clien_ip 利用我們剛才定義的 ip_to_province(ip) 轉(zhuǎn)換為具體的地區(qū)。之后,在進(jìn)行按地區(qū)分組,統(tǒng)計(jì)訪問量,下載量和資源下載速度。最后將統(tǒng)計(jì)結(jié)果存儲到結(jié)果表中。這個(gè)統(tǒng)計(jì)邏輯中,我們不僅使用了Python UDF,而且還使用了 Flink 內(nèi)置的 Java AGG 函數(shù),sum 和 count。

    # 核心的統(tǒng)計(jì)邏輯 t_env.from_path("cdn_access_log") .select("uuid, " "ip_to_province(client_ip) as province, " # IP 轉(zhuǎn)換為地區(qū)名稱 "response_size, request_time") .group_by("province") .select( # 計(jì)算訪問量 "province, count(uuid) as access_count, " # 計(jì)算下載總量 "sum(response_size) as total_download, " # 計(jì)算下載速度 "sum(response_size) * 1.0 / sum(request_time) as download_speed") .insert_into("cdn_access_statistic")■ 阿里云 CDN 實(shí)時(shí)日志分析完整代碼
    我們在整體看一遍完整代碼,首先是核心依賴的導(dǎo)入,然后是我們需要?jiǎng)?chuàng)建一個(gè)ENV,并設(shè)置采用的 planner(目前Flink支持Flink和blink兩套 planner)建議大家采用 blink planner。
    接下來將我們剛才描述的 kafka 和 mysql 的 ddl 進(jìn)行表的注冊。再將 Python UDF 進(jìn)行注冊,這里特別提醒一點(diǎn),UDF所依賴的其他文件也可以在API里面進(jìn)行制定,這樣在job提交時(shí)候會一起提交到集群。然后是核心的統(tǒng)計(jì)邏輯,最后調(diào)用 executre 提交作業(yè)。這樣一個(gè)實(shí)際的CDN日志實(shí)時(shí)分析的作業(yè)就開發(fā)完成了。我們再看一下實(shí)際的統(tǒng)計(jì)效果。


    import os from pyFlink.datastream import StreamExecutionEnvironment from pyFlink.table import StreamTableEnvironment, EnvironmentSettings from enjoyment.cdn.cdn_udf import ip_to_province from enjoyment.cdn.cdn_connector_ddl import kafka_source_ddl, mysql_sink_ddl # 創(chuàng)建Table Environment, 并選擇使用的Planner env = StreamExecutionEnvironment.get_execution_environment() t_env = StreamTableEnvironment.create( env, environment_settings=EnvironmentSettings.new_instance().use_blink_planner().build()) # 創(chuàng)建Kafka數(shù)據(jù)源表 t_env.sql_update(kafka_source_ddl) # 創(chuàng)建MySql結(jié)果表 t_env.sql_update(mysql_sink_ddl) # 注冊IP轉(zhuǎn)換地區(qū)名稱的UDF t_env.register_function("ip_to_province", ip_to_province) # 添加依賴的Python文件 t_env.add_Python_file( os.path.dirname(os.path.abspath(__file__)) + "/enjoyment/cdn/cdn_udf.py") t_env.add_Python_file(os.path.dirname( os.path.abspath(__file__)) + "/enjoyment/cdn/cdn_connector_ddl.py") # 核心的統(tǒng)計(jì)邏輯 t_env.from_path("cdn_access_log") .select("uuid, " "ip_to_province(client_ip) as province, " # IP 轉(zhuǎn)換為地區(qū)名稱 "response_size, request_time") .group_by("province") .select( # 計(jì)算訪問量 "province, count(uuid) as access_count, " # 計(jì)算下載總量 "sum(response_size) as total_download, " # 計(jì)算下載速度 "sum(response_size) * 1.0 / sum(request_time) as download_speed") .insert_into("cdn_access_statistic") # 執(zhí)行作業(yè) t_env.execute("pyFlink_parse_cdn_log")■ 阿里云 CDN 實(shí)時(shí)日志分析運(yùn)行效果
    我們采用 mock 的數(shù)據(jù)向 kafka 發(fā)送 CDN 日志數(shù)據(jù),右邊實(shí)時(shí)的按地區(qū)統(tǒng)計(jì)資源的訪問量,下載量和下載速度。這個(gè)示例的 mock 數(shù)據(jù)工具,源代碼和操作過程,在今天的直播后,會更新到我的博客當(dāng)中。方便大家在自己的環(huán)境中進(jìn)行體驗(yàn)。


    PyFlink 未來,會怎樣?
    總體來看 PyFlink 的業(yè)務(wù)開發(fā)還是非常簡潔的,不用關(guān)心底層的實(shí)現(xiàn)細(xì)節(jié),只需要按照SQL或者Table API的方式描述業(yè)務(wù)邏輯就行。那么,我們再整體看看PyFlink的未來會怎樣呢?
    PyFlink 本心驅(qū)動(dòng) Roadmap
    PyFlink 的發(fā)展始終要以本心驅(qū)動(dòng),我們要圍繞將現(xiàn)有 Flink 功能輸出到 Python 用戶,將 Python 生態(tài)功能集成到Flink當(dāng)中為目標(biāo)。PyFlink的 Roadmap 如圖所示:首先解決 Python VM 和 Java VM 的通訊問題,然后將現(xiàn)有的 Table API 功能暴露給 Python 用戶,提供 Python Table API,這也就是 Flink 1.9 中所進(jìn)行的工作,接下來我們要為將Python功能集成到Flink做準(zhǔn)備就是集成 Apache Beam,提供 Python UDF 的執(zhí)行環(huán)境,并增加Python 對其他類庫依賴的管理功能,為用戶提供 User-defined-Funciton 的接口定義,支持 Python UDF,這就是 Flink 1.10 所做的工作。
    為了進(jìn)一步擴(kuò)大Python生態(tài)的分布式功能,PyFlink 將提供 Pandas 的 Series 和 DataFram 的支持,也就是用戶可以在 PyFlink 中直接使用 Pandas 的UDF。同時(shí)為增強(qiáng)用戶的易用性,讓用戶有更多的方式使用 PyFlink,后續(xù)增加在 Sql Client 中使用 Python UDF。面對 Python 用戶的機(jī)器學(xué)習(xí)問題,增加 Python 的 ML pipeline API。監(jiān)控 Python UDF 的執(zhí)行情況對,對實(shí)際的生產(chǎn)業(yè)務(wù)非常關(guān)鍵,所以 PyFlink 會增加 Python UDF 的 Metric 管理。這些點(diǎn)將在 Flink 1.11 中將與用戶見面。
    但這些功能只是 PyFlink 規(guī)劃的冰山一角,后續(xù)我們還要進(jìn)行性能優(yōu)化,圖計(jì)算API,Pandas on Flink 的 Pandas 原生 API 等等。。。進(jìn)而完成不斷將 Flink 現(xiàn)有功能推向 Python 生態(tài),將 Python 生態(tài)的強(qiáng)大功能不斷集成到 Flink 當(dāng)中,進(jìn)而完成 Python 生態(tài)分布化的初衷。


    PyFlink 1.11 預(yù)覽
    我們快速的預(yù)覽一下即將與大家見面的 Flink 1.11 中的 PyFlink 的重點(diǎn)內(nèi)容。■ 功能
    我們將視角由遠(yuǎn)方拉近到 Flink 1.11 版本 PyFlink 的核心功能,PyFlink 會圍繞著 功能,性能和易用性不斷努力,在 1.11 在功能上會增加 Pandas UDF 的支持,這樣Pandas 生態(tài)的實(shí)用類庫功能可以在 PyFlink 中直接使用,比如累積分布函數(shù), CDF 等。


    還會增加 ML Pipeline API 的支持,這樣大家可以利用 PyFlink 完成一些機(jī)器學(xué)習(xí)場景的業(yè)務(wù)需求,我這里是一個(gè)使用 pyFlink 完成 KMeans 的示例。

    ■ 性能
    在性能上 PyFlink 也會有更多的投入,我們利用 Codegen,CPython,優(yōu)化序列化和反序列化的方式提高 PythonUDF 的執(zhí)行性能,目前我們初步對 1.10 和 1.11 進(jìn)行性能對比來看,1.11 將比 1.10 有近 15 倍的性能提升。

    ■ 易用性
    在用戶的易用性上 PyFlink 會在 SQL DDL 和 SQL Client 中增加對 Python UDF 的支持。讓用戶有更多的方式選擇來使用 PyFlink。


    PyFlink 大圖(使命愿景)
    今天已經(jīng)介紹了很多,比如什么是 PyFlink,PyFlink 的存在的意義,PyFlink API 架構(gòu),UDF 架構(gòu),以及架構(gòu)背后的取舍和現(xiàn)有架構(gòu)的優(yōu)勢,并介紹了 CDN 的案例,介紹了 PyFlink 的 Roadmap,預(yù)覽了 Flink 1.11 版本中 PyFlink 的重點(diǎn),那么接下來還有什么呢?
    那么最后我們再來看看 PyFlink 的未來會怎樣?在以 “Flink 功能 Python 化,Python 生態(tài)分布化” 的使命驅(qū)動(dòng)下,PyFlink 會有怎樣的布局?我們快速分享一下:PyFlink 是 Apache Flink 的一部分,涉及到 Runtime 層面和 API 層面。
    在這兩個(gè)層面 PyFlink 會有怎樣的發(fā)展? Runtime 層面,PyFlink 會構(gòu)建解決 Java VM 和 Python VM 的通訊問題的 gRPC 通用服務(wù),比如(Control/Data/State等)在這套框架之上會抽象出 Java 的 Python UDF 算子,Python 的執(zhí)行容器構(gòu)建,支持多種 Python 的 Execution,比如 Process,Docker 和 External,尤其值得強(qiáng)調(diào)的是 External 以Socket 的方式提供了無限的擴(kuò)展能力,在后續(xù)的 Python 生態(tài)集成上至關(guān)重要。
    API 層面,我們會使命驅(qū)動(dòng),將 Flink 上所以的 API 進(jìn)行 Python 化,當(dāng)然這也依托于引入 Py4J 的 VM 通訊框架之上,PyFlink 會逐漸增加各種 API 的支持,Python Table API,UDX 的接口 API,ML Pipeline,DataStream,CEP,Gelly,State,等Flink所具備的 Java APIs 和 Python 生態(tài)用戶的最愛 Pandas APIs 等。在這些 API 的基礎(chǔ)之上,PyFlink 還會不斷的進(jìn)行生態(tài)系統(tǒng)的集成,比如 方便用戶開發(fā)的 Notebook 的集成,Zeppelin,Jupyter,并與阿里開源的 Alink 進(jìn)行集成,目前 PyAlink 已經(jīng)完全應(yīng)用了 PyFlink 所提供的功能,后面還會和現(xiàn)有的 AI 系統(tǒng)平臺進(jìn)行集成,比如大家熟知的 TensorFlow 等等。
    所以此時(shí)我會發(fā)現(xiàn)使命驅(qū)動(dòng)的力量會讓 PyFlink 的生命線不斷延續(xù)…當(dāng)然這種生命的延續(xù)更需要更多的血液融入。這里再次強(qiáng)調(diào)一下 PyFlink 的使命:“Flink 能力 Python 化,Python 生態(tài)分布化”。目前 PyFlink 的核心貢獻(xiàn)者們正以這樣的使命而持續(xù)活躍在社區(qū)。


    PyFlink 核心貢獻(xiàn)者及問題支持
    在分享的最后,我想介紹一下目前 PyFlink 的核心貢獻(xiàn)者。
    首先是付典,目前付典是 Flink 以及另外兩個(gè) Apache 頂級項(xiàng)目的 Committer,在PyFlink 模塊做了巨大的貢獻(xiàn)。
    第二位是黃興勃,目前專注 PyFlink 的 UDF 性能優(yōu)化,曾經(jīng)是阿里與安全算法挑戰(zhàn)賽的冠軍,在 AI 和中間件性能比賽中也有很好的成績。
    第三位就是大家熟知的程鶴群,為大家做過多次分享,相信大家還記得他為大家?guī)淼摹禙link 知識圖譜》分享。
    第四位是鐘葳,關(guān)注 PyFlink 的 UDF 依賴管理和易用性工作,目前已經(jīng)有很多的代碼貢獻(xiàn)。最后一個(gè)是我自己。大家后續(xù)在使用 PyFlink 的時(shí)候,如果有什么問題都可以聯(lián)系我們中的任何一位尋求支持。


    當(dāng)然遇到通用性問題還是建議大家郵件到 Flink 的用戶列表和中文用戶列表,這樣能問題共享。當(dāng)然如果你遇到特別急的個(gè)別問題,也非常歡迎您郵件到剛才介紹的小伙伴郵箱,同時(shí),為了問題的積累和有效的分享,更期望大家遇到問題可以在 Stackoverflow 進(jìn)行提問題。首先搜索你遇到問題是否已經(jīng)被解答過,如果沒有,請描述清楚,最后提醒大家要為問題打上 PyFlink 的 tags。這樣我們及時(shí)訂閱回復(fù)您問題。


    總結(jié)
    今天深入剖析了 PyFlink 深層含義;介紹了 PyFlink API 架構(gòu)是核心采用 Py4J 框架進(jìn)行 VM 之間的通訊,API 的設(shè)計(jì)上 Python API 和 Java API 保持語義的一致;還介紹了 Python UDF 架構(gòu),以集成 Apache Beam 的 Portability Framework 的方式獲取高效穩(wěn)定的 Python UDF 的支持,并且細(xì)致分析了架構(gòu)背后思考,對技術(shù)選型的取舍和現(xiàn)有架構(gòu)的優(yōu)勢;
    然后介紹了 PyFlink 所適用的業(yè)務(wù)場景,并以阿里云 CDN 日志實(shí)時(shí)分析的案例讓大家對 PyFlink 的使用有一定的體感;
    最后介紹了 PyFlink 的 Roadmap 和預(yù)覽了 Flink 1.11 版本中 PyFlink 的重點(diǎn),預(yù)期 PyFlink 1.11 相對于1.10會有15倍以上的性能提升,最后和大家一起分享了 PyFlink 的使命,PyFlink 的使命是 ”Flink能力Python化,Python生態(tài)分布化”。
    留在最后的是提供給大家一種更有效的問題求助的方式,大家有什么問題可以隨時(shí)拋給剛才向大家介紹的 PyFlink 小伙伴,那么這些小伙伴已經(jīng)在直播群里了,接下來有什么問題,我們可以一起探討。:)

    https://enjoyment.cool/ (二維碼自動(dòng)識別)

    作者介紹:
    孫金城(金竹),2011 年加入阿里,9 年的阿里工作中,主導(dǎo)過很多內(nèi)部核心系統(tǒng),如,阿里集團(tuán)行為日志,阿里郎,云轉(zhuǎn)碼,文檔轉(zhuǎn)換等。在 2016 年初開始了解 Apache Flink 社區(qū),由初期的參與社區(qū)開發(fā)到后來逐漸主導(dǎo)具體模塊的開發(fā),到負(fù)責(zé) Apache Flink Python API(PyFlink) 的建設(shè)。 目前是 PMC member of Apache Flink and ALC(Beijing), 以及 Committer for Apache Flink, Apache Beam and Apache IoTDB。

    SQL 消息中間件 監(jiān)控 Java 大數(shù)據(jù) API Apache 流計(jì)算 Python CDN

    總結(jié)

    以上是生活随笔為你收集整理的flink sql udf jar包_Flink 生态:一个案例快速上手 PyFlink的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    国产一级片网站 | 国产一在线精品一区在线观看 | 国产高清在线免费 | 国产精品一区二区久久精品爱微奶 | 在线观看日本高清mv视频 | 午夜精品一区二区三区在线 | 国产精品久久久久久a | 91成人精品在线 | 深爱激情综合 | 97国产情侣爱久久免费观看 | 99精彩视频在线观看免费 | 久久久午夜精品理论片中文字幕 | 日韩免费电影一区二区三区 | 96亚洲精品久久久蜜桃 | 亚洲精品国产精品国自产观看 | 在线免费观看黄色小说 | 亚洲一区二区三区精品在线观看 | 中文字幕在线播放一区 | 成人播放器 | 久久精品久久精品久久 | 狠狠干 狠狠操 | 在线视频一区观看 | 亚洲精品理论 | 久久夜视频 | 美女久久视频 | 日韩久久久 | 日韩精品免费一区 | 成人免费看黄 | 美女黄久久 | 国产精品一区二区免费视频 | 99久久久国产精品免费99 | 日本女人b | 日韩av免费在线电影 | 亚洲传媒在线 | 亚洲日本va中文字幕 | 欧美日韩中字 | 麻豆 videos | 欧美性生交大片免网 | av一二三区 | 97视频免费在线观看 | 亚洲精品久久久久58 | 亚洲欧美怡红院 | 国产精品一区二区无线 | 成人网中文字幕 | 亚洲精品色婷婷 | 日韩成人免费在线电影 | 欧美二区三区91 | 西西444www大胆无视频 | 亚洲日本一区二区在线 | bbb搡bbb爽爽爽 | 91精品在线视频观看 | 五月天综合网站 | 色激情五月 | 麻豆国产精品va在线观看不卡 | 日韩国产精品一区 | 国产视频在线观看一区 | 日韩在线免费视频观看 | 欧美日韩精品在线免费观看 | 久久久久久久久黄色 | 1区2区3区在线观看 三级动图 | 91在线播| 91黄色在线视频 | 婷婷丁香六月天 | 国产日韩欧美精品在线观看 | 亚洲视频在线看 | 久久国产精品久久国产精品 | 成人羞羞视频在线观看免费 | 亚洲精品欧洲精品 | 三上悠亚一区二区在线观看 | 国产激情久久久 | 伊人亚洲精品 | 人人视频网站 | 免费一级片在线观看 | 国产第一二区 | 久久免费国产精品1 | 亚洲码国产日韩欧美高潮在线播放 | 日韩精品专区在线影院重磅 | 日韩精品不卡在线观看 | 337p日本大胆噜噜噜噜 | 激情视频在线观看网址 | 手机在线中文字幕 | 正在播放国产一区二区 | av在线电影网站 | 字幕网资源站中文字幕 | 天天色天天草天天射 | 超碰在线观看av.com | 午夜国产福利在线 | 成年人免费观看国产 | 国产91影院 | 久久精品久久精品久久39 | 青草视频在线免费 | 天堂在线一区二区 | 久久久久久久久久久久亚洲 | 麻豆国产精品va在线观看不卡 | 最近2019中文免费高清视频观看www99 | 欧美日韩一区二区三区不卡 | 99在线精品视频观看 | 色婷婷啪啪免费在线电影观看 | 久久久激情网 | 欧美激情视频一区二区三区免费 | 91成人欧美 | 狠狠色综合欧美激情 | 欧美小视频在线 | 91大神免费在线观看 | 激情久久影院 | 国产亚洲精品女人久久久久久 | 五月婷婷综合激情网 | 天天干国产| 免费福利视频导航 | 国产成人免费在线观看 | 日韩在线视频免费观看 | 狠狠干2018 | 欧美久久久影院 | 五月婷香蕉久色在线看 | 五月天综合网站 | 九色视频网站 | av网址aaa | 欧美日韩国产在线精品 | 久久久受www免费人成 | 国产精品青青 | 99久久精品国产一区二区成人 | 久久婷婷国产色一区二区三区 | 免费av在线网站 | 久久久99精品免费观看 | 欧美大码xxxx | 日韩高清精品免费观看 | 激情综合网五月 | 一区二区三区日韩在线 | 在线中文字幕一区二区 | 少妇搡bbb| 免费看精品久久片 | 久久久www成人免费毛片 | 国产精品自产拍 | 色在线观看网站 | 狠狠综合网| 亚洲电影第一页av | 中文字幕在线视频第一页 | 最近中文字幕完整视频高清1 | 亚洲一级理论片 | 亚州av网站| 中文字幕无吗 | 国产高清视频 | 久久精品国产99国产 | 香蕉视频网站在线观看 | 精品99视频| 91视频 - x99av | 国产精品免费在线观看视频 | 日韩视频中文 | 亚洲精品国产精品国自产观看浪潮 | 人人爽人人爽人人爽人人爽 | 免费日韩一区二区三区 | 国产黄a三级 | 97干com | 九九九视频精品 | 中文在线资源 | 久久精品永久免费 | 色婷婷中文| 午夜 久久 tv | 婷婷亚洲五月色综合 | 亚洲精品国产精品国自 | 在线一二区 | 久久夜色电影 | www婷婷 | 日韩欧美一区二区在线 | 亚洲砖区区免费 | 久久久久久久综合色一本 | 在线观看色网 | 国产精品淫片 | 永久免费的啪啪网站免费观看浪潮 | 亚洲黄色精品 | 97人人网| 午夜婷婷在线观看 | 色综合久久久久综合99 | 久久久免费观看视频 | 久久高清片 | 久久久99精品免费观看 | 久久精品伊人 | 五月综合激情婷婷 | 在线免费黄网站 | av电影在线观看完整版一区二区 | 欧美精品第一 | 日韩有码第一页 | 香蕉视频久久 | 开心婷婷色 | 日韩精品免费一区二区三区 | 国产精品 美女 | 精品一区二三区 | 久久久99国产精品免费 | 亚洲砖区区免费 | 欧美一级片在线播放 | 97在线超碰 | 国产中文伊人 | 欧美日韩一级久久久久久免费看 | 日韩国产欧美在线播放 | 久久99操| 色偷偷网站视频 | 国产亚洲免费的视频看 | 五月婷婷在线视频观看 | 丁香婷婷久久 | 中文字幕91视频 | 日韩字幕 | 成人黄大片视频在线观看 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 久久男人影院 | 国产一区二区电影在线观看 | 九九九毛片 | www.91av在线 | 国产精品久久久久久久久婷婷 | 亚洲国产精品电影 | 国产一区私人高清影院 | 97超级碰碰碰碰久久久久 | 国产欧美在线一区二区三区 | 狠狠操狠狠干天天操 | 99久久精品久久久久久清纯 | 黄色1级毛片 | 西西444www大胆高清图片 | 狠狠操综合网 | 极品中文字幕 | 91av国产视频 | 国产精品 日本 | 美女免费黄视频网站 | 国产小视频91 | 国产区免费在线 | 国产成本人视频在线观看 | 国产美女久久久 | 国产午夜精品一区 | 五月婷综合网 | 欧美精品一区二区三区一线天视频 | 国产艹b视频 | 国产网站色 | 欧美a√在线 | 国产又粗又硬又爽的视频 | 国产精选在线 | 欧美亚洲国产日韩 | 国产精品一区二区视频 | 日韩免费电影一区二区三区 | 国产资源在线观看 | 欧美日韩xxx| 人人看97 | 青春草国产视频 | 伊人色综合久久天天网 | 免费在线色视频 | 国产亚洲永久域名 | 免费黄色av. | 天天操天天爽天天干 | 人人澡超碰碰97碰碰碰软件 | 视频在线播放国产 | 超碰97中文 | 亚洲综合成人婷婷小说 | 蜜臀久久99精品久久久久久网站 | 91精品国产九九九久久久亚洲 | 国产精品99精品久久免费 | caobi视频| 香蕉影视 | 四虎最新域名 | 国产不卡在线 | 在线观看免费观看在线91 | 激情欧美xxxx | 97爱爱爱 | 欧美日韩高清不卡 | 韩国av一区二区三区在线观看 | 一二三精品视频 | 麻豆传媒电影在线观看 | 免费又黄又爽 | 欧美网址在线观看 | 色综合天天爱 | 精品毛片在线 | 久草影视在线观看 | 丁香高清视频在线看看 | 91.精品高清在线观看 | 激情五月网站 | 久久综合九色综合97_ 久久久 | 97精品久久人人爽人人爽 | 久草在线免费资源站 | 一区二区三区在线免费 | 天天射,天天干 | 久久理论影院 | 婷婷色综合网 | 高清不卡一区二区三区 | 91精品免费看 | 97人人模人人爽人人少妇 | 日韩在线网址 | 日韩在线观看三区 | 九九久久免费视频 | 国产一级一级国产 | av在线免费播放网站 | 国产高清在线看 | 久草在线手机视频 | 亚洲视频一区二区三区在线观看 | 黄色在线免费观看网站 | 亚洲欧洲精品久久 | 激情婷婷网 | 在线免费视频一区 | 成人a视频片观看免费 | 国产亚洲成av片在线观看 | 国产成人精品久久久 | 亚洲欧美国产精品18p | 欧美嫩草影院 | 天天干天天操人体 | 国产精品永久久久久久久久久 | 九九色网 | 国产免费a | a视频免费在线观看 | 公与妇乱理三级xxx 在线观看视频在线观看 | 五月天亚洲婷婷 | www国产一区 | 久久久久久久久精 | www在线观看视频 | 久久久综合九色合综国产精品 | 欧美另类重口 | 色婷五月| 日韩www在线 | 久久久综合香蕉尹人综合网 | 天天综合视频在线观看 | 97人人澡人人添人人爽超碰 | 精品免费久久久久久 | 美女黄久久 | 亚洲国产播放 | 在线视频 你懂得 | 超碰97免费在线 | 五月天免费网站 | 国产又黄又爽又猛视频日本 | 国产综合小视频 | 黄色网在线免费观看 | 久久线视频 | 特级西西444www大精品视频免费看 | 成人av手机在线 | 亚洲激情小视频 | 欧美另类色图 | 国产精品久久久久久久久久久久午 | 亚洲一区二区三区毛片 | 国产色视频一区二区三区qq号 | 国产91九色蝌蚪 | 免费在线黄 | 国产精品视频不卡 | 国产精品久久久久影院 | 久久精品在线视频 | 日韩在线观看第一页 | 国产人在线成免费视频 | 亚洲欧美日韩精品久久久 | 热久久影视 | 久久精品看 | 最近中文字幕 | 久久99国产精品久久99 | 久久久久久久久久久国产精品 | 久久久国产精品一区二区中文 | 日韩视频一区二区三区 | 一区二区伦理 | 久久av在线 | 美女视频黄免费网站 | 二区三区精品 | 亚洲精品美女久久久久 | 国产精品第10页 | 午夜精品一区二区三区在线 | 美女免费黄网站 | 久久久久久久久精 | 超碰日韩在线 | 国产在线理论片 | 亚洲精品美女久久久 | 欧美日韩视频精品 | 1000部国产精品成人观看 | 久久私人影院 | 99人久久精品视频最新地址 | av观看在线观看 | 亚洲国产剧情 | 在线观看免费 | 精品一区二区在线免费观看 | 天天综合区 | 久久久久久久久精 | 欧美成人tv | 99在线播放 | 五月激情六月丁香 | av中文字幕免费在线观看 | 欧美一区在线观看视频 | www.国产毛片 | 在线免费观看av网站 | 国产视频导航 | 免费观看91视频大全 | 欧美日韩高清国产 | 日本一区二区三区免费看 | 日韩在线视频精品 | 国产日韩中文字幕在线 | 中文综合在线 | 久久久久久美女 | 欧美日韩视频免费 | 天天做综合网 | 日韩h在线观看 | 美女免费黄视频网站 | 九九在线视频 | 久久夜色精品国产欧美乱极品 | 偷拍视频一区 | 欧美视屏一区二区 | 国产码电影 | 国产亚洲精品成人av久久影院 | 久久久久久久久久久免费 | 精品999久久久 | 日韩三级中文字幕 | 国产亚洲精品久久久久久无几年桃 | 婷婷亚洲五月 | www.91国产 | 99精品视频在线播放观看 | 国产亚洲一区二区三区 | 91视频在线国产 | av电影在线播放 | 色一级片 | av高清免费在线 | 国产99视频在线观看 | 免费一级黄色 | 欧美日韩精品国产 | 视频91 | 国产精品美女久久久久久久网站 | 亚洲精品一区二区三区四区高清 | 伊色综合久久之综合久久 | 欧美日韩观看 | 欧美日本国产在线观看 | 夜添久久精品亚洲国产精品 | 国产精品伦一区二区三区视频 | 国产精久久久久久久 | 国产九九九九九 | 国产精品视频在线观看 | 久久国内免费视频 | 久久久久99精品国产片 | 日韩毛片在线一区二区毛片 | 四虎在线观看精品视频 | 91免费看黄色 | 欧美激情精品久久久久久 | 成人黄色小说视频 | 伊人婷婷网 | 五月开心六月伊人色婷婷 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 日本丶国产丶欧美色综合 | 国产精品视频免费观看 | 免费看国产一级片 | 欧美做受69 | 中文字幕人成人 | 在线探花 | 久久国产a| 手机av资源 | 国产视频久久久 | 亚洲成人家庭影院 | 久久激情视频 久久 | 国产精品免费久久久 | 在线观看av免费 | 毛片888| 国产69精品久久99的直播节目 | 日韩免费观看一区二区 | 二区三区av | 91看片看淫黄大片 | 欧美一级在线观看视频 | 日韩色综合 | 中文字幕中文字幕在线中文字幕三区 | 免费视频成人 | 亚洲国产伊人 | 色天天综合网 | 最近免费在线观看 | 97看片网 | 在线免费av网站 | 日韩欧美高清一区二区三区 | 右手影院亚洲欧美 | 成人久久18免费 | 天天色成人 | 热久久免费视频精品 | 又污又黄的网站 | 91精品啪在线观看国产81旧版 | 18做爰免费视频网站 | 久草在线网址 | 99爱在线 | 我要色综合天天 | 少妇性aaaaaaaaa视频 | 91九色视频在线 | 欧美精品在线观看免费 | 在线观看亚洲国产 | 午夜国产在线 | 国产视频欧美视频 | 成年人免费在线观看 | 亚洲欧美日韩在线一区二区 | 天天天干天天天操 | 美女很黄免费网站 | 一区二区三区韩国免费中文网站 | 国产区高清在线 | 亚洲男男gaygayxxxgv| 免费观看特级毛片 | 国产视频1区2区3区 久久夜视频 | 中文资源在线官网 | 婷婷六月天在线 | 久久久999免费视频 日韩网站在线 | 人人爽人人爽人人爽人人爽 | 麻豆你懂的 | 亚洲人人精品 | 97电院网手机版 | 欧美日韩视频免费 | 国产成人综合图片 | 国产视频久 | 久久综合久色欧美综合狠狠 | 九九久久国产 | 国内少妇自拍视频一区 | 色网站免费在线观看 | 一区二区男女 | 亚洲精品国产精品国自产观看浪潮 | 一区二区三区日韩精品 | 一区二区三区在线观看 | 国产原创av在线 | 天天射天天搞 | 日本三级中文字幕在线观看 | 国产最新福利 | 一区二区 久久 | 成人毛片久久 | 黄网站色欧美视频 | 国产伦理一区二区 | av电影在线观看完整版一区二区 | 中文字幕在线免费 | 久久6精品| 极品国产91在线网站 | 91精品中文字幕 | 91看片淫黄大片一级在线观看 | 夜夜操网 | 婷婷色在线观看 | 午夜丁香网 | 麻豆一级视频 | 国产视频一区在线 | 婷婷夜夜| 国产精品欧美久久久久无广告 | 国产成人精品一区一区一区 | 国产在线观看高清视频 | 亚洲精品视频在线免费 | 91亚洲视频在线观看 | 国产精品久久久久9999吃药 | 在线一二三四区 | 成人在线视频观看 | 国产乱码精品一区二区蜜臀 | 久久精品一级片 | 国产黄色一级大片 | 四虎成人精品在永久免费 | 久久精品网站视频 | 亚洲人片在线观看 | av福利网址导航 | 日韩精品视频免费在线观看 | 99在线精品视频观看 | 一级片视频免费观看 | 亚洲精品www久久久 www国产精品com | 亚洲天堂精品视频 | 久久老司机精品视频 | 一级黄网| 在线视频1卡二卡三卡 | 亚洲一区美女视频在线观看免费 | 这里有精品在线视频 | 日韩在线免费视频 | 中文伊人 | 久久久久成人精品 | 国产麻豆精品在线观看 | 日本精品一区二区 | 中文字幕精品一区二区三区电影 | 国产一区在线视频观看 | 免费在线观看的av网站 | 欧美午夜精品久久久久 | 97操操操| 五月天伊人网 | 欧美激情视频免费看 | 青青草国产精品视频 | 久久爱导航 | 久久人人爽爽人人爽人人片av | 国产精品第54页 | 日韩专区中文字幕 | 久久国产精品免费看 | 亚洲一区二区三区在线看 | 日韩动漫免费观看高清完整版在线观看 | 在线观看精品一区 | 五月天天天操 | 亚洲干视频在线观看 | 9在线观看免费高清完整 | www.色的| 中文字幕av免费在线观看 | 亚洲精品免费观看 | 国产首页 | www.狠狠色.com | 久久久网站 | 九九热在线精品视频 | 久草综合视频 | 97超碰人| 久久爱www. | 4hu视频 | 99视频免费 | 97电影院网 | 精品一二三四五区 | 夜添久久精品亚洲国产精品 | 夜夜躁日日躁狠狠久久88av | 去看片| 免费h视频 | 日韩av资源在线观看 | 免费看片网址 | 国产粉嫩在线 | 午夜视频在线观看一区二区三区 | 久久久污 | 日韩在线视 | 国产一二三区在线观看 | 日韩电影一区二区三区 | 日韩精品欧美视频 | 久久久精品午夜 | 久久综合一本 | 久久精品播放 | 亚洲资源在线网 | 99精彩视频在线观看免费 | 九热在线 | 激情五月在线 | 国产精品一区二区av | 欧美日韩国产综合一区二区 | 亚洲撸撸 | 9在线观看免费 | 国产精品福利无圣光在线一区 | 伊人色综合久久天天 | 日韩成人不卡 | 久久综合久久综合这里只有精品 | 三上悠亚一区二区在线观看 | 久久亚洲专区 | 久久婷五月 | 9在线观看免费高清完整 | 国产精品成人av电影 | 日韩欧美高清在线观看 | 久久手机精品视频 | 欧美大香线蕉线伊人久久 | 日韩精品一区二区三区在线播放 | 久久精品五月 | 免费看三级网站 | 久久免费观看少妇a级毛片 久久久久成人免费 | 久久精品播放 | 中文字幕免费一区二区 | 日韩精品一区二区三区在线视频 | 五月婷婷在线播放 | 97国产电影 | 成人网页在线免费观看 | 美女视频a美女大全免费下载蜜臀 | 毛片网在线播放 | 国产成人三级三级三级97 | 婷婷丁香久久五月婷婷 | 蜜臀av.com | 18国产精品白浆在线观看免费 | 久草视频一区 | 在线欧美最极品的av | 久久久久国产精品午夜一区 | 国产美女视频免费观看的网站 | 国产精品高清一区二区三区 | 精品影院一区二区久久久 | 国产精品免费大片视频 | 天天操操操操操操 | 黄色小说视频网站 | 波多野结衣一区 | 夜夜骑天天操 | 成人影音av | 日韩精品一区二区不卡 | 狠狠色伊人亚洲综合网站色 | 国产精品 国产精品 | 在线 国产一区 | 亚洲高清在线精品 | 在线观看亚洲国产 | 国产一级免费在线观看 | 菠萝菠萝在线精品视频 | 日日干天天爽 | 精品国产伦一区二区三区观看方式 | 91av电影| 欧美精品乱码久久久久久按摩 | 久久久影视 | 91理论片午午伦夜理片久久 | 国产在线一区二区三区播放 | 亚洲欧美日韩精品久久久 | 狠狠躁日日躁狂躁夜夜躁 | 日韩成人免费在线 | 日韩在线观看视频一区二区三区 | 久久精品视频免费播放 | 99爱这里只有精品 | 激情网在线观看 | 久久精品视频一 | 天天干天天操天天干 | 国产精品黄色在线观看 | 亚洲伊人成综合网 | 91麻豆精品国产91久久久久 | 超碰个人在线 | 色综合久久88| 免费99精品国产自在在线 | 成人免费网视频 | av成人免费在线看 | 久久久免费电影 | 婷婷色综合色 | 99精品在线免费观看 | 国产不卡在线观看视频 | 99视屏 | 天天射天天操天天干 | 99热九九这里只有精品10 | 在线看片a| 五月天狠狠操 | 精品视频不卡 | 99视| 国产喷水在线 | 五月婷婷欧美视频 | 国产精品久久久久久69 | 色视频网站在线 | 国产精品电影一区二区 | 久久av一区二区三区亚洲 | 免费观看成年人视频 | 欧美日韩高清在线观看 | 久久五月天色综合 | 高潮毛片无遮挡高清免费 | 国产精品6 | 精品一区二区三区在线播放 | 国产精品123 | 久久久久久国产一区二区三区 | www.色午夜| 免费在线观看成人av | 国产高清视频免费观看 | 国产不卡精品视频 | 国产中年夫妇高潮精品视频 | a级国产毛片 | 久久久久久久久国产 | 国产精品视频全国免费观看 | 丁香5月婷婷久久 | 在线观看中文字幕 | 又色又爽又激情的59视频 | 久久久久久久久久电影 | 激情喷水 | 三级黄色a | 五月婷婷综合色拍 | 欧美日韩视频精品 | 久久综合久久久久88 | 国产精品成人久久久久久久 | 欧美成人aa | 久久精品99北条麻妃 | 视频一区二区精品 | 激情小说久久 | 亚洲黄色片一级 | 免费在线观看成人 | 日韩中文字幕免费在线观看 | 成人污视频在线观看 | 午夜av在线播放 | 人人网人人爽 | 国产精品久久网 | 天天天色| 日韩精品影视 | 一区二区电影网 | 日韩理论片在线 | 成人污视频在线观看 | 91精品黄色 | 欧美性生活免费 | 亚洲精品色 | 在线观看免费高清视频大全追剧 | 国产高清久久久 | 亚洲精品国产自产拍在线观看 | 天天干,天天射,天天操,天天摸 | 久久久精品视频网站 | 天天爽夜夜爽人人爽一区二区 | 亚洲人人精品 | 久久久久久久久久久免费av | 六月丁香综合 | 在线观看视频一区二区三区 | 91在线国内视频 | 尤物一区二区三区 | 欧女人精69xxxxxx | 中文字幕一区二区三区四区视频 | 国产不卡在线播放 | 亚洲国产网站 | 一二三精品视频 | 蜜臀一区二区三区精品免费视频 | 久久99热久久99精品 | 中文字幕在线人 | 国产精品久久久久一区二区三区 | 久久 地址 | 免费看片网址 | 久久久片 | 精品字幕 | 精品一区二区三区四区在线 | 国产美女精品视频 | 久久久国产一区二区 | 久草在线视频国产 | 亚洲精品国产高清 | 在线观看视频一区二区三区 | 国产精品久久久久久久久久久杏吧 | 欧美久久成人 | 91在线播放视频 | 国内免费久久久久久久久久久 | 在线免费观看欧美日韩 | 欧美成人区| 日日夜夜中文字幕 | 国产精品久久久久久69 | 国产精品毛片一区二区在线 | 久久午夜网 | 久草视频在线新免费 | 亚洲午夜不卡 | 久久综合九色综合97婷婷女人 | 国产一二三区在线观看 | 午夜久久精品 | 久久久久久久久久影视 | 国产成人a亚洲精品 | 亚洲伦理中文字幕 | 欧美国产日韩一区二区三区 | 日韩欧美电影在线 | 国产亚洲在线视频 | 91看片麻豆 | 在线黄av| 香蕉成人在线视频 | 91xav| 成人午夜电影久久影院 | 日韩精品 在线视频 | 四虎影视精品成人 | 五月香视频在线观看 | 精品久久视频 | 久草在线精品观看 | 亚洲精品视频在线 | 人人爽人人搞 | 婷婷视频在线播放 | 91在线产啪| 日韩二区在线观看 | 免费看黄的 | 免费福利片 | 草久视频在线观看 | 三级黄色片在线观看 | av品善网 | 波多野结衣资源 | 欧美另类xxxx| 久久久久 免费视频 | 亚洲乱码精品 | 精品九九久久 | 一区二区电影网 | 欧美日韩精品在线免费观看 | 视频二区在线 | 国产一区二区日本 | 又污又黄的网站 | av高清不卡| 一区二区三区四区五区在线 | 久久一区二区三区四区 | 97精品国产97久久久久久 | 国产精品mv| 亚洲欧美va | 在线观看视频中文字幕 | 国产高清视频免费观看 | 99国产免费网址 | 久草在线视频首页 | 亚洲国产经典视频 | .国产精品成人自产拍在线观看6 | 免费av网站在线看 | 午夜视频久久久 | 精品国产伦一区二区三区观看体验 | 日韩在线播放av | 色综合五月天 | 激情在线免费视频 | 国产一区二区不卡在线 | 欧美性极品xxxx娇小 | 欧美精品亚洲精品日韩精品 | 51久久夜色精品国产麻豆 | 97精品国自产拍在线观看 | 98超碰在线观看 | 日韩欧美在线免费 | 国产成人精品一区二区三区福利 | 亚洲美女免费视频 | 久久激情五月丁香伊人 | www亚洲精品| www.香蕉视频 | 成人在线观看av | 免费一级日韩欧美性大片 | 久草在线最新视频 | 91在线产啪 | 婷婷激情av | 国产在线精品一区二区不卡了 | 亚洲电影成人 | 成人免费在线视频观看 | 91在线永久 | 欧美性高跟鞋xxxxhd | 久久久久99999 | 日韩欧美一区二区三区免费观看 | 最近的中文字幕大全免费版 | 久久免费99精品久久久久久 | 欧美精品国产综合久久 | 91网在线| 国产1区2区3区精品美女 | 久久九九免费视频 | 国产护士hd高朝护士1 | 在线观看中文 | 综合精品久久 | 婷久久| 久久久久久久久久久综合 | 日本久久久久久久久 | 午夜免费在线观看 | 操操操日日日干干干 | 视频一区二区视频 | 亚洲视频99 | 97超碰在线久草超碰在线观看 | 在线视频一二三 | 粉嫩av一区二区三区四区 | 久久综合精品国产一区二区三区 | 日韩亚洲欧美中文字幕 | 日韩一区二区三区不卡 | 日本成址在线观看 | 欧美亚洲成人免费 | 国内视频在线 | 91经典在线 | 色综合五月天 | 国产一区免费 | 一区二区三高清 | 成年人黄色在线观看 | 国产成人三级一区二区在线观看一 | 国产成人av网址 | 精品视频在线视频 | 久久精品视频在线看 | 一区二区三区在线观看免费 | 欧美日韩国产精品一区二区三区 | 久久免费精品 | 婷婷午夜 | 国产99黄| 一区二区三区福利 | 91亚洲精品乱码久久久久久蜜桃 | 久青草国产在线 | 国产成人精品一区二区三区免费 | 91av综合 | 亚洲砖区区免费 | 天天综合视频在线观看 | 精品在线不卡 | 亚洲精品在线二区 | 亚洲最新av网址 | 六月婷婷色| 91精品啪在线观看国产 | 特级毛片在线 | 中文字幕国产在线 | 黄色大全在线观看 | 奇米影视777影音先锋 | 久久久av电影 | 成人免费观看a | 丝袜美女在线 | 亚洲一级特黄 | 一区二区观看 | 亚洲国内精品视频 | 国产原创在线 | a v在线观看| 日韩欧美有码在线 | h文在线观看免费 | 午夜精品久久久久久久久久久久 | av高清免费| 中文字幕在线观看第二页 | 伊人久久影视 | 91香蕉视频好色先生 | 青春草免费视频 | 久久热亚洲 | 奇米777777| 亚洲精品91天天久久人人 | 国产精成人品免费观看 | 免费在线观看一级片 | 亚州欧美视频 | 亚洲精品资源在线观看 | 婷婷丁香色 | 久久免费视频1 | 国产99久久九九精品免费 | 免费91麻豆精品国产自产在线观看 | 中文字幕高清av | 中文字幕久久精品亚洲乱码 | 国产精品久久久久一区 | 成年人黄色av | 麻豆一区在线观看 | 99精品视频在线观看免费 | 丁香激情综合久久伊人久久 | 一个色综合网站 | 国产高清不卡一区二区三区 | 国产精品 日本 | 天天色 天天 | 亚洲欧美视频在线播放 | 日韩精品国产一区 | 国产成人不卡 | 久久综合婷婷综合 | 免费视频成人 | 久久免费视频在线观看 | 久久久亚洲成人 | 91天堂影院 | www.色com| 日韩电影在线观看一区二区三区 | 亚洲国产一区av | 日韩视频图片 | 99精品视频一区二区 | 91九色在线播放 | 久久国产精品99精国产 | 在线91网| 国产精品麻豆视频 | 91精品国产一区二区在线观看 | 久久开心激情 | 国产91在线 | 美洲 | 久草干| 国产精品一区二区三区在线免费观看 | 国产精品剧情在线亚洲 | 欧美精品首页 | 91av在线视频播放 | 毛片www | 手机在线看片日韩 | 99久久精品视频免费 | 成人午夜在线电影 | 国产最新在线视频 | 国产美女精品久久久 | 欧美精品在线观看一区 | 欧美激情视频免费看 | 日韩视频免费在线观看 | 91女子私密保健养生少妇 | 成年人免费电影 | 91麻豆精品国产91久久久久久久久 | 又黄又爽又湿又无遮挡的在线视频 | 美女视频国产 |