Hive에서 Flink Sql을 생산할 때 발생하는 구덩이 및 최적화 (지속적인 업데이트 ...)

1 、 HiveSource-xxxx.xxxx의 병렬 처리 (200)가 최대 병렬 처리 (128)보다 높습니다. 병렬 처리를 낮추거나 최대 병렬 처리를 늘리십시오.

(1) 오류보고

하이브에 연결하고 테이블을 확인하기 위해 sql-cli에서보고 한 오류입니다.

[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.runtime.JobException: Vertex Source: HiveSource-xxxx.xxxx's parallelism (200) is higher than the max parallelism (128). Please lower the parallelism or increase the max parallelism.

(2) 해상도

flink 패키지 아래의 / conf 패키지에있는 sql-client-defaults.yaml 파일의 max-parallelism을 300으로 변경하면됩니다.

execution:
  max-parallelism: 300 

2. flink sql이 하이브 테이블을 읽을 때 적용되도록 table.exec.hive.fallback-mapred-reader : true를 수동으로 구성하는 것이 좋습니다.

(1) 오류보고

sql-cli를 사용하든 sql을 코드에 넣든 관계없이 다음 sql을 실행하면 다음과 같은 결과가 발생하며 모든 오류는 원인 : java.lang.IllegalArgumentException으로보고됩니다.

그리고 Spark Sql을 사용하여 다음 Sql을 실행하는 것은 정상입니다.

(1)First:
SELECT vid From table_A WHERE datekey = '20210112' AND event = 'XXX' AND vid = 'aaaaaa';   (**OK**)
SELECT vid From table_A WHERE datekey = '20210112' AND vid = 'aaaaaa';                     (**Error**)

(2)Second:
SELECT vid From table_B WHERE datekey = '20210112' AND event = 'YYY' AND vid = 'bbbbbb';   (**OK**)
SELECT vid From table_B WHERE datekey = '20210112' AND vid = 'bbbbbb';                     (**Error**)

원래 오류 :

[ERROR] Could not execute SQL statement. Reason:
java.lang.RuntimeException: SplitFetcher thread 22 received unexpected exception while polling the records


java.lang.RuntimeException: One or more fetchers have encountered exception
  at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcherManager.checkErrors(SplitFetcherManager.java:199)
  at org.apache.flink.connector.base.source.reader.SourceReaderBase.getNextFetch(SourceReaderBase.java:154)
  at org.apache.flink.connector.base.source.reader.SourceReaderBase.pollNext(SourceReaderBase.java:116)
  at org.apache.flink.streaming.api.operators.SourceOperator.emitNext(SourceOperator.java:273)
  at org.apache.flink.streaming.runtime.io.StreamTaskSourceInput.emitNext(StreamTaskSourceInput.java:67)
  at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:65)
  at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:395)
  at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:191)
  at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:609)
  at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:573)
  at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:755)
  at org.apache.flink.runtime.taskmanager.Task.run(Task.java:570)
  at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: SplitFetcher thread 22 received unexpected exception while polling the records
  at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:146)
  at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:101)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  ... 1 more
Caused by: java.lang.IllegalArgumentException
  at java.nio.Buffer.position(Buffer.java:244)
  at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:153)
  at java.nio.ByteBuffer.get(ByteBuffer.java:715)
  at org.apache.flink.hive.shaded.parquet.io.api.Binary$ByteBufferBackedBinary.getBytes(Binary.java:422)
  at org.apache.flink.hive.shaded.formats.parquet.vector.reader.BytesColumnReader.readBatchFromDictionaryIds(BytesColumnReader.java:79)
  at org.apache.flink.hive.shaded.formats.parquet.vector.reader.BytesColumnReader.readBatchFromDictionaryIds(BytesColumnReader.java:33)
  at org.apache.flink.hive.shaded.formats.parquet.vector.reader.AbstractColumnReader.readToVector(AbstractColumnReader.java:199)
  at org.apache.flink.hive.shaded.formats.parquet.ParquetVectorizedInputFormat$ParquetReader.nextBatch(ParquetVectorizedInputFormat.java:359)
  at org.apache.flink.hive.shaded.formats.parquet.ParquetVectorizedInputFormat$ParquetReader.readBatch(ParquetVectorizedInputFormat.java:328)
  at org.apache.flink.connector.file.src.impl.FileSourceSplitReader.fetch(FileSourceSplitReader.java:67)
  at org.apache.flink.connector.base.source.reader.fetcher.FetchTask.run(FetchTask.java:56)
  at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:138)
  ... 6 more

(2) 해상도

어제 https://issues.apache.org/jira/browse/FLINK-20951 문제를 제출했습니다. Yunxie는 Rui Li에게 도움을 요청하고 살펴 보도록 요청했습니다. table.exec.hive.fallback-mapred -reader를 구성해야합니다. : 진실.

어제 공식 웹 사이트를 확인한 결과이 구성을 봤는데 공식 문서에는 기본적으로 활성화되어 있다고 나와 있으므로이 구성을 수동으로 구성하는 것이 좋습니다. 공식 웹 사이트의 설명은 Format이 ORC 또는 Parquet 유형이고 복잡한 유형의 하이브가없는 경우이 구성을 시작하는 것이 하이브 테이블의 벡터화 된 읽기를 활성화하는 것입니다.
공식 웹 사이트 링크 : https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/table/connectors/hive/hive_read_write.html#vectorized-optimization-upon-read

a. sql-cli를 사용하여 flink 패키지 아래의 / conf 패키지에있는 sql-client-defaults.yaml 파일에서 구성합니다.

configuration:
  table.exec.hive.fallback-mapred-reader: true

b. 코드에서 flink sql을 제출하는 경우 다음과 같이 구성을 구성합니다.

Configuration configuration = tableEnv.getConfig().getConfiguration();
configuration.setString("table.exec.hive.fallback-mapred-reader", "true");

3. 하이브 테이블에 많은 파티션이있는 경우 flink의 기본 구성은 많은 작업 관리자를 켜는 데 도움이됩니다.

(1) 오류보고

1000 개가 한꺼번에 할당 된 것을 볼 수 있습니다.

영상

(2) 해상도

공식 웹 사이트를 보면 Flink가 파일 수와 각 파일의 블록 수를 기반으로 Hive 리더에 대한 최상의 병렬 처리를 추론하는 것으로 나타 났지만 현재로서는 그다지 좋지 않은 것 같습니다.

이 구성을 끄고 자신의 작업에 따라 구성 할 수 있습니다 (이 매개 변수는 모든 하이브 작업에 영향을 미칩니다. 작업을 시작하기 전에 코드에서 적절한 병렬 처리 설정을 시작하는 것이 좋습니다. 또는 sql-cli가 sql-client-defaults에있을 수 있음) .yaml 구성)

configuration.setString("table.exec.hive.infer-source-parallelism.max", "100");
configuration.setString("table.exec.hive.fallback-mapred-reader", "true");

지속적으로 업데이트…

추천

출처blog.csdn.net/weixin_44500374/article/details/112610629