flinkローカルモードの起動失敗の問題を覚えておいてください

1.現象:xsinkタスクは常に開始されており、正常に開始できる場合もありますが、開始は失敗します。ログに次のエラーが見つかります。
スレッド「main」の例外java.io.IOException:でBLOBサーバーを開くことができません。指定されたポート範囲:0
atorg。apache.flink.runtime.blob.BlobServer。(BlobServer.java:199)
at org.apache.flink.runtime.minicluster.MiniCluster.start(MiniCluster.java:319)
at org.apache .flink.client.program.PerJobMiniClusterFactory .submitJob(PerJobMiniClusterFactory.java:87)
at org.apache.flink.client.deployment.executors.LocalExecutor.execute(LocalExecutor.java:81)
at org.apache.flink.streaming.api .environment.StreamExecutionEnvironment.executeAsync(StreamExecutionEnvironment .java:1812)
at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.execute(StreamExecutionEnvironment.java:1713)
at org.apache.flink.streaming.api.environment.LocalStreamEnvironment.execute(LocalStreamEnvironment.java:74)
at org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.execute(StreamExecutionEnvironment.java:1699)
2。コード調査プロセス:
ログと追跡コードを介して、flinkのローカルモードが開始されると、ServerSocketを初期化する必要があり、ポートがバインドされていることがわかります。また、このポートはデフォルトで0であり、Socketがポート0にバインドすると、システムは構成範囲に従って使用可能なポートを選択します。使用可能なポートを選択するときに使用可能なポートがないことが判明したため、タスクは次のようになります。起動に失敗します。
ここに画像の説明を挿入

3.ポート占有率の調査
サーバーシステムがポート範囲をランダムに選択することを確認します
。cat/ proc / sys / net / ipv4 / ip_local_port_rangeの
ここに画像の説明を挿入
合計は32767です。LISTENで
ポートステータスを表示するコマンド:netstat -tulnp> ./1.txt
次のコマンドを使用します:netstat -anpt> ./ 1.txt、ポートの使用状況を確認し、TIME_WAIT状態を含めて合計32745個のポートがあり、ポートが深刻に不足していることを確認します。関連する計算コードは次のとおりです。

public class FileTest {
    
    

  public static void main(String[] args) throws IOException {
    
    
    File file = new File("C:\\Users\\Desktop\\222.txt");
    FileInputStream stream = new FileInputStream(file);
    BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
    String str = null;
    Set<String> ports = new HashSet<>();
    while ((str = reader.readLine()) != null) {
    
    
      Pattern pattern = Pattern.compile(".*([0-9]+\\.){3}([0-9]+)*:([1-9][0-9]*).*([0-9]+\\.){3}([0-9]+)*:([1-9][0-9]*)?.*");
      Matcher matcher = pattern.matcher(str);
      if (matcher.matches()) {
    
    
        String port = matcher.group(3);
        if (Integer.valueOf(port) >= 32768) {
    
    
          ports.add(port);
        }
        port = matcher.group(6);
        if (port != null) {
    
    
          if (Integer.valueOf(port) >= 32768) {
    
    
            ports.add(port);
          }
        }
      }
    }
    List<String> list = new ArrayList<>();
    list.addAll(ports);
    Collections.sort(list);
    StringBuilder sb = new StringBuilder();
    for (String p : list) {
    
    
      sb.append(p).append(",");
    }
    System.out.println(sb.toString());
    System.out.println("已经使用端口总数:" + ports.size());
  }
}

ここに画像の説明を挿入

4.解決策:
xsinkのポートセグメントを構成することにより、flinkに使用可能なポートセグメントのポートを取得させます。構成スキームは次のとおりです。
ここに画像の説明を挿入

上記の構成を変更することで、タスクを正常に開始できますが、問題もあります。タスクの開始が多すぎてポートが不足していると、スケーラビリティが制限されるため、学習した結果、サーバーを設定できることがわかりました。ポート回復ソリューションを高速化するためのTIME_WAITポート回復時間:
echo "1"> ./tcp_tw_recycle、この構成を追加した後、使用されるポートの数が大幅に減少し、3497をプログラミングし、タスクが正常に開始され、問題が発生することがわかりました。完全に解決されます。

おすすめ

転載: blog.csdn.net/myhappy_huang/article/details/115348793