精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Hudi Java Client總結之讀取Hive寫Hudi代碼

開發 前端
initTable主要是根據一些配置信息,生成.hoodie元數據路徑,并生成hoodie.properties元數據文件,該文件里持久化保存了Hudi的一些配置信息。

前言

Hudi除了支持Spark、Fink寫Hudi外,還支持Java客戶端。本文總結Hudi Java Client如何使用,主要為代碼示例,可以實現讀取Hive表寫Hudi表。當然也支持讀取其他數據源,比如mysql,實現讀取mysql的歷史數據和增量數據寫Hudi。

版本

Hudi 0.12.0

功能支持

支持insert/upsert/delete,暫不支持bulkInsert目前僅支持COW表支持完整的寫Hudi操作,包括rollback、clean、archive等。

代碼

完整代碼已上傳GitHub:https://github.com/dongkelun/hudi-demo/tree/master/java-client。

其中HoodieJavaWriteClientExample是從Hudi源碼里拷貝的,包含了insert/upsert/delte/的代碼示例,JavaClientHive2Hudi是我自己的寫的代碼示例總結,實現了kerberos認證、讀取Hive表Schema作為寫hudi的Schema、讀取Hive表數據寫hudi表,并同步hudi元數據至hive元數據,實現自動創建Hive元數據,當然也支持讀取其他數據源,比如mysql,實現歷史和增量寫。

相比于HoodieJavaWriteClientExample,JavaClientHive2Hudi加了很多配置參數,更貼近實際使用,比如HoodieJavaWriteClientExample的payload為HoodieAvroPayload這只能作為示例使用,JavaClientHive2Hudi使用的為DefaultHoodieRecordPayload它支持預合并和歷史值比較,關于這一點可以參考我之前寫的文章:Hudi preCombinedField 總結(二)-源碼分析,如果只需要預合并功能,可以使用OverwriteWithLatestAvroPayload,這倆分別是Spark SQL 和 Spark DF的默認值,當然都不需要的話,也支持HoodieAvroPayload,代碼里是根據條件判斷需要用哪個payloadClassName。

String payloadClassName = shouldOrdering ? DefaultHoodieRecordPayload.class.getName() :
shouldCombine ? OverwriteWithLatestAvroPayload.class.getName() : HoodieAvroPayload.class.getName();

然后利用反射構造payload,其實這里反射的邏輯就是Hudi Spark源碼里的邏輯。

另一個它更貼近實際使用的原因就是我們項目上就是將Hudi Java Client封裝成了一個NIFI processor,然后用NIFI調度,其性能和穩定性都能夠滿足項目需求,這里的核心邏輯和實際項目中的邏輯是差不多的。關于我們使用Java客戶端的原因是由于歷史原因造成的,因為我們之前還沒有調度Spark、Flink的開發工具(之前用的NIFI),而開發一個新的開發工具的話是需要時間成本的,所以選擇了Java客戶端,我們現在已經將Apache DolphinScheduler作為自己的開發調度工具了,后面會主要使用Spark/Flink,所以現在總結一下Hudi Java Client的使用以及源碼,避免遺忘,也希望對大家有所幫助。

初始化Hudi表

Java Client的代碼更貼近源碼。

initTable主要是根據一些配置信息,生成.hoodie元數據路徑,并生成hoodie.properties元數據文件,該文件里持久化保存了Hudi的一些配置信息。

if (!(fs.exists(path) && fs.exists(hoodiePath))) { //根據Hudi路徑存不存在,判斷Hudi表需不需要初始化
if (Arrays.asList(INSERT_OPERATION, UPSERT_OPERATION).contains(writeOperationType)) {
HoodieTableMetaClient.withPropertyBuilder()
.setTableType(TABLE_TYPE)
.setTableName(targetTable)
.setPayloadClassName(payloadClassName)
.setRecordKeyFields(recordKeyFields)
.setPreCombineField(preCombineField)
.setPartitionFields(partitionFields)
.setBootstrapIndexClass(NoOpBootstrapIndex.class.getName())
.initTable(hadoopConf, tablePath);
} else if (writeOperationType.equals(DELETE_OPERATION)) { //Delete操作,Hudi表必須已經存在
throw new TableNotFoundException(tablePath);
}
}

hoodie.properties

#Properties saved on 2022-10-24T07:40:36.530Z
#Mon Oct 24 15:40:36 CST 2022
hoodie.table.name=test_hudi_target
hoodie.archivelog.folder=archived
hoodie.table.type=COPY_ON_WRITE
hoodie.table.version=5
hoodie.timeline.layout.version=1
hoodie.datasource.write.drop.partition.columns=false
hoodie.table.checksum=1749434190

創建HoodieJavaWriteClient

首先要創建HoodieWriteConfig,主要是hudi的一些配置,比如Schema、表名、payload、索引、clean等一些參數,具體可以自己去了解。

HoodieWriteConfig cfg = HoodieWriteConfig.newBuilder().withPath(tablePath)
.withSchema(writeSchema.toString())
.withParallelism(2, 2).withDeleteParallelism(2)
.forTable(targetTable)
.withWritePayLoad(payloadClassName)
.withPayloadConfig(HoodiePayloadConfig.newBuilder().withPayloadOrderingField(orderingField).build())
.withIndexConfig(HoodieIndexConfig.newBuilder()
.withIndexType(HoodieIndex.IndexType.BLOOM)
// .bloomIndexPruneByRanges(false) // 1000萬總體時間提升1分鐘
.bloomFilterFPP(0.000001) // 1000萬總體時間提升3分鐘
.fromProperties(indexProperties)
.build())
.withCompactionConfig(HoodieCompactionConfig.newBuilder()
.compactionSmallFileSize(smallFileLimit)
.approxRecordSize(recordSizeEstimate).build())
.withArchivalConfig(HoodieArchivalConfig.newBuilder().archiveCommitsWith(150, 200).build())
.withCleanConfig(HoodieCleanConfig.newBuilder().retainCommits(100).build())
.withStorageConfig(HoodieStorageConfig.newBuilder()
.parquetMaxFileSize(maxFileSize).build())
.build();

writeClient = new HoodieJavaWriteClient<>(new HoodieJavaEngineContext(hadoopConf), cfg)

startCommit

返回commitTime,首先會執行rollback,然后創建一個.commit.request,再將commitTime返回。

String newCommitTime = writeClient.startCommit();

generateRecord

這里主要是構造寫hudi需要的數據結構,包含HoodieKey和payLoad,其中delete操作只需要HoodieKey。

public static List<HoodieRecord<HoodieRecordPayload>> generateRecord(ResultSet rs,
Schema writeSchema,
String payloadClassName,
boolean shouldCombine) throws IOException, SQLException {
List<HoodieRecord<HoodieRecordPayload>> list = new ArrayList<>();

while (rs.next()) {
GenericRecord rec = new GenericData.Record(writeSchema);

writeSchema.getFields().forEach(field -> {
try {
rec.put(field.name(), convertValueType(rs, field.name(), field.schema().getType()));
} catch (SQLException e) {
throw new RuntimeException(e);
}
});

String partitionPath = partitionFields == null ? "" : getRecordPartitionPath(rs, writeSchema);
System.out.println(partitionPath);
String rowKey = recordKeyFields == null && writeOperationType.equals(INSERT_OPERATION) ? UUID.randomUUID().toString() : getRecordKey(rs, writeSchema);
HoodieKey key = new HoodieKey(rowKey, partitionPath);
if (shouldCombine) {
Object orderingVal = HoodieAvroUtils.getNestedFieldVal(rec, preCombineField, false, false);
list.add(new HoodieAvroRecord<>(key, createPayload(payloadClassName, rec, (Comparable) orderingVal)));
} else {
list.add(new HoodieAvroRecord<>(key, createPayload(payloadClassName, rec)));
}

}
return list;
}

寫Hudi

最后執行寫Hudi的操作,常用upsert/insert/delete,Java Client也是默認開啟clean等操作的,具體的實現是在HoodieJavaCopyOnWriteTable中。目前還不支持bulkInsert等操作,后面如果我有能力的話,會嘗試提交PR支持。

writeClient.upsert(records, newCommitTime);
writeClient.insert(records, newCommitTime);
writeClient.delete(records, newCommitTime);

同步Hive

最后是同步元數據至Hive,實現在hive中建表,這一步是可選的。這樣可以利用Hive SQL和Spark SQL查詢Hudi表。

/**
* 利用HiveSyncTool同步Hive元數據
* Spark寫Hudi同步hive元數據的源碼就是這樣同步的
*
* @param properties
* @param hiveConf
*/
public static void syncHive(TypedProperties properties, HiveConf hiveConf) {
HiveSyncTool hiveSyncTool = new HiveSyncTool(properties, hiveConf);
hiveSyncTool.syncHoodieTable();
}

public static HiveConf getHiveConf(String hiveSitePath, String coreSitePath, String hdfsSitePath) {
HiveConf configuration = new HiveConf();
configuration.addResource(new Path(hiveSitePath));
configuration.addResource(new Path(coreSitePath));
configuration.addResource(new Path(hdfsSitePath));

return configuration;
}

/**
* 同步Hive元數據的一些屬性配置
* @param basePath
* @return
*/
public static TypedProperties getHiveSyncProperties(String basePath) {
TypedProperties properties = new TypedProperties();
properties.put(HiveSyncConfigHolder.HIVE_SYNC_MODE.key(), HiveSyncMode.HMS.name());
properties.put(HiveSyncConfigHolder.HIVE_CREATE_MANAGED_TABLE.key(), true);
properties.put(HoodieSyncConfig.META_SYNC_DATABASE_NAME.key(), dbName);
properties.put(HoodieSyncConfig.META_SYNC_TABLE_NAME.key(), targetTable);
properties.put(HoodieSyncConfig.META_SYNC_BASE_PATH.key(), basePath);
properties.put(HoodieSyncConfig.META_SYNC_PARTITION_EXTRACTOR_CLASS.key(), MultiPartKeysValueExtractor.class.getName());
properties.put(HoodieSyncConfig.META_SYNC_PARTITION_FIELDS.key(), partitionFields);
if (partitionFields != null && !partitionFields.isEmpty()) {
properties.put(HoodieSyncConfig.META_SYNC_PARTITION_FIELDS.key(), partitionFields);
}

return properties;
}

與0.9.0版本差異

之前是基于0.9.0版本開發的,本文代碼示例基于0.12.0,核心代碼是一樣的,差異的地方有兩處。

1、0.9.0 clean、archive的參數都是在withCompactionConfig中,現在單獨拎出來2、0.9.0 HiveSyncTool的參數為HiveSyncConfig,現在為TypedProperties。

總結

Hudi Java Client和Spark、Flink一樣都可以實現完整的寫Hudi的邏輯,但是目前功能支持還不完善,比如不支持MOR表,而且性能上也不如Spark、Flink,畢竟Spark、FLink都是集群,但是Hudi Java Client可以集成到其他框架中,比如NIFI,集成起來比較方便,集成到NIFI的好處是,可以通過拖來拽配置參數的形式完成歷史數據和增量數據寫入Hudi。也可以自己實現多線程,提升性能,我們目前測試的性能是Insert可以達到10000條/s,而upsert因為需要讀取索引,還有歷史數據的更新,可能需要重寫整個表,所以當歷史數據比較大且更新占比比較高時,單線程的性能會非常差,但是我們基于源碼改造,將布隆索引和寫數據的部分改為多線程后,性能就會提升很多,當然這也取決于機器的性能,和CPU、內存有關。對于數據量不是很大的ZF數據,一般大表幾十億,性能還是可以滿足要求的。

責任編輯:武曉燕 來源: 倫少的博客
相關推薦

2022-11-01 07:43:30

2022-11-03 07:22:42

2023-02-26 00:12:10

Hadoop數據湖存儲

2022-10-17 07:51:31

Hudi異常HDFS

2024-04-26 07:36:42

Hudi 1.0數據湖倉數據查詢

2022-10-24 00:26:51

大數據Hadoop存儲層

2021-08-31 10:07:16

Flink Hud數據湖阿里云

2022-12-08 07:17:49

2022-07-20 11:47:18

數據

2022-12-23 16:52:22

Lakehouse數據湖

2022-10-17 10:48:50

Hudi大數據Hadoop

2023-07-19 16:22:00

Hudi機器學習

2020-03-26 10:05:18

大數據IT互聯網

2021-09-13 14:19:03

HudiLakehouse阿里云

2023-12-14 13:01:00

Hudivivo

2025-06-09 09:57:16

2023-09-05 07:22:17

Hudi數據存儲

2021-09-13 13:46:29

Apache HudiB 站數據湖

2022-06-09 14:19:46

順豐數據集成Flink

2022-06-08 13:25:51

數據
點贊
收藏

51CTO技術棧公眾號

这里只有精品6| 欧美性猛交xx| 98在线视频| 国产剧情av麻豆香蕉精品| 国语对白做受69| 极品人妻videosss人妻| av日韩一区| 欧美视频在线视频| 无遮挡亚洲一区| 狠狠人妻久久久久久综合麻豆| 久久精品五月| 久久91精品国产| 亚洲欧美va天堂人熟伦 | 午夜精品毛片| 亚洲国产精品va在线| 亚洲成人福利在线| 在线手机中文字幕| 一区二区三区毛片| 日韩一本精品| 天堂在线中文网| 国产精品一区二区久久不卡| 国产精品h片在线播放| 特级片在线观看| 成人看的羞羞网站| 精品亚洲国产成av人片传媒| 伦伦影院午夜理论片| 国产成人精品一区二区三区免费| 午夜精品在线看| 亚洲自拍偷拍一区二区三区| 国产中文在线观看| eeuss鲁片一区二区三区在线观看| 成人网欧美在线视频| 黄色片视频免费| 亚洲深夜福利| 久久久久久久久久久久久久久久久久av| jizzjizzjizz国产| 精品免费在线| 亚洲人在线观看| 中文字幕 亚洲一区| av毛片精品| 制服视频三区第一页精品| 国产免费999| 91精品影视| 在线欧美小视频| 国产在线青青草| segui88久久综合9999| 一区二区三区精品在线观看| 秋霞在线一区二区| 97超碰资源站在线观看| 亚洲男人的天堂网| 手机福利在线视频| 成人在线免费看黄| 亚洲三级久久久| 免费观看国产视频在线| 久操视频在线免费播放| 国产精品传媒视频| 日韩最新中文字幕| 91高清在线观看视频| ...中文天堂在线一区| 成年人免费观看的视频| 国产在线激情视频| 亚洲免费观看视频| 国产一级不卡视频| 高清电影在线免费观看| 五月婷婷欧美视频| 国产精品少妇在线视频| 日韩中文视频| 91精品国产综合久久香蕉麻豆| 亚洲一区二区三区观看| 日韩一区二区三区在线看| 337p日本欧洲亚洲大胆精品| 国产麻豆天美果冻无码视频| 国内成人自拍| 日韩综合中文字幕| 青春草免费视频| 国产情侣一区| 国产成人精品久久| 国产精品国产av| 国产成人午夜99999| 国产一级特黄a大片99| 毛片在线免费| 亚洲欧美电影一区二区| 欧美三级在线观看视频| 外国电影一区二区| 日韩一级片在线观看| 中文成人无字幕乱码精品区| 精品国产91久久久久久浪潮蜜月| 久久中文精品视频| 圆产精品久久久久久久久久久| 久久一二三四| 亚洲综合视频1区| 手机福利在线| 亚洲视频免费观看| 水蜜桃色314在线观看| 中韩乱幕日产无线码一区| 欧美α欧美αv大片| 极品人妻一区二区三区| 欧美成人亚洲| 国产成人精品日本亚洲专区61| 国产精品人人爽| 久久综合色天天久久综合图片| 中文字幕在线中文字幕日亚韩一区| 男人天堂亚洲天堂| 欧美日韩一级二级| 久久人人妻人人人人妻性色av| 天天色天天射综合网| 性欧美暴力猛交69hd| 91麻豆国产在线| 26uuu精品一区二区三区四区在线| 在线播放 亚洲| av资源亚洲| 精品久久久久香蕉网| 成年人视频软件| 久久福利精品| 国产精品综合久久久久久| 黄色在线视频网站| 91极品美女在线| 日本黄色免费观看| 欧美在线视屏| 91精品国产自产在线| 日本视频在线观看一区二区三区| 亚洲精品国产高清久久伦理二区| 人妻丰满熟妇av无码区app| 国产精品qvod| 久久91精品国产91久久久| 一级黄色a毛片| 国产亚洲精品免费| 欧美黄网站在线观看| 中文在线综合| 欧美日韩成人在线观看| 一级特黄aaa大片| 欧美国产精品一区| 欧美 日韩精品| 日本成人7777| 韩剧1988免费观看全集| 黑人操亚洲女人| 一区二区三区免费观看| 人妻巨大乳一二三区| 亚洲精品一区二区在线看| 国产精品亚洲精品| 在线观看a视频| 欧美亚洲一区二区在线| 国产又粗又猛又爽又黄av| 久久国产一二区| 日本午夜精品一区二区三区| 最近在线中文字幕| 亚洲欧美激情视频| 精品国产乱子伦| 国产精品午夜免费| 中文字幕亚洲欧洲| 天堂网在线观看国产精品| 成人网中文字幕| 91三级在线| 亚洲电影免费观看高清| 国产成人在线免费观看视频| 91丨porny丨首页| 欧美黄网站在线观看| 欧美肉体xxxx裸体137大胆| 国产精品久久久久久久久久| 91欧美在线视频| 7777精品伊人久久久大香线蕉超级流畅| 一区二区三区在线播放视频| 国产美女一区二区三区| 国产视频在线观看网站| 欧美成人午夜77777| 国产999精品久久久| 成人精品一区二区| 欧美一区二区三区日韩视频| 久久精品视频9| 久久免费国产精品| 色综合天天色综合| 欧美日韩国内| 久久精品人成| 青青在线精品| 欧美黑人一区二区三区| 日韩有码电影| 欧美另类一区二区三区| 国产一卡二卡在线播放| 久久无码av三级| 在线观看免费不卡av| 尤物网精品视频| 日韩福利在线| 中文字幕区一区二区三| 国产精品久久久久久av下载红粉| 国内精品不卡| 亚洲精品日韩丝袜精品| 国产精品国产三级国产普通话对白 | 日本不卡视频在线| 中文字幕色呦呦| 精品一区欧美| 99精品国产高清一区二区| 综合日韩av| 欧美精品做受xxx性少妇| 青春草在线观看| 欧美一卡2卡三卡4卡5免费| 五月天婷婷导航| 亚洲精品自拍动漫在线| 国产激情在线免费观看| 国产成人在线色| 日本激情综合网| 国产精品毛片在线| 日韩国产小视频| 99视频精品全国免费| 中文字幕一区二区av| 日韩美女视频在线观看| 动漫一区在线| 永久免费精品影视网站| 日本精品一二区| 日韩亚洲国产中文字幕欧美| 69视频免费看| 欧美日韩国产色视频| 精国产品一区二区三区a片| 中文字幕欧美激情| 亚洲国产无码精品| 波多野结衣精品在线| 天天操夜夜操很很操| 日韩成人av影视| 欧美视频第一区| 亚洲精品韩国| 99亚洲国产精品| 999久久久精品国产| 欧美午夜欧美| 日韩三区视频| 好看的日韩精品| 亚洲超碰在线观看| 亚洲一区二区三区777| h1515四虎成人| 国产精品久久久久久久久免费看| 激情aⅴ欧美一区二区欲海潮| 欧美精品做受xxx性少妇| 成人黄色在线电影| 日韩视频在线观看免费| 日本www在线| 在线免费看av不卡| 成人不用播放器| 亚洲午夜未满十八勿入免费观看全集| 姝姝窝人体www聚色窝| 亚洲国产精久久久久久久| 亚洲免费一级片| 日韩精品中午字幕| 丰满人妻妇伦又伦精品国产| 日韩欧美色综合网站| а√天堂资源在线| 日韩欧美精品在线| 亚洲成人黄色片| 亚洲国模精品一区| 亚洲人成色777777老人头| 精品网站999www| 国产中文字幕在线视频| 在线精品高清中文字幕| 黄色网址视频在线观看| 久久av中文字幕| 四季久久免费一区二区三区四区| 久久99热精品这里久久精品| 女子免费在线观看视频www| 国内精品国产三级国产在线专| 精精国产xxx在线视频app| 97成人精品视频在线观看| 成人爱爱网址| 国产精品美女免费| 激情不卡一区二区三区视频在线| 亚洲综合在线中文字幕| 红杏视频成人| 农村寡妇一区二区三区| 成人中文视频| 免费成人进口网站| 黑人一区二区三区四区五区| 欧美老熟妇喷水| 麻豆高清免费国产一区| 亚洲熟妇一区二区| 91小视频免费看| 亚洲一二三四五六区| 亚洲欧美一区二区久久 | 亚洲电影一级黄| 在线精品免费视| 欧美日韩国产高清一区二区三区| 国产99视频在线| 国产丝袜精品第一页| 欧美成人精品一区二区男人看| 欧美高清一级大片| 自拍偷自拍亚洲精品被多人伦好爽| 国产精品在线看| 激情亚洲另类图片区小说区| 丝袜美腿玉足3d专区一区| 午夜国产精品视频| 国产日产欧美视频| 国产一区不卡视频| 右手影院亚洲欧美| 亚洲欧美日韩国产另类专区| 日韩精品手机在线| 91麻豆精品国产| 欧洲免费在线视频| 欧美成年人网站| 欧洲成人一区| 精品国产一区二区三区免费 | 韩国日本在线视频| 国产乱一区二区| 一区二区黄色片| 亚洲午夜免费视频| 亚洲综合五月天婷婷丁香| 精品久久久久久久久久久久久久久 | 超碰成人在线免费| 中文字幕成人一区| 久久三级福利| 亚洲香蕉中文网| 亚洲私人影院在线观看| 精品久久久久久久久久久久久久久久久久| 欧美一区二区三区小说| 国产免费av高清在线| 国内成人精品视频| 日本伊人久久| 一区二区视频在线播放| 久久一日本道色综合久久| 国产一卡二卡三卡四卡| 亚洲精品亚洲人成人网| 中文字幕a级片| 亚洲视频免费一区| 欧产日产国产精品视频 | 亚洲国产精品久久久久久6q| 日韩在线视频一区| 欧美xnxx| 欧美一级日本a级v片| av成人毛片| 中文字幕一区二区人妻电影丶| 一区二区三区四区视频精品免费 | 欧美成人精品一区二区男人小说| 国产91aaa| 香蕉视频在线播放| 亚洲国产精品激情在线观看| 伊人在线视频观看| 欧美视频在线观看一区| 黄色在线视频观看网站| 91国内精品久久| 国产区精品视频在线观看豆花| 热久久最新网址| 国产成人啪免费观看软件| 永久看片925tv| 欧美一区二区三区免费视频| 麻豆网在线观看| 亚洲free嫩bbb| 亚洲免费二区| jjzzjjzz欧美69巨大| 亚洲夂夂婷婷色拍ww47| 人妻无码一区二区三区久久99| 高清欧美性猛交xxxx黑人猛交| 97色成人综合网站| 免费拍拍拍网站| 91在线免费视频观看| www欧美在线| 亚洲性无码av在线| 欧美成人三级| 中文字幕一区二区三区四区五区人 | 欧美日韩夜夜| 日本精品一区二区三区四区| 久久久五月婷婷| 在线观看日韩一区二区| 日韩专区在线播放| 日本一区二区三区播放| 亚洲理论电影在线观看| hitomi一区二区三区精品| 国产寡妇亲子伦一区二区三区四区| 国产一区二区三区在线免费观看 | 99三级在线| av成人毛片| 九一在线免费观看| 欧美一级精品在线| 欧美一级鲁丝片| 视频在线观看成人| 国产麻豆精品久久一二三| 不卡的免费av| 亚洲性视频网站| va天堂va亚洲va影视| 黄色一级视频在线播放| 国产午夜精品福利| 国产乱码久久久久| 69久久夜色精品国产7777| 精品国产a一区二区三区v免费| 99精品999| 精品国产1区2区| 最近高清中文在线字幕在线观看| 99在线视频播放| 久久久久久网| 激情五月婷婷在线| 亚洲色无码播放| 日韩免费精品| 日av中文字幕| 一级女性全黄久久生活片免费| 日韩精品福利| 亚洲精品免费av| 天使萌一区二区三区免费观看| 黄色一级片中国| 在线成人中文字幕| 激情小说亚洲图片| 日韩av片专区| 日韩欧美在线播放| 免费在线中文字幕| 中国成人亚色综合网站| 91麻豆视频网站| 性一交一乱一精一晶| 国产区亚洲区欧美区|