亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Java JDBC連接Hive實戰(zhàn):HiveServer2原理與五大避坑經(jīng)驗

Java JDBC連接Hive實戰(zhàn):HiveServer2原理與五大避坑經(jīng)驗 簡介面向Java與大數(shù)據(jù)開發(fā)者以Hive JDBC連接為主題提供一套可直接運行的基礎(chǔ)操作示例覆蓋通過Hive查詢語句創(chuàng)建表、插入記錄、查詢結(jié)果等常用場景也包含Kerberos認(rèn)證連接時的URL與參數(shù)配置參考。整個壓縮包共22個文件包括Maven配置xml、Java源碼、編譯后的class文件以及依賴jar包合計約24.97MB目錄結(jié)構(gòu)清晰可快速定位主程序和資源文件。已有2444人瀏覽學(xué)習(xí)適合正在入門Hive大數(shù)據(jù)開發(fā)、需要參考JDBC連接寫法或搭建實驗環(huán)境的讀者。資源整合了驅(qū)動依賴引入方式、連接建立步驟、結(jié)果集遍歷處理和資源釋放規(guī)范導(dǎo)入IDE后即可對照源碼理解并執(zhí)行能幫助開發(fā)者快速掌握J(rèn)DBC與Hive交互的完整實現(xiàn)思路。示例還保留了打包運行所需的target目錄與構(gòu)建配置可據(jù)此修改訪問地址、賬號密碼或認(rèn)證信息進(jìn)一步擴(kuò)展為數(shù)據(jù)導(dǎo)入、ETL等小型應(yīng)用也可作為后續(xù)接入Spring JdbcTemplate或MyBatis的起點。1. 用Java JDBC連Hive不只是跑通一個查詢那么簡單作為一個常年寫Java的工程師你可能閉著眼就能寫出MySQL的JDBC連接代碼但把URL換成jdbc:hive2://之后很多習(xí)慣都不成立了。Hive本身不是數(shù)據(jù)庫它沒有存儲過程、沒有事務(wù)甚至沒有專用查詢端口Java JDBC連接Hive數(shù)據(jù)實際是連接它背后的HiveServer2服務(wù)讓服務(wù)端去調(diào)度MapReduce或Tez完成計算。標(biāo)題里點名了“簡單的操作”但真從零開始做一遍可能會撞上驅(qū)動包沖突、認(rèn)證方式不明、查詢卡死等一堆問題。這篇文章面向有Java基礎(chǔ)、但對Hive JDBC只有模糊概念的讀者從連接原理講到最小工程再講到五條值得記錄的踩坑經(jīng)驗讓你不至于在第一步就翻車。2. 先搞懂Hive JDBC的底層鏈路HiveServer2與驅(qū)動選擇2.1 Hive JDBC不是連數(shù)據(jù)庫是連HiveServer2很多入門教程把“JDBC連Hive”說得和“JDBC連MySQL”一樣簡單這可太誤導(dǎo)了。Hive是一個數(shù)倉工具它把SQL翻譯成分布式計算任務(wù)底層對象是HDFS上的目錄和文件。Hive的元數(shù)據(jù)庫、表、字段、分區(qū)都存在MetaStore一般運行在獨立進(jìn)程里而負(fù)責(zé)接收客戶端請求的進(jìn)程是HiveServer2簡稱HS2。所以Java程序用JDBC連上HS2本質(zhì)上是建立一個Thrift會話然后把SQL字符串丟給HS2由它完成編譯、優(yōu)化、執(zhí)行和結(jié)果回收。你手里的Connection對象并不是在和某個數(shù)據(jù)庫實例對話而是在和HS2的會話服務(wù)對話。理解這一點前先記住一條關(guān)鍵結(jié)論Hive JDBC有一套獨立的驅(qū)動和URL協(xié)議和MySQL、Oracle完全不同。MySQL用com.mysql.cj.jdbc.DriverURL寫jdbc:mysql://ip:3306/db?useSSLfalse而Hive的驅(qū)動是org.apache.hive.jdbc.HiveDriverURL以jdbc:hive2://開頭。別小看這后半段它決定了HS2的認(rèn)證方式、底層的傳輸模式以及會話超時參數(shù)。如果你還停留在“JDBC只是換一個驅(qū)動類”的認(rèn)知后面排查問題時會很痛苦。HiveServer2本身是一個常駐的JVM進(jìn)程你可以把它理解成“SQL網(wǎng)關(guān)”。它內(nèi)部對接了執(zhí)行引擎可以是MapReduce、Tez或Spark。默認(rèn)配置下如果你什么都不改HS2會監(jiān)聽在0.0.0.0:10000但這不代表你的客戶端就能連上因為中間還隔著防火墻、用戶權(quán)限和認(rèn)證配置。常見的錯誤是Hive已經(jīng)安裝好了卻沒有人啟動HS2于是JDBC報告拒絕連接。在動手寫Java代碼之前先確認(rèn)這個服務(wù)是活的并且端口能被你的開發(fā)機(jī)訪問到。關(guān)于“為什么連接Hive要用HS2而不是連MetaStore”還有一個容易混淆的點MetaStore暴露的是Thrift接口端口通常是9083它只負(fù)責(zé)元數(shù)據(jù)讀寫不執(zhí)行SQL查詢。如果你用JDBC去連9083協(xié)議完全不兼容立馬報錯。所以只要看到j(luò)dbc:hive2://它的目標(biāo)一定是HS2的端口也就是默認(rèn)的10000。如果要把Hive的安裝與配置做扎實也請把hive-site.xml中的hive.server2.thrift.port和hive.metastore.uris這兩樣參數(shù)拆開記清楚一個是SQL入口一個是元數(shù)據(jù)入口別搞混。2.2 驅(qū)動類與URL格式Class.forName和jdbc:hive2://怎么匹配現(xiàn)在來看Java代碼里最直接的驅(qū)動類。Hive 1.x時代的老驅(qū)動類名是org.apache.hadoop.hive.jdbc.HiveDriverHive 2.0之后被新接口取代改成了org.apache.hive.jdbc.HiveDriver。如果項目中依賴的是Hive 3.x的hive-jdbc包加載的驅(qū)動類一定是后者。很多教程還停留在老寫法用了老驅(qū)動類不僅代碼風(fēng)格陳舊還可能和當(dāng)前的Hadoop版本沖突。我的建議是在新項目里只認(rèn)準(zhǔn)org.apache.hive.jdbc.HiveDriver這一個即使顯式寫Class.forName也不容易出錯。完整URL長這樣jdbc:hive2://hive-server.example.com:10000/default;authnoauth;socketTimeout60;transportModebinary不要把它和MySQL的URL混為一談。Hive的URL里除了host:port/dbName后面用分號拼接參數(shù)不是用問號和。常用的參數(shù)有auth指定認(rèn)證方式取值是noauth、kerberos、ldapsocketTimeout以秒為單位控制底層socket超時默認(rèn)是0表示不超時生產(chǎn)環(huán)境最好顯式設(shè)置否則一個卡住的任務(wù)會讓線程掛很久transportMode取binary或http前者是HS2默認(rèn)端口后者會走HTTP網(wǎng)關(guān)配合httpPath使用。這些參數(shù)不是擺設(shè)你會在第5章看到它們引發(fā)的實際問題。顯式加載驅(qū)動在JDBC 4.0之后不是必須的因為DriverManager能從classpath中自動發(fā)現(xiàn)META-INF/services里的驅(qū)動。但是如果開發(fā)環(huán)境里同時存在多個JDBC驅(qū)動或者你把hive-jdbc包用shade插件打進(jìn)了FatJarSPI可能失效這時在代碼里保留一行Class.forName(org.apache.hive.jdbc.HiveDriver)能減少不少玄學(xué)問題。這行代碼不會被記入什么“先進(jìn)做法”但它是穩(wěn)定兜底至少能讓ClassNotFoundException這個報錯早一點暴露。把URL和驅(qū)動類對應(yīng)起來之后還要理解“庫名”的語義。URL中間的那段dbName代表你要進(jìn)入的Hive數(shù)據(jù)庫比如default。你可以在每次打開連接時指定它也可以在連接后通過stmt.execute(use db)來切換。不過Hive JDBC的Connection.setCatalog、setSchema實現(xiàn)并不像MySQL那么完整很多版本壓根不支持所以最可靠的辦法還是把數(shù)據(jù)庫名直接寫進(jìn)URL里。順帶一提如果在URL中省略dbName連接會落到default庫建議不要依賴這個缺省值顯式寫清楚后面讀代碼的人也更舒服。3. 從零搭一個可復(fù)現(xiàn)的連接工程依賴、配置與最小示例3.1 環(huán)境準(zhǔn)備Hive的安裝與配置里最影響JDBC的三個點在你新建Maven工程之前先把服務(wù)端準(zhǔn)備好。假設(shè)你已經(jīng)完成了Hive的安裝與配置那至少要讓這三個點立住第一HiveServer2的綁定地址和端口要和開發(fā)機(jī)可達(dá)第二HS2和MetaStore兩個進(jìn)程都在運行第三用于連接的用戶有HDFS上讀寫對應(yīng)目錄的權(quán)限。第三個點特別容易被Java工程師忽略因為本地連接MySQL時數(shù)據(jù)庫賬號往往只管庫表權(quán)限但在Hive這里用戶最終要訪問HDFS文件沒有HDFS權(quán)限SQL能編譯卻會在執(zhí)行階段報PermissionDenied。啟動HS2的標(biāo)準(zhǔn)姿勢是在Hive安裝目錄下執(zhí)行nohup hive --service metastore /tmp/metastore.log 21 nohup hive --service hiveserver2 /tmp/hiveserver2.log 21 這兩行命令分別啟動了MetaStore和HiveServer2。注意順序一般建議先啟動MetaStore再啟動HS2因為HS2啟動時會去連接MetaStore。如果hive-site.xml里要求的MetaStore地址連不上HS2會直接啟動失敗或在日志里刷滿連接異常。檢驗是否啟動成功可以執(zhí)行l(wèi)sof -i :10000查看端口監(jiān)聽或者直接跑beelinebeeline -u jdbc:hive2://localhost:10000/default -n hive如果Beeline能連上說明服務(wù)端本身沒問題接下來寫Java就少一個變量。如果你的HS2綁定的是內(nèi)網(wǎng)IP而不是0.0.0.0記得把hive.server2.thrift.bind.host改成對外可達(dá)的地址否則開發(fā)機(jī)永遠(yuǎn)連不上。這些配置散落在hive-site.xml里常見問題是有人改了hive-site.xml卻沒重啟HS2導(dǎo)致連不上時根本測不出問題。還有一個和環(huán)境一起出現(xiàn)的坑Hive JDBC的Maven依賴會拖出一大堆Hadoop和Guava的傳遞依賴。我的經(jīng)驗是最好把hive-jdbc的依賴放在一個獨立的模塊里或者用maven-shade-plugin把依賴重新定位否則它和Spring Boot自帶的Guava版本沖突幾乎是家常便飯。版本選擇上可以直接使用與集群HIVE版本一致的坐標(biāo)比如3.1.3。不要盲目追新Hive的客戶端版本要比服務(wù)端版本略低或持平太高可能觸發(fā)協(xié)議不兼容。3.2 最小Java代碼建立連接、執(zhí)行查詢并打印結(jié)果現(xiàn)在可以寫Java了。先建一個最普通的Maven項目在pom.xml里加上依賴dependency groupIdorg.apache.hive/groupId artifactIdhive-jdbc/artifactId version3.1.3/version /dependency注意這個坐標(biāo)會傳遞引入hadoop-client、guava等一系列包。如果你不想在單測里被類的沖突折磨可以再用exclusions排除掉部分高版本Guava或者用shade插件處理。下面是最小可運行的代碼它做的事是連上HS2并打印所有庫名import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class HiveJdbcSimple { public static void main(String[] args) { String url jdbc:hive2://192.168.1.10:10000/default;authnoauth; String user hive; String password ; try { Class.forName(org.apache.hive.jdbc.HiveDriver); } catch (ClassNotFoundException e) { e.printStackTrace(); return; } try (Connection conn DriverManager.getConnection(url, user, password); Statement stmt conn.createStatement(); ResultSet rs stmt.executeQuery(show databases)) { while (rs.next()) { System.out.println(rs.getString(1)); } } catch (SQLException e) { e.printStackTrace(); } } }這段代碼的邏輯很簡單先顯式加載HiveDriver再通過DriverManager.getConnection建立連接然后創(chuàng)建Statement執(zhí)行show databases。注意我用了try-with-resources這樣Connection、Statement、ResultSet會在使用完畢后自動關(guān)閉避免連接泄漏。authnoauth表明這個HS2沒有開啟認(rèn)證user和password傳了也會被忽略但不傳user有時會觸發(fā)NPE所以建議保留。executeQuery返回的ResultSet和MySQL JDBC最大的不同是Hive JDBC的查詢是異步提交給HS2的executeQuery會阻塞等待作業(yè)執(zhí)行完成然后一次性緩沖返回結(jié)果。這意味著你的客戶端不能像MySQL那樣期待流式讀取數(shù)據(jù)量大時JVM堆可能被打爆。這個問題會在后面“避坑”章節(jié)細(xì)說?,F(xiàn)在只要知道跑通這個最小示例是后面所有操作的地基。如果你看到打印出的庫名列表恭喜你JDBC通路已經(jīng)打通。如果失敗建議先用Beeline跑同樣的URL這樣能把問題迅速定位在“Hive本身”還是“Java環(huán)境”。別一上來就懷疑自己的Java代碼Hive JDBC最常掛在服務(wù)端、網(wǎng)絡(luò)和依賴三件事上這些無法靠代碼修復(fù)。3.3 參數(shù)說明URL里的host、port、dbName與會話參數(shù)能把最小代碼跑通之后值得把URL里的參數(shù)吃得再透一點。host和port決定了你連哪臺機(jī)器這好理解dbName的作用也不只是定個默認(rèn)庫它還影響HS2做語句解析時的搜索路徑。比如你要查的表在ods庫URL寫成jdbc:hive2://host:10000/ods就能少寫一個庫前綴。如果表分布在多個庫那就在URL里寫default然后在SQL里寫ods.table_name。下面這張表是幾個常用參數(shù)的備查清單參數(shù)作用示例auth認(rèn)證類型noauth/kerberos/ldapauthkerberossocketTimeoutsocket層超時秒數(shù)0為不超時socketTimeout60transportMode傳輸方式binary或httptransportModehttphttpPath配合HTTP模式使用的網(wǎng)關(guān)路徑httpPathcliservicetimeZone會話時區(qū)影響時間類型轉(zhuǎn)換timeZoneAsia/Shanghai這些參數(shù)用分號拼接在URL尾部。還要注意如果某個參數(shù)值本身含特殊字符可能需要URL編碼這種情況多出現(xiàn)在Kerberos的principal里后面會提。另外Hive的會話參數(shù)并不都能通過URL設(shè)置比如你想讓某個查詢改用Tez引擎就得在每次連接后執(zhí)行stmt.execute(set hive.execution.enginetez)。這種set語句是會話級別的只對當(dāng)前Connection有效連接關(guān)閉后失效。通過JDBC設(shè)置會話參數(shù)比在HS2服務(wù)端全局修改要靈活得多。我一般在執(zhí)行復(fù)雜SQL前會在代碼里拼一個set mapreduce.job.reduces20之類的語句避免每個查詢都吃默認(rèn)配置。需要注意set語句的返回不是一個標(biāo)準(zhǔn)的ResultSet通常是一個只有一列字符串的結(jié)果集但如果你執(zhí)行的是set而不是set xxxHive會返回所有配置項這本身也是一個調(diào)試手段。還有一點容易忽略DriverManager.getConnection可能會在你的應(yīng)用里觸發(fā)大量的連接創(chuàng)建而HiveServer2每個連接都會占用一個會話線程。如果業(yè)務(wù)并發(fā)高務(wù)必在應(yīng)用層加連接池或限流否則HS2的線程數(shù)飆升最終表現(xiàn)為連接超時。這個話題留到第6章再展開但你現(xiàn)在至少要知道hive.server2.max.threads這個參數(shù)不是隨便設(shè)的它是HS2默認(rèn)線程池大小的上限。4. 實現(xiàn)簡單操作建表、寫入與查詢以及PreparedStatement的邊界4.1 用JDBC執(zhí)行DDL在Hive里建內(nèi)部表與外部表標(biāo)題里的“簡單操作”大部分是這三種建表、裝載數(shù)據(jù)、查詢。用JDBC執(zhí)行DDL和用Beeline操作幾乎一樣區(qū)別只是SQL語句不能有結(jié)尾分號也不需要額外傳腳本文件。下面這段代碼先檢查目標(biāo)表是否存在然后創(chuàng)建一個按日期分區(qū)的內(nèi)部表try (Connection conn DriverManager.getConnection(url, user, password); Statement stmt conn.createStatement()) { stmt.execute(create table if not exists ods.t_user_login ( user_id int, login_time string, device_type string) partitioned by (dt string) stored as orc); } catch (SQLException e) { e.printStackTrace(); }這里沒有用executeQuery因為DDL語句不會返回結(jié)果集execute就夠了。邏輯上create table if not exists可以保證重復(fù)運行時不會報錯但從工程角度看如果表結(jié)構(gòu)改了這種自動跳過會讓你的腳本悄悄失效。所以我更推薦在Java代碼里先查一下show create table的返回如果表存在且結(jié)構(gòu)不符就主動告警而不是靜默跳過。關(guān)于內(nèi)部表和外部表的選擇內(nèi)部表的目錄由Hive管理drop時數(shù)據(jù)被刪掉外部表需要指定locationdrop時只刪元數(shù)據(jù)HDFS文件還在。用JDBC做自動化建表時我強(qiáng)烈建議優(yōu)先考慮外部表尤其是讀取其他系統(tǒng)寫入的HDFS數(shù)據(jù)。因為JDBC執(zhí)行DDL太順滑時容易讓人忘記表后面還有一份物理數(shù)據(jù)。如果你建表時沒寫external默認(rèn)就是內(nèi)部表后續(xù)要恢復(fù)一份數(shù)據(jù)就要重新裝載了。建表語句中分區(qū)字段dt string的位置是“partitioned by”它不能在普通字段列表里重復(fù)出現(xiàn)。有很多新手會在這里把dt既當(dāng)普通字段寫一遍又放在分區(qū)字段里Hive雖然不報錯但查詢時會出現(xiàn)重復(fù)字段沖突這算是一個不成文的坑。在這里用stored as orc指定存儲格式也是建議的默認(rèn)值。ORC比TextFile在壓縮和統(tǒng)計信息上更適合數(shù)倉場景后文查坑時會看到它對小文件也有影響。4.2 裝載數(shù)據(jù)與查詢load data與select的JDBC寫法建表之后要裝載數(shù)據(jù)。如果數(shù)據(jù)已經(jīng)以文件形式放在HDFS上最直接的方式是執(zhí)行l(wèi)oad data。假設(shè)你已經(jīng)把login.log放到了HDFS的/data/20240901/目錄下Java代碼是這樣的String loadSql load data inpath /data/20240901/login.log overwrite into table ods.t_user_login partition (dt2024-09-01); try (Statement stmt conn.createStatement()) { stmt.execute(loadSql); }注意load data inpath會把HDFS上的文件“移動”到表目錄里而不是復(fù)制。如果源目錄是業(yè)務(wù)系統(tǒng)的實時產(chǎn)出移動后源數(shù)據(jù)就沒了這是一個很危險的操作。我在生產(chǎn)環(huán)境里一般不會用load data inpath去接外部業(yè)務(wù)數(shù)據(jù)而是采用load data local inpath從HS2所在機(jī)器的本地目錄上裝載或者干脆用外部表指向那個目錄再通過msck repair table刷新分區(qū)。用JDBC執(zhí)行l(wèi)oad data時local的語義稍微有點繞如果寫的是local那么文件路徑是HS2服務(wù)端的本地路徑不是你Java程序所在機(jī)器的路徑。這一步有無數(shù)人踩坑因為開發(fā)環(huán)境里跑Java的機(jī)器和HS2通常不是同一臺。裝載完數(shù)據(jù)后寫一個帶統(tǒng)計的查詢String sql select dt, count(1) from ods.t_user_login where dt 2024-09-01 group by dt; try (Statement stmt conn.createStatement(); ResultSet rs stmt.executeQuery(sql)) { while (rs.next()) { System.out.println(rs.getString(dt) \t rs.getLong(2)); } }Hive JDBC的ResultSet和MySQL相比存在以下區(qū)別默認(rèn)fetchSize是1000也就是說HS2一次性給客戶端的行數(shù)是有限的超過部分要在Java代碼里慢慢迭代getString(dt)按列名獲取是能用的但不保證所有版本都支持重復(fù)列名。建議能按列序號取的就按列序號取避免HS2在列別名解析上的差異。這個小細(xì)節(jié)在數(shù)據(jù)字段多、SQL別名復(fù)雜時尤其有用。load data還有一個隱藏的語義overwrite關(guān)鍵字會清空分區(qū)里已有的文件再放入新文件。如果你想追加數(shù)據(jù)就不要寫overwrite讓HS2把文件放進(jìn)去。但這里要提醒如果文件格式是ORC源文件格式和表格式不一致時load data不會做轉(zhuǎn)換它會直接把源文件放到表目錄里導(dǎo)致查出來是亂碼或零行。很多團(tuán)隊最終放棄load data改為在Hive里用insert把數(shù)據(jù)轉(zhuǎn)換一次就是這個原因。4.3 PreparedStatement在Hive JDBC里的使用邊界很多Java開發(fā)者一看到JDBC就習(xí)慣性地用PreparedStatement但在Hive JDBC上要格外冷靜。Hive JDBC驅(qū)動對PreparedStatement的支持是“能用但功能很有限”。正則的?占位符在executeQuery里能工作但綁定參數(shù)的類型推斷有時會出錯比如字符串參數(shù)被當(dāng)成列名或數(shù)字。更關(guān)鍵的是Hive不支持事務(wù)Connection的commit/rollback基本是空操作在執(zhí)行“寫操作”時executeUpdate的返回值也和各種數(shù)據(jù)庫都不一樣有的版本返回-1或0不能依賴于這個返回值判斷是否有數(shù)據(jù)變更??匆幌掠肞reparedStatement插入單條語句的嘗試String insertSql insert into table ods.t_user_login values (?, ?, ?, ?); try (PreparedStatement ps conn.prepareStatement(insertSql)) { ps.setInt(1, 1001); ps.setString(2, 2024-09-01 08:00:00); ps.setString(3, ios); ps.setString(4, 2024-09-01); ps.executeUpdate(); }這段代碼在Hive 3.x上能跑通但它會觸發(fā)一個MapReduce或Tez作業(yè)非常慢。如果循環(huán)一萬次就是一萬個作業(yè)產(chǎn)生的開銷和小文件數(shù)量都不可控。這里就涉及到“hive優(yōu)化小文件”的核心場景你在Java代碼里用insert into values一條條寫Hive在本質(zhì)上并不是行級數(shù)據(jù)庫每執(zhí)行一次都可能在HDFS上產(chǎn)生至少一個文件。我見過有人用這種寫法同步日志跑了一晚上表目錄下出現(xiàn)了上萬個小文件查詢性能一落千丈。正確姿勢是如果業(yè)務(wù)性質(zhì)是離線批量導(dǎo)入先寫臨時文件再用load data一次裝載如果數(shù)據(jù)原本在關(guān)系庫里應(yīng)該走Sqoop或編寫Flink/Spark的批量寫入而不是在JDBC里逐條insert。即使某些場景非用insert不可也盡量用insert into ... select ...配合distribute by或cluster by來控制最終生成的文件數(shù)。PreparedStatement在Hive里更大的價值不是避免SQL注入而是讓你把SQL模板化至于參數(shù)注入安全Hive JDBC實質(zhì)上把SQL原樣發(fā)給HS2注入風(fēng)險反而要更認(rèn)真地對待。既然PreparedStatement有這個短板那就老老實實回到Statement。日常做數(shù)據(jù)校驗或臨時查詢直接拼接SQL并不丟人只要你拼的是固定表名和硬編碼條件不把用戶輸入直接拼進(jìn)去。如果一定要用綁定變量先在你的Hive版本上做一次小實驗把參數(shù)類型和結(jié)果集列類型打印出來比對。多數(shù)情況下你會發(fā)現(xiàn)與其和驅(qū)動的限制搏斗不如改用Statement再用自定義的占位符替換。5. 常見問題與避坑從連接失敗到查詢卡死的5條血淚記錄5.1 連接失敗ClassNotFoundException、端口不可達(dá)與URL缺庫名現(xiàn)象程序一啟動就拋ClassNotFoundException: org.apache.hive.jdbc.HiveDriver或者在DriverManager.getConnection時拋出Could not open client transport。前者說明依賴沒進(jìn)classpath后者說明網(wǎng)絡(luò)或服務(wù)不可達(dá)。原因往往有幾種Maven項目里只引入了老的hive-jdbc但類名寫錯依賴被Scope為provided運行期缺失或者HS2沒啟動、防火墻擋了端口。解決方法是先分開驗證用mvn dependency:tree查驅(qū)動包是否引入再用telnet host 10000查端口最后用Beeline做同樣URL的連接測試。URL缺數(shù)據(jù)庫名導(dǎo)致的異常通常表現(xiàn)為“表找不到”或“Failed to Schema”其實只是因為缺庫名讓HS2用了你沒權(quán)限的默認(rèn)庫加上顯式的dbName基本能處理掉。5.2 查詢卡死fetch size、作業(yè)排隊與執(zhí)行引擎現(xiàn)象SQL明明不復(fù)雜但executeQuery遲遲不返回甚至幾分鐘過去了還沒結(jié)果。原因不只是JDBC慢可能還有兩個一是HS2把SQL提交給了YARN但集群里任務(wù)隊列滿作業(yè)一直排隊二是Hive JDBC在結(jié)果集拉取時默認(rèn)用fetchSize1000當(dāng)結(jié)果集很大但你又想一次性裝進(jìn)List時JVM一直在累積數(shù)據(jù)看起來就像卡住。解決方法是先把stmt.setFetchSize(100)調(diào)小同時在SQL里加limit來限制規(guī)模其次要去看HS2日志或YARN頁面確認(rèn)作業(yè)是在ACCEPTED還是RUNNING狀態(tài)。如果連的是同一套集群把hive.execution.engine切到tez往往能縮短調(diào)度時間但不要隨便在URL里加這個參數(shù)它屬于會話級設(shè)置需要顯式set。5.3 小文件問題JDBC寫入后如何避免HDFS小文件失控現(xiàn)象用JDBC循環(huán)寫了幾萬行后表目錄里出現(xiàn)數(shù)十個幾十KB的文件查詢時NameNode壓力變大跑MapReduce的map數(shù)也跟著爆炸。原因就是前面提到的“逐條insert into values”以及l(fā)oad data時直接丟入過多小文件。解決方向有三個第一批量裝載時先合并輸入文件例如在HDFS上把多段小日志合并成200MB以上的大文件第二用insert overwrite ... select ... distribute by ...作為轉(zhuǎn)換和合并的手段讓Reducer個數(shù)和數(shù)據(jù)分布匹配第三配置Hive的自動合并參數(shù)比如hive.merge.mapredfilestrue、hive.merge.size.per.task這些參數(shù)屬于“hive優(yōu)化小文件”的通用手段不只局限于JDBC場景。我的踩坑經(jīng)歷是做數(shù)據(jù)清洗任務(wù)時在JDBC里用了insert into ... values做全量回刷結(jié)果一個分區(qū)下多出幾百個小文件?,F(xiàn)在只要通過JDBC寫數(shù)據(jù)我都會確認(rèn)目標(biāo)是“一次一個作業(yè)”而不是碎片化插入。5.4 時區(qū)與類型轉(zhuǎn)換TIMESTAMP和DECIMAL的坑現(xiàn)象表里存的時間是2024-09-01 12:00:00通過JDBC讀到Java里卻變成了2024-09-01 04:00:00或者BigDecimal取出的標(biāo)度比預(yù)期多幾位。原因通常有兩個Hive底層時間戳以UTC存儲JDBC連接時沒有指定timeZone驅(qū)動按默認(rèn)時區(qū)轉(zhuǎn)換DECIMAL在Hive里是二進(jìn)制格式JDBC驅(qū)動在getObject時可能返回一個帶大量尾數(shù)的BigDecimal。解決方法是URL里加timeZoneAsia/Shanghai并在Java側(cè)統(tǒng)一LocalDateTime解析對于DECIMAL顯式用rs.getBigDecimal(col).setScale(2, RoundingMode.HALF_UP)而不是直接用getObject。如果你還在為“為什么同一張表用Beeline和用Java讀出來不同”發(fā)愁第一時間去查連接串和時區(qū)而不是懷疑Hive數(shù)據(jù)被寫壞了。5.5 Kerberos與安全集群認(rèn)證參數(shù)怎么給現(xiàn)象本地開發(fā)環(huán)境連測試HS2好好的一連接安全集群就報GSSException: No valid credentials provided或Authentication failed。原因是在Kerberos開啟的集群里HS2要求客戶端必須先拿到Ticket-Granting Ticket。解決方式分兩步啟動Java進(jìn)程時帶上-Djava.security.krb5.conf/etc/krb5.conf在代碼里使用UserGroupInformation.loginUserFromKeytab完成登錄然后連接URL里寫明;principalhive/hostnameREALM;authkerberos。如果你不想寫代碼開發(fā)期可以先用kinit在本地獲取憑證再運行Java進(jìn)程。一個常見的誤用是給noauth的集群也配上Kerberos參數(shù)這不會讓連接更安全反而會誘導(dǎo)驅(qū)動走錯誤的認(rèn)證流程。判斷集群到底開沒開認(rèn)證直接看HS2日志里的AuthType或Beeline用-u jdbc:hive2://host:10000/;authnoauth是否能連通用最小實驗做界定再去調(diào)整Java端。6. 進(jìn)階把連接池、日志與驗證方法用起來6.1 用連接池管理Hive連接Hive連接并不“輕”一個Connection背后就是一個HS2會話HS2會為會話分配一組線程資源。如果應(yīng)用只做低頻查詢直接用裸連接就夠了但如果要嵌入數(shù)據(jù)服務(wù)建議還是引入HikariCP這樣的連接池。配置時最大連接數(shù)不要照搬MySQL的50、100我會控制在510個因為真正的并發(fā)是HS2服務(wù)端線程不是連接數(shù)。HikariCP初始化時設(shè)置connectionTestQuery為select 1實際上Hive JDBC不一定支持這個語法但HS2會將select 1翻譯成MapReduce里的一個小任務(wù)代價很重。所以更合適的測試方式是validationTimeout短一點并且不用connectionTestQuery讓連接池只依賴setAutoCommit(false)這類輕量調(diào)用去檢測存活。每個集群規(guī)模、任務(wù)跑法不同最終還是需要壓測后再調(diào)整。6.2 驗證你的操作是否真正生效寫完“簡單操作”之后驗證環(huán)節(jié)比寫代碼更重要。我的習(xí)慣是每次都開著Beeline做對照。比如通過JDBC執(zhí)行create table后立刻在Beeline里show create table確認(rèn)表結(jié)構(gòu)執(zhí)行l(wèi)oad data后用hdfs dfs -ls /user/hive/warehouse/ods.db/t_user_login/dt2024-09-01看文件塊大小和數(shù)量執(zhí)行查詢后去YARN的Application頁面看日志確認(rèn)是Tez還是MapReduce以及各階段IO都跑完。還有一個很容易被忽略的驗證點用JDBC的isValid方法或者再執(zhí)行一條select 1來確認(rèn)連接還活著但這在Hive上代價不小所以放一條真實的小查詢比isValid更有說服力。這套驗證習(xí)慣是從一次翻車?yán)飺Q來的。幾年前我在一個數(shù)據(jù)平臺項目里想當(dāng)然地認(rèn)為Hive JDBC和MySQL JDBC一樣可以批量更新事務(wù)數(shù)據(jù)結(jié)果用PreparedStatement循環(huán)插了一晚上第二天一查不僅性能慘不忍睹還留下了一堆小文件。后來我改變了做法凡是能用load data一次完成的絕不用循環(huán)insert凡是能在Beeline里先驗證的絕不在Java代碼里賭一把。希望這些經(jīng)驗和坑位清單能幫到你在Java JDBC連接Hive這條路上少走一段彎路。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩一级特黄av毛片| 欧成人精品一区二区三区| 日产精品久久久一区二区| 亚欧免费| 少妇人妻精品| 午夜啪| 99日韩| 亚洲亚洲亚洲天堂天堂| 巨爆乳肉感一区二区三区竹菊影视| 欲射影视| 国产三级中文有码在线视频| 狠狠操狠狠燥| 亚洲Av无码成人精品国产| 日本999精品| 青娱乐淫乱1314| 天堂精品在线| 天天做天天爱| 2019AV天堂| 无码不卡八戒| 夜夜嗨绯色| 高清无码一区二区三区| 精品大全99999| 亚洲高清无码免费观看视频| 伊香蕉综合久久久久久久噜噜噜| 男人天堂站| 亚洲一区日韩精品中文字幕| 99热这里只有精品1| 人妻中文字幕日韩电影| 欲香欲色综合天天伊人| 亚洲国产一区二区三区在线| 操逼操逼逼操操逼91 | 色色五月婷婷| 亚洲日韩天堂| 春色综合免费| 玖色AV| 日韩在线一区高清在线| 天天综合网在线91| 天美一二三在线观看Av| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 日韩人妻精品中文字幕| 九九热免费国产视频婷婷伊人五月 | 丰满精品人妻少妇久久字幕| 在线观看中文字幕| 婷婷九月丁香| 欧美日韩激情无码专区| 久久99网站| 日韩一级二级在线| 久久久久久久综合,国产| 91制服丝袜| 免费成人自拍视频在线| 丝袜剧情| 日本超碰97日韩精品人妻| 麻豆区久久久久亚| 成人性爱AV在线免费观看| 久草免费在线一区二区| 人人干人人搞人人摸| 亚洲情色五月天| 玖玖在线视频| 黑人性欧美| 国产一区二区三三视频| 91n美女视频| 天天干人人乐| 极品色www影院| 亚码人妻| 黄色一级视| 天天天乱色综合全| 国产精品99精品视频网站| 色婷五月天| 992大香蕉| 婷婷色五月激情| 精品人妻一二三四区视频| 老外又粗又长一晚做五次| 日本熟妇一区二区三区| 日韩成人无码| 精品人妻一区二区三区视频| WWW操逼| 男人的天堂激情| 我要去看2个日本美女.com曹逼| 欧美一级A片在线看视频性色| 人人污日韩一区二区| 婷婷五月成人| 人妻一区二区三区视频 | 南澳成人一级片在线播放| 操逼操网| 欧美日韩小说| 久久久久久久久久久久久9999| 精品人妻中文字幕高清| 亚洲凸凹超碰成人| 亚洲午夜AV| 蜜臀久久99精品久久久久| 免费啊啊啊| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 国产无码精品高清| 亚洲日韩欧美一区二区| 成人黑料社久久| 国产熟女一区二区| 欧美老妇女内射网址| 51国产午夜精品视频| 男人天堂.AB| 少妇高潮九九九九| 嗯嗯不要视频| 欧美少妇高潮久久91| 九九激情网| 99在线无码精品秘 入口黑人| 有码人妻系列| 欧美综合 站| 天天影视综合色| 99人妻| 欧美性爱91| 91久久久久久久| 久久夜夜夜夜| 国产精品久久久久久久久久久久久久吹| 日韩无码一级黄色av片| 亚洲免费成人在线高清无码视频| 久久男女激情视频网站| 欧美色图亚洲特色| 香港久久久| 久久欲| 激情综合五月| 97国产综合欧美| 日韩免费高清大片在线| 色狠狠色| 大香蕉草草| 五月天人妻综合| 成人a v在线播放免费| 亚洲综合电影| 婷婷久草| 成人草草视频| 青娱乐国产盛宴视频| 亚洲国产欧美一区二区潘金莲| 天天看特黄的免费网站| 美女尤物福利视频| 吻戏激情性巴克| 久久黄黄| 狠狠色综合网| 免费看A片毛毛片在线播| 5252色欧美在线男人的天堂| 艳尻美人妻| 亚洲欧洲网站免费观看| 日韩性爱视频在线免费观看| 风韵犹存大大大大香蕉| 啊啊啊97视频| 大香蕉伊人亚洲| 精品日韩人妻视频| 少妇淫妇久久久久久久| 国产 无码 一区二区| 国产亚洲美日韩Aⅴ中文字幕无码成人| 久久香蕉综合一本到3atv| 亚洲有码 视频一区| 天堂精品一区| 国产极品一区二区三区三州| 中字一区| 天天干人妇| 麻豆福利视频导航| 秋霞一级A片黄色视频| 婷婷丁香成人| 男人天堂2019| 亚洲激情网一二三四区| 色色福利| 亚洲精品熟妇1区2区3区。| 久久青青草原免费视频| 97碰碰日本乱偷人妻中文的| 欧美经典一区二区三区| 麻豆区久久久久亚| 免费精品99| 久久精品国产亚洲妲己影视| 91四海无码日韩欧美| 艳美熟妇先锋一二三区| 久久男女激情视频网站| 久久久久78| 自拍偷拍 高清无码| 国产又粗又长视频| 在线综合 亚洲 欧美中文字幕 | 国产精品无套内谢| 亚洲情色在线| 9久热这里只有精品| 五月天婷婷色| 日本一级真人黄色性爱视频| 女人天堂AV五区在线| 久热这里只有精品9| 九九久久精品| 国内一级精品| 懂色AV一区二区三区| 嗯啊不要在线| 外国免费性情大片| 六月色婷婷| 免费啪啪啪网站18岁| 欧美男女午夜啪啪| 亚洲色欧美| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 亚洲图片欧美在线视频| 欧美中字二区| 人摸人人操人| 久久精品亚洲成a人天堂| 2017人人操,人人摸| 日本人妻中文字幕精品| 欧美极度丰满熟妇hd| 另类小色呦| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 大奶啊啊好爽| a片久久久久久久久久久久| 欧美在线播放aaaa| 99亚洲精品| 九九九国产精品| 秋霞福利网| 人妻天天爽夜夜爽精品2| 自拍鲍鱼一区在线高清观看免费| 91啪啪| 欧美色性爱| 少妇内射www在线观看视频| 蜜桃久久久久久久| 国内操逼视频二区| 内射老妇BBWX0C0CK| 色网在线| 日本999精品| oumeizonghese,www| 日韩精品人妻中文字幕久久久| 亚洲情色1区| 97人肏| 久久亚洲影院一区二区| 天堂日本亚洲欧美| 欧美影音在线| 国产AV线| 五十路三区在线| 一区二区视频在看| 国产丝袜欧美在线视频| 国产精品免费视频人成| 日本美女性生活久久久久久久| 成人夜夜爽| 天美国产精品| jiujiujiujingpin| 欧在线一二区| 亚洲另类久操网| 少妇与黑人高潮在线| 熟妇人妻一区二区 | 后入式视频国产自| 色噜噜狠狠色综无码久久合欧美| 国产91福利小视频在线观看| 黄色欧美性爱视频| 国产精品一区人妻精品阁在线| 亚洲色图久久成人| 久久99精品国产| 91痴汉| 国产剧情在线| 精品成人动漫一区二区| 五月婷婷六月色| 成人无码专区精品视频| 国产av色网| 97在线免费观看| 大香蕉www.超碰| 岛国成人av在线播放网址| 禁片 高清 在线观看视频网站| 亚洲美欧999| 九九九九九九九| 熟妇熟女一区二区三区| 九九探花视频在线观看| 久久秀这里有精品| 91天天美女| 在线观看亚洲成人精品| av大香蕉| 天天操天天日天天干| 免费视频一二三区| 天天操天天舔| 亚洲第一二区另类图| 精品人妻美妇91job| 久草视频制服诱惑| 国产亚洲精品无码三区| 伊人色综合网电影| 亚洲男人天堂视频| 亚洲最大成人a毛毛片| 精品国产自在在线99| 亚洲色图自拍| gogogo免费高清看中国国语| 日韩精品一区二区三区色欲| 91美女国产在线| 国产自制av蜜乳| 久综合网| 伊香蕉综合久久久久久久噜噜噜| 懂色AV蜜臀无码精品APP| 在线观看A啊啊啊| 蜜臀久久99精品久久久久久-DVD| 自拍鲍鱼一区在线高清观看免费| 国产精品久久久久久9999| 91久久免费视频互動交流| 五月天激情网站| 黑人干亚洲| 黄视频免费| 一区二区三区日韩欧美| 久久在线观看免费视频| 欧美最婬乱婬爆婬性视频 | 欧美一二三| 四虎影院成年人片| 精品一区二区2| 激情文学 国产一二三aV| 成人在线日韩| 国产成人久久久精品免费AV| 欧美系列在线一区二区| 国产日本久久免费精品| 国产精品久久久久久久久AV大片| 久久久97| 天天干天天日天天射黄色片| 五月亭亭六月丁香| 91亚洲青青草原精品1区| 欧美激情一区| 久久綜合很很很| 久草尤物| 精品成人女人久久| 久操大香蕉手机视频在线看| 精品在线蜜臀| 青春草A| 一级@啪啪视频| 亚洲日产专区婷婷| 欧美日本国产日韩激情视频| 日韩偷拍色图| 热思思免费视频| 在线黄色污污网站| 操逼操逼视频操逼| 人人妻人人爽| 久久久性少妇| 97鸡把在线视频| 五月婷婷综合网| 在线视频97| 国产极品久久久| 国产无码一二三区| 亚洲中文字幕在线视频一区二区| 特级大荫道BBwBBwBBW| 激情国产乱伦Av| 日韩欧美三级| 日本裸体久久色噜噜| 久久久久久电影| 4tube欧美女厕所| 亚殴在线| 国产亚洲精品第一最新| 久久大黄片| 日韩欧美偷拍美女视频| 亚洲色婷婷| 国产高清精品一区二区三区毛片| 日本在线999| 超碰三级秋霞| 成人十八禁日韩欧美一二三| 国产成人无码高清| 国内毛片欧美香蕉精品| 国产九九九九九九| 97超碰色屌| 看一级黄色视频| 国产又猛又粗又爽又黄| 国产97av| 亚洲麻豆18发?| 人妻夜夜爽天天爽麻豆三区网站| 簧片免费看视频| 国产家庭乱伦表演| 综合久久9| 久久精品一区一起草| 国产一区二区三区不卡手机在线| 久久婷婷五月天| 欧美黑人精品一区二区| 日韩精品在线观看观看| 色吧5亚洲| 69久久| 色香在线| 日本东京热大香蕉a片| 亚洲情色电影网| 午夜黄色免费在线观看| 91深夜夜| 又粗又长又爽在线观看| 精品人妻视频入口| 无遮挡男女激烈动态图| 97欧美在线| 天天干夜夜操一区二区| 懂色av中文字幕一区二区三区天美 | 夜夜高潮夜夜爽夜夜爱爱一区| 女生自91网站| 黄色小说亚洲| 久久婷婷在线观看视频| 熟妇人妻一区二区三区| 日本精品88888888| 欧美黑人与女人91~| 亚码激情| 亚洲国产一区二区三区在线| 91九久| 色五91| 乱精品一区字幕二区| 激情色播| 五月婷婷激情综合| 国产毛片精品一区二区色欲黄A片| 欧美特大黄一级片片免费| 二男一女成人A片| 久久男人精品| 日韩欧美亚洲一区二区三区影院| 伊人久操| 亚洲人人操| 人妻熟女午夜精品在线| 青青草自拍视频在线播放| 欧美专区在线| 人妻黑丝袜电影| 久久妇| 91视频女生| www男人天堂| 人妻欧美| 亚洲无线码欧洲精品区别| 黄色片,com| 天天操天天舔| 久久精品人体| 亚洲美女色图| 老熟乱一区二区三区四区| 日韩欧美女求操每天更新| 九九热九九| 三级精品三级在线观看| 被体育老师抱着c到高潮| www.zbzhongsen.com| 国产极品999| 日韩精品9区| 欧美综合亚洲| 国产无码三级视频在线观看| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 日韩精品中文字幕一| 爽极品影院| 久久婷婷亚洲| 一道本东京热加勒比一区二区三区| 91日日| 俺去啦自拍| 熟妇乱伦一区二区| 18禁超污无遮挡无码免费网| 啊啊啊不要好疼视频| 四虎免费看黄| 亚洲欧美人妻| 中文字幕av亚洲在线| 精品久久久久9999| 色欲久久99精品久久| 丁香婷婷五月| 天美麻花大全视频| 97精品97久久| 国产精品成人AV片免费看网站| 日韩色| 色呦呦、国产精品| 亚洲 日本 不卡| 日韩A优精品在线观看| 亚洲国产第一页综合视频| 国产偷人妻精品一区二区在线| 91丰满| 1024人妻熟女一区二区三区| 青久操| 97精品免费| a级理论午夜日本| 禁十八久久| 伊人操| 国产成人精品亚洲日本| 热热色色综合| 久久国产乱子伦精品免费女人| 91精品国产综合久久久蜜臀| 国产AV中文| 国产91久久九九免费精品无码| 欧美一二在线| 偷拍 欧美 日韩| 人妻熟女一区在| 久久久久久中文| 五月天丁香婷婷综合网站| 亚洲欧美综合色| 天天日天天操天天射河南省| 香蕉在线一区二区三区| 国产精品久久泡妞网站| 亚洲精品亚洲人成人网| 欧美综合1性辶| 国产小u女在线观看| 精品视频久久区| 亚洲国产欧美另类自拍| 久久久久斤小| 在线中文字幕极品av| 成人精品欧洲亚洲| 一起草精品人妻| 精品综合久久久久久97| 熟女被操视频网址| 上特色A在线| 91爱综合| 欧美性生活男人的天堂| 秋霞一区二区三区四区五区六区七区| 午夜福利无毒不卡| 亚洲精品1区| 日韩成人精品视频自拍| 看看日B真人视频| 97任你吞精| 凹凸 69堂 在线播放| 这里都是精品在线观看| 亚洲色图亚洲| 在线亚洲精品久久久| 大黄片做爱的大的| 亚洲校园激情| 国产九九久久久精品| 日韩精品一区二区高清 | 日韩免费三级黄片电影| 久久久精品久久| 熟女被操视频网址| 9久在线视频只有精品| 日韩精品99久久久久久中文字幕| 黄色网址在线免费观看| 中国91AV| 婷婷色网| 99色婷婷| 一二三四视频中文字幕在线看| 九一国产精品| 女人天堂AV五区在线| 午夜福利1区2区3区| 骚逼自拍99| 丁香六月啪啪| 99精品欧美一区二区三区桃色| 99视频自拍区| 91久久18禁| 不卡免费av在线播放| 在线午夜成人无码视频| 亚洲日本大香蕉1| 亚洲中文字幕有码视频一区二区三区| 夜夜影视四色| 欧美人与动性人交a| 久久精品中文字幕女同| 老鸭窝亚洲毛片| 最新啪啪视频| 小视频国产| 91bbbbbb| 97超级色碰碰| 91网站视频在线观看| 九九热超碰| 丰满人妻一区二区三区四区| 欧美少妇色图| 午夜操一视频一区| 嫩草黄页| 超碰97最新人妻| 丰满人妻一区二区三区四| 色综合久久88色综合久久天天| 欧美资源| 快点操死我| 日韩电影天堂视频二区三区| 99色视频| 91丨九色丨国产丨人妻在线| 国产不良强奸视频免费看| 少妇干B| 无码免费一区二区三区啪啪| 是还免费视频1727我| 一本色道久久综合精品婷婷| 波多野结衣一级视频| 欧美日韩成人| 欧美综合网1| 久久精品国产亚洲5555| 成人国产精品三级A片| 欧洲中文字幕| 大香蕉淫人| 日韩精品一区二区日韩| 色香阁在线| 日本黄色精品| 国产欧美一级在线观看| 国产AV天美| 久久二| 中文字幕av乱伦| 青女在线| 亚洲精品成人动漫在线| 国产人伦精品一区二区三区| 超碰99在线| 黄aaaaaaaaaaaaaaaaaa色网站| 10000部十八禁看电影| 人妻夜夜爽天天爽三区麻豆AV网站| 抽插无码高清一区| 97热视频在线观看| 国产51色综合久久免费| 丝袜性亚洲| 蜜桃狠狠色伊人亚洲综合网站| 色情五月综合婷婷| 欧美第五页| 国产在线视视频有精品| 亚洲欧美啪啪| 免费强奸av| 老女人91| av天堂手机版追回| 欧美肥臀在线| 丁香色五月 97干| 草B在线| 操99| 清纯唯美亚洲综合| 另类图片五月| 日韩熟女三十乱伦| 国产成人AV麻豆| 91ise欧美| 伊人91| 五月丁香久久| 97爱爱爱| 亚洲色图20p| 日韩簧片免费看| 国产九区| 欧美一品道| 福利大香蕉| 亚洲天堂资源网| 国产美女口爆吞精视频| 国产乱人伦AVA麻豆软件.| 香蕉久久国产AV一区二区| 久久久久久中文字幕中文字幕最新| 熟妇艹鸡八| 在线电影亚洲色图| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 国产精彩女在线观看视频| 欧美性色欧美| 91香蕉视频在线观看免费| ?亚洲伊人伊成久久人综合网| 丁香激情网| 日本最新免费韩国1区2区视频播放| 色香综合天天影视综合| 成人精品在线免费视频| 久久久国产成人一区二区三区在线| 黄色大片一区二区密桃丝袜| 中出在线视频| www亚洲免费| 色噜噜综合在线| 久久久久久久久国产| 91精品人| 婷婷97| 神马九九九| 成人26uuu| 婷婷五月花| 91少妇通奸网站| 亚洲一区在线观看欧洲| 日本91白丝| 超碰欧美COM| 亚洲中文日韩欧美大香蕉视频| 九九久久久久久爱| 亚洲日韩精品一区二区| 另类一区| 日韩av情韩国爱禁区av一区二区| 亚洲AV无码乱码| 亚洲色鬼| 丰满少妇一区二区三区免费看| 手机在线观看不卡无码av| 女人一区| 青青青国产手线观看视频2| 床上啊啊啊一区二区三区| 国产三级中文字幕粉嫩| 91人妻素女| 91欧美性| 少妇xx精品| 一区在线观看中文字幕| 97se亚洲综合自| 久热久| 亚洲青青青视频在线| 操逼视频免费日韩无码| 久久午夜鲁丝片| 人人澡人人干| 啊啊啊啊,啊啊好多水| 老熟妇综合| 午夜精品一区二区三区三上悠亚| 亚洲最大的综合性av| a片在线播放| 天天干嫩逼网| 久久精品女同亚洲女同13| www.高清无码诱惑一区.com | 91少妇香蕉久久精品| 97午夜剧场日韩| 超碰在线人妻| 欧美成人一级免费电影| 国产三级日产三级韩国三级| 久操免费视频| 99热日| 欧美韩国你懂得在线| 婷婷丁香五月激情啪啪| 精品视频在线观看精品| 97超碰精品图片| 97爱啪| 日本九九久久99| 欧美日韩国产电影| 欧美精品丝袜久久久中文字幕| 久久成年片色大黄全免费网站| 日韩无码成人电影| 视频不卡中文字幕| 丁香五月社区| 亚洲精品影视老司机| 东京热一区二区三区四区五区六区| 精品人妻一区二区三区四区不卡在| 国产视频第二页| 女人18精品一区二区三区| 久九色| 黄色小说亚洲| 九九九九热| 校园春色美腿丝袜| 香蕉精品二区二区| 欧美精品黑人猛交高潮| 久久春色| 亚洲无码偷拍| 美女视频尤物网在线看| 岛国激情视频在线观看| 日韩精品在线观看观看| 国产精品欧美日韩久久| 强奸乱伦αv片| 怡红院一区二区熟女人妻| 最近的最新的中文字幕视频| 成人丁香五月| 欧美色偷拍 | 96精品久久久| 伊人五月天| 色屁屁影院www国产| 18+91网站| 日本蜜桃| 97爱免费插| 怡红院一区二区熟女人妻| 欧美成人免费在线观看| 99久久免费看精品国产一区| 日本不卡二三区| 人妻少妇久久久| 激情综合网五月婷婷五月天| 一级性爱视频免费观看 | 熟女熟妇一区二区三四区| 啊操爽品善一区二区三区| 综合五月天| 大伊香蕉在线视频免费| 成人免费看吃奶视频网站| 日韩欧美传媒一区国产| 精品综合久久久久久97| 国产精品欧美激在线| 97在线视频免费看| 婷婷久草| 一区二区视频你懂的| 亚洲精品丝袜| 精品一区二区三区蜜桃臀赵总 | 天天做日日爱夜夜爽| 人人弄人人摸| 国产精品操| 日韩无码第3页| 96久久久精品| 免费观看欧美日韩操逼视频| 偷窥自拍亚洲色图| 高潮精品| 999精品久久久久久久| 欧美色图片色哟哟| 亚洲 无码 有码 中文字幕| 国产乱码精品久久久久久| 亚洲国产精品久久久久婷婷青年| 久久久97| 成片免费播放| 亚洲欧美成人在线| 亚洲色欲天天人妻无码系列专区| 精品久久久久久中文| 天天操天天射天天日| 青青青国产手线观看视频2| 淫荡网址| 97在线观看| 精品78| 亚洲色交| 亚洲另类天堂| 久久久97| 少妇蹲下买菜露大唇0| 天干天干天干天天做| 亚洲av国产av综合av卡| 欧美国产日韩清纯唯美| 射丝袜大香蕉| 国产兽交视频在线播放| 久久久无码国精品无码三区三区| 久久久免费懂色| 看日韩黄片| 婷婷五月丁香五月| 青青草国产一区二区三区| 久久性生大片免费观看性| 五月天色图| 大香蕉在线SuP| 性性久久| 91新在线欧美| 天天草AV| 综合色区偷拍| 日韩操啪| 日本免费专区| 激情综合五月丁香| 日韩情色视频| 天天综合网入口~91| 综合性视频99| 97干97色| 少妇xx精品| 亚洲色综合| 国产乱婷婷精品二区三区| 加勒比日本在线| 日本免费二区三区| 亚洲成人激情小说视频| 国产自产自拍| 婷婷综合| www.高清无码诱惑一区.com| 极品少妇久久久久| 欧美成年人性爱视频免费观看| 奇米狠999| 无码免费一区二区三区啪啪| 亚州色图欧美| 不卡视频一区蜜桃视频| 欧美探花网| 免费一级视频特黄色大片| 秋霞一级视频在线观看免费| 久久综合女优| 亚洲色图欧美色图日韩色图| 色偷综合| 国模精品一区二区三区苹果色戒| av天堂加勒比| 高清无码网址| 在线a亚洲视频播放在线| 亚洲欧美中日韩| 91丨九色丨国产丨人妻在线 | 伊人 俄罗斯 a v| 秋霞成人一级在线观看| 加勒比五月天| 天天操熟妇| 南澳成人一级片在线播放| 日本一区视频在线观看| 久久久无码国精品无码三区三区| 色娱乐色呦呦夜夜夜夜av| 超碰97网站| 精品久久人妻成人网| 精品网站99999| 97av在线观看| 99啪啪视频| 东方亚洲在线操逼天堂| 亚洲精品一区二区精华| 婷婷五月天激情四射| 日本免费一区二区不卡| 欧美性爱免费短视频| 中文字幕视频一区视频二区| 久夜视频| 久操大香蕉| 久草成人影片| 中文字幕日韩人妻视频一区二区三区| 女人天堂AV五区在线| 中文字幕青青草| 色欲日韩欧美在线一区| 9精品久久| 91av一区二区在线观看| 麻豆久久久久久久久丝袜| 亚洲在线91| 色欧美天天| 国产97亚洲| www.狠狠操| 综合久欧洲| 亚洲综合九九| 成人97人人超碰人人| 亚洲图片视频小说| 国产成人AV麻豆| 日本岛国黄色网址| 中文字幕日韩精品久久| 中文有码9| 日本大香蕉| 男人的天堂2010| 狠狠色噜噜狠狠狠狠狠色综合久久 | 啊啊嗯嗯好爽| av天天在线观看| 火箭成精品视频884必出精品| 五月激情小说| 91春色| 黄色高清久久无码依人| 国产黄色小视频网站| 亚洲色91C| 99精品久久久久久久婷婷| 欧美在线|亚洲| 极品尤物在线观看| 狠狠躁伊人中文字幕| 欧美视频在线第3页| 91亚州| 精品国产99| 手机在线播放国产福利| 色婷婷一区二区三区久久午夜成人不| 国产三级日产三级韩国三级| 欧美日韩小说| 91老司机在线视频免费观看 | 久久熟女人| 免费成人在线观看91| 1024手机看片欧美日韩| 激情啪啪拍91| 亚洲国产综合图区中文字幕| 一区=区三区视频| 精品中文字幕第一页| 白丝AV网站| 亚洲无码99| 性爱av网站| 偷拍自拍在线视频观看| 99精品欧美一区二区三区桃色| 欧美高清无码免费视频高清版| 久久岛国| 91性网| 日产精品久久久一区二区| 中国熟女91| 制服中出中文人人精品| 无码视频一区二区| 日日夜夜国产综合| 熟女自慰久久久| 国产午夜福利视频在线| 蜜臀精品1区2区| 一牛一区二区三区久久| 国产精品国产拍高清AV| 综合亚洲欧美精品日韩?v| 夜夜做夜夜爽精品视频| 黑丝91视频| 极品白嫩美女白浆成人福利在线看| 嗯嗯啊好爽| 久久原创中文| 欧洲免费一区二| 日韩乱插| 亚洲第一精品在线视频| 啊啊啊啊操死我| 一区二区亚州激情久婷婷欧美| 殴美,日韩国产伦精品| 91成人在线免费视频| 韩国一级做a久久久久| 日韩欧美麻豆 | 狠狠躁日日躁夜夜躁A| 天美av在线观看| 日日碰狠狠添天天爽超| 97精品一区二区视频| 易易A毛视频| 国产精彩女在线观看视频| 嗯啊不要啊啊在线观看视频| 99欧美| 日韩乱插| 欧美色性爱| 国产亚洲精品无码三区| www.91色综合| 天天色播| 国产精品国产精品国产| 91处女在线观看| A级毛片在线看免费| 高清一区AV无码| 日本午夜精品理论片A级APP发布| 超碰久热| 伊人97色天使| 亚洲视频二区| 亚洲无码一区成人免费午夜| 欧洲在线性爱视频| 丰满岳乱妇一区二区三区| 色爱三区| 日韩素人无码一区二区三区三州| 亚洲精品天天影视综合网| 五月综合婷婷久久网站| 91激情| 99久久99久久免费精品蜜臀| 日韩十八禁| 东京热,男人的天堂| 国产深喉| 伊人欧美大香蕉视频| 精品一区二区2| 插B在线观看| 神马久久免费电影观看| 欧美线天码中字| 狠狠97| 水滴偷拍| 日韩有码专区| 久久久久久9| 极品国产内射| 亚洲欧美日韩制服另类| 极品欧美一区二区三区| 豆花视频操逼网址| 久久久久亚洲AV无码专区少妇| 香蕉久久AⅤ...| 91久久精品中文字幕| 看一级特黄a大一片| 九九探花视频在线观看| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 欧美日韩国产在线| 国产亚洲 中文欧美久久| 999国产精品999| 男人的天堂啪啪| 亚洲自拍青操视频| 国产女s强制榨精视频| 天天爽天天操| 不卡六六在线91| 亚洲国产精品9999在线观看| 成人综合色网| 蜜区区视频79 | 国产福利小视频高清在线观看| 青青爽| 亚洲熟女诱惑| 亚洲欧美日韩精品久| 高潮嗯啊性感美女久久久| 亚洲欧美色图片| 蜜臀th| 超碰97资源网亚洲| 3PAV乱伦视频| 日韩A优精品在线观看| 香蕉久久国产AV一区二区| 91久精品| 欧美日韩人妻少妇 一区二区三区| 国产精品一区二区三区在线| 久久性爱视频99| 顶级丝袜熟女一区二区三区 | 人妻少妇精品久久久| 男人天堂导航| 色y情视频免费看| 亚洲国产无码精品首页久久久| 美女啊啊啊啊pc| 亚洲系列欧美| 一级毛片电影免费看| 婷婷五月天激情网| 欧洲射精91| 天天日天天干天天摸天天操| 国产9 9在线 | 亚洲| 色综合久| 天天日美女的B| 农村女一级毛卡片| 性爱精品一区| 啊啊啊啊在线观看网址| 综合亚洲欧美| 国产精品无码在线| 97操97色| 青青草公开在线免费不卡视频| 91精品久久久久五月天精品| 草草影院在线视频| 夫妻AV网站| 国产精品露脸在线观看| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 国产日韩欧美亚洲精品95 | 欧美爱国产综合、| 日本123区操B视频| 精品久久97| 美女尤物福利视频| 中英熟女操女| 性生活无遮挡纯毛片在线看| 91美女看B| 国产一级操B视频| 97少妇人妻中文字幕久久| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 翔田千里无码中出中文字幕| 亚洲色图大香| 日本一线产区和二线产区伦理片| 日韩卡一卡二卡三在线| av操操不卡| 精品久久久久久中文字幕视频免费| 97色婷| 欧美色交| 日本福利二区视频| 97网址97| 日韩色欲久久一二三四区| 91美女在线视频| 人人干黄色| 中文字幕视频2区| 精品免费视频国产一区| 久热色情精品| 中文字幕欧美丝袜07资源| 欧美拳交在线播放| 国产精品一区二区密臀| 99操| 色噜噜国产精品视频一区二区| 超碰免费人人| 日韩综合97p| 99色| 精品78| 久久9亚洲| 亚洲āv网址在线观看| 高清不卡国产| 久久午夜鲁丝片| 亚洲制服aⅴ中文字幕| 超碰99在线| 91性高| 精品一区二区三区蜜桃臀赵总 | 熟妇人妻一区二区三区| 91成人久久| 一级性爱网| 激情内射| 亚洲综合影片| 色色色综合网| 色官网色综合| 偷拍精品一区二区三区| 亚洲男人天堂视频| 欧美熟妇乱码在线一区| 亚洲丝袜诱惑| 丁香六月激情| 午夜国产成人精品视频| 歐美性天天| 9999免费精彩视频| 欧美色涩| 超碰在线97国产| 国产欧美日韩在线不卡第一页| 国产精品不卡少妇白| 伊人97色天使| 免费一级特黄特色大片在线观看看| 日本精品一区二区三| 日本免费中文一区二区三区四区| 亚洲一区日韩精品中文字幕| 欧美91精彩| 日韩av乱伦| 麻豆国产97在线| 日韩人妻精品| 日韩av女优在线免费一区| 国产中文字幕在线点播| 少妇高潮喷水无套久久久久久| 久久精品小视频| jk白丝没脱就开始啪啪| 91精品国产91熟女| 啊啊啊啊操死我了| 亚洲精品视频在线| 亚洲日韩精品久久久久一区壹牛| 碰人碰碰人人开房人肉| 美女人妻色网站| 成人福利视频网| 操国产逼| 91精品在线播放| 精品国产72| 五月天激情小说| 激情网色| 欧美v日韩v亚洲v最新在线| 欧美91丝袜| 91狠狠综合久久久久久| 91丨熟女丨丰满熟女| 超碰97人妻免费在线| 欧美九九九| 国产一区二区久久| 中文字幕国产精品1区| 国产激情在线| 亚洲激情综合另类男同| 欧美日韩传媒| 97天天在线| 欧洲亚洲天堂精品| 亚洲天堂在线怕怕视频| 欧美天天影院| 农村妇女一级二级三级视频| 美女诱惑久久| 嗯嗯啊啊的视频| 曰本精品久久久| 黑丝少妇在线观看| 国产麻豆一级精品视频| gogogo免费高清看中国国语| 精品九九国产无码| 韩国免费播放一级毛片| 国产无码精品成人| 天天视频网站黄| 99人妻碰碰碰久久久久禁片| 亚洲中文字幕在线视频一区二区| 久久精品熟女亚洲AV麻豆软件| 激情综合网激情综合| 人妻少妇久久中文字幕一区二区 麻豆 | 欧美日韩国产三级黄色| 日韩国产欧美伦理在线| 欧美天天干| h无码动漫在线观看| 97超碰免费人人性爱| 高潮内射在线| 欧美久久九九| 2020视频1区2区3区| 国产自制av蜜乳| 国产精品久久久久久高清无码免费看| 国产无码高清操逼视频| 久久久久久久久成人av解说| 免费看一级a性色生活片久久无| 色综合久| 日本九九久久99播| 91欧美性| AV色女综合| 免费观看成人www精品视频| 性影在线视频| 99操视频| 激情露脸爱| 亚洲欧美日韩中文久久自慰| 麻豆天天躁天天揉揉AV| 国产成人久久精品蜜臀| 亚欧性爱无码| 五月丁香色色网| 欧美78p| 大香蕉色欲AV| 91 丝袜在线播放| 五月天久久综合网| 国产福利精品最新在线 | 国产精品久久久三级无码| 欧美亚洲日韩人妻在线观看| 97色97好| 国产区在线| 国产人妖的免费的视频| 啪啪91|