All Products
Search
Document Center

E-MapReduce:FAQ

Last Updated:Jun 21, 2026

Topik ini menjawab pertanyaan umum tentang penggunaan kluster DataFlow.

Lihat log kluster

Lihat log berdasarkan status JobManager:

  • Jika JobManager kluster Flink telah keluar, Anda dapat menarik log ke mesin lokal untuk dilihat dengan menjalankan perintah yarn logs -applicationId application_xxxx_yy. Anda juga dapat melihat log di browser web melalui tautan log untuk job yang selesai di YARN web UI.

  • Jika JobManager kluster Flink masih berjalan, gunakan salah satu metode berikut:

    • Akses UI web Flink yang sesuai untuk melihat log.

    • Gunakan alat command-line. Jalankan yarn logs -applicationId application_xxxx_yy -am ALL -logFiles jobmanager.log untuk melihat log JobManager, atau jalankan yarn logs -applicationId application_xxxx_yy -containerId container_xxxx_yy_aa_bb -logFiles taskmanager.log untuk melihat log TaskManager.

Selesaikan konflik paket JAR

Masalah ini biasanya menyebabkan error seperti NoSuchFieldError/NoSuchMethodError/ClassNotFoundException di log job. Untuk melakukan troubleshooting dan menyelesaikan masalah ini, ikuti langkah-langkah berikut:

  1. Identifikasi kelas dependensi yang bertentangan. Berdasarkan kelas exception dalam pesan error, temukan paket JAR dependensi yang berisi kelas tersebut. Kemudian, di direktori tempat file pom.xml job Anda berada, jalankan mvn dependency:tree untuk melihat pohon dependensi dan menentukan asalnya.

  2. Kecualikan kelas dependensi yang bertentangan.

    • Jika cakupan (scope) paket JAR salah diatur dalam file pom.xml, ubah cakupannya menjadi provided untuk mengecualikan paket JAR tersebut.

    • Jika Anda harus menggunakan paket JAR yang berisi kelas exception, Anda dapat menambahkan aturan exclude untuk menghapus kelas yang bertentangan secara spesifik.

    • Jika Anda harus menggunakan kelas exception dan tidak dapat menggantinya dengan versi yang sesuai dari kluster, gunakan Maven Shade Plugin untuk melakukan shading pada kelas tersebut.

    Sebagai tambahan, jika beberapa versi paket JAR ada di classpath, versi kelas yang digunakan oleh job bergantung pada urutan pemuatan kelas. Untuk memastikan dari paket JAR mana kelas tertentu dimuat, Anda dapat mengatur parameter JVM env.java.opts: -verbose:class di file flink-conf.yaml atau tentukan parameter dinamis -Denv.java.opts="-verbose:class" untuk mencetak kelas yang dimuat beserta sumbernya.

    Catatan

    Untuk JobManager atau TaskManager, informasi ini dicetak ke file jobmanager.out atau taskmanager.out.

Kirim job dari mesin eksternal

Untuk mengirimkan job ke kluster DataFlow dari mesin eksternal, ikuti langkah-langkah berikut:

  1. Pastikan mesin eksternal dapat terhubung ke kluster DataFlow melalui jaringan.

  2. Konfigurasikan lingkungan Hadoop YARN di mesin client yang mengirimkan job Flink.

    Di kluster DataFlow, perangkat lunak Hadoop YARN diinstal di direktori /opt/apps/YARN/yarn-current, dan file konfigurasinya berada di direktori /etc/taihao-apps/hadoop-conf/. Anda harus mengunduh direktori yarn-current dan direktori hadoop-conf ke mesin client.

    Kemudian, konfigurasikan variabel lingkungan berikut di mesin client.

    export HADOOP_HOME=/path/to/yarn-current && \
    export PATH=${HADOOP_HOME}/bin/:$PATH && \
    export HADOOP_CLASSPATH=$(hadoop classpath) && \
    export HADOOP_CONF_DIR=/path/to/hadoop-conf
    Penting

    File konfigurasi Hadoop, seperti yarn-site.xml, menggunakan fully qualified domain name (FQDN) untuk alamat layanan seperti ResourceManager. Contohnya, master-1-1.c-xxxxxxxxxx.cn-hangzhou.emr.aliyuncs.com. Jika Anda mengirimkan job dari mesin eksternal, pastikan FQDN tersebut dapat diselesaikan, atau ganti FQDN dengan alamat IP yang sesuai di file konfigurasi.

  3. Setelah konfigurasi selesai, mulai job Flink di mesin eksternal. Misalnya, jalankan perintah flink run -d -t yarn-per-job -ynm flink-test $FLINK_HOME/examples/streaming/TopSpeedWindowing.jar. Anda kemudian dapat melihat job Flink yang sesuai di YARN web UI kluster DataFlow.

Selesaikan hostname kluster dari mesin eksternal

Gunakan salah satu metode berikut untuk menyelesaikan hostname kluster DataFlow dari mesin eksternal:

  • Ubah file /etc/hosts di mesin client untuk menambahkan pemetaan antara hostname dan alamat IP.

  • Gunakan layanan DNS yang disediakan oleh Alibaba Cloud DNS PrivateZone.

    Jika Anda memiliki layanan resolusi nama domain sendiri, Anda juga dapat mengonfigurasi parameter runtime JVM berikut untuk menggunakannya.

    env.java.opts.client: "-Dsun.net.spi.nameservice.nameservers=xxx -Dsun.net.spi.nameservice.provider.1=dns,sun -Dsun.net.spi.nameservice.domain=yyy"

Periksa status job Flink

  • Gunakan Konsol EMR.

    EMR mendukung Knox, yang memungkinkan Anda mengakses UI web layanan seperti YARN dan Flink melalui internet. Anda dapat mengakses UI web Flink melalui YARN. Untuk informasi lebih lanjut, lihat Lihat status job di UI web.

  • Gunakan SSH tunnel. Untuk informasi lebih lanjut, lihat Buat SSH tunnel untuk mengakses UI web komponen open source.

  • Akses langsung YARN REST API.

    curl --compressed -v  -H "Accept: application/json" -X GET "http://master-1-1:8088/ws/v1/cluster/apps?states=RUNNING&queue=default&user.name=***"
    Catatan

    Pastikan security group Anda mengizinkan akses ke port 8443 dan 8088 untuk mencapai YARN REST API. Atau, pastikan kluster DataFlow dan node client Anda berada dalam Virtual Private Cloud (VPC) yang sama.

Akses log job Flink

  • Untuk job yang sedang berjalan, Anda dapat mengakses log-nya melalui UI web Flink.

  • Untuk job yang telah selesai, Anda dapat melihat statistiknya di Flink HistoryServer atau mengakses log-nya dengan menjalankan perintah yarn logs -applicationId application_xxxx_yyyy. Log untuk job yang telah selesai disimpan secara default di direktori hdfs:///tmp/logs/$USERNAME/logs/ pada kluster HDFS.

Akses Flink HistoryServer

Kluster DataFlow secara default menjalankan Flink HistoryServer di node master-1-1 (mesin pertama di grup server master) pada port 18082. Server ini mengumpulkan statistik untuk job yang telah selesai. Untuk mengaksesnya, ikuti langkah-langkah berikut:

  1. Konfigurasikan aturan security group untuk mengizinkan akses ke port 18082 di node master-1-1.

  2. Akses http://$master-1-1-ip:18082 secara langsung.

Penting

Flink HistoryServer tidak menyimpan log detail job yang telah selesai. Untuk melihat log, gunakan YARN API atau YARN web UI.

Gunakan connector komersial

Kluster DataFlow menyediakan banyak connector komersial, seperti untuk Hologres, SLS, MaxCompute, DataHub, Elasticsearch, dan ClickHouse. Di job Flink Anda, Anda dapat menggunakan connector komersial ini selain connector open source. Contoh berikut menunjukkan cara menggunakan connector Hologres yang disertakan.

  • Pengembangan job

    1. Unduh paket JAR connector komersial dari kluster DataFlow (berlokasi di direktori /opt/apps/FLINK/flink-current/opt/connectors). Kemudian, instal connector di lingkungan Maven lokal Anda dengan menjalankan perintah berikut.

      mvn install:install-file -Dfile=/path/to/ververica-connector-hologres-1.13-vvr-4.0.7.jar -DgroupId=com.alibaba.ververica -DartifactId=ververica-connector-hologres -Dversion=1.13-vvr-4.0.7 -Dpackaging=jar
    2. Tambahkan dependensi berikut ke file pom.xml proyek Anda.

      <dependency>
          <groupId>com.alibaba.ververica</groupId>
          <artifactId>ververica-connector-hologres</artifactId>
          <version>1.13-vvr-4.0.7</version>
          <scope>provided</scope>
      </dependency>
  • Jalankan job

    • Metode 1:

      1. Salin connector Hologres ke direktori terpisah.

        hdfs mkdir hdfs:///flink-current/opt/connectors/hologres/
        hdfs cp hdfs:///flink-current/opt/connectors/ververica-connector-hologres-1.13-vvr-4.0.7.jar  hdfs:///flink-current/opt/connectors/hologres/ververica-connector-hologres-1.13-vvr-4.0.7.jar
      2. Saat mengirimkan job, tambahkan parameter berikut ke perintah.

        -D yarn.provided.lib.dirs=hdfs:///flink-current/opt/connectors/hologres/
    • Metode 2:

      1. Salin connector Hologres ke direktori /opt/apps/FLINK/flink-current/opt/connectors/ververica-connector-hologres-1.13-vvr-4.0.7.jar di client pengiriman job. Struktur direktori ini harus sesuai dengan yang ada di kluster DataFlow.

      2. Saat mengirimkan job, tambahkan parameter berikut ke perintah.

        -C file:///opt/apps/FLINK/flink-current/opt/connectors/ververica-connector-hologres-1.13-vvr-4.0.7.jar
    • Metode 3: Masukkan connector Hologres ke dalam paket JAR job Anda.

Gunakan GeminiStateBackend

Kluster DataFlow menyediakan GeminiStateBackend tingkat enterprise, yang menawarkan performa 3 hingga 5 kali lipat dibandingkan versi open source. Kluster DataFlow secara default menggunakan GeminiStateBackend. Untuk informasi lebih lanjut tentang konfigurasi lanjutan untuk GeminiStateBackend, lihat Konfigurasi backend status tingkat enterprise.

Gunakan state backend open source

Kluster DataFlow secara default menggunakan GeminiStateBackend tingkat enterprise. Jika Anda ingin menggunakan state backend open source, seperti rocksdb, untuk job tertentu, Anda dapat menentukannya dengan menggunakan flag -D. Contohnya:

flink run-application -t yarn-application -D state.backend=rocksdb  /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar

Atau, agar perubahan ini berlaku untuk semua job berikutnya, buka Konsol EMR, ubah nilai parameter state.backend menjadi state backend yang diinginkan (misalnya, rocksdb). Klik Save, lalu klik Deploy Client Configuration.

Lihat log client

Di lingkungan kluster EMR, variabel lingkungan FLINK_LOG_DIR menentukan lokasi penyimpanan log client Flink. Nilai default-nya adalah /var/log/taihao-apps/flink (default sebelumnya adalah /mnt/disk1/log/flink pada versi sebelum 3.43.0). Jika Anda perlu melihat log client lengkap, seperti log SQL Client, Anda dapat menemukan file yang sesuai di direktori ini.

Parameter job tidak berlaku

Saat menjalankan job Flink dari command line, letakkan parameter job setelah paket JAR job Flink. Contohnya: flink run -d -t yarn-per-job test.jar arg1 arg2.

Selesaikan error "Multiple factories..."

  • Penyebab

    Error ini menunjukkan bahwa classpath berisi beberapa implementasi connector. Hal ini biasanya terjadi ketika dependensi connector ditambahkan ke paket JAR job sementara Anda juga secara manual menempatkan dependensi connector yang sama di direktori $FLINK_HOME/lib, sehingga menyebabkan konflik dependensi.

  • Solusi

    Solusinya adalah menghapus dependensi duplikat. Untuk langkah troubleshooting detail, lihat Apa yang harus saya lakukan jika paket JAR job bertentangan dengan paket JAR Flink kluster?

Aktifkan HA JobManager

Kluster DataFlow menerapkan dan menjalankan job Flink dalam mode YARN. Anda dapat mengaktifkan high availability (HA) untuk JobManager agar eksekusi job Flink lebih stabil dengan mengikuti panduan Configuration komunitas. Berikut contoh konfigurasinya.

high-availability: zookeeper
high-availability.zookeeper.quorum: 192.168.**.**:2181,192.168.**.**:2181,192.168.**.**:2181
high-availability.zookeeper.path.root: /flink
high-availability.storageDir: hdfs:///flink/recovery
Penting

Setelah Anda mengaktifkan high availability, JobManager secara default akan me-restart paling banyak satu kali saat gagal. Jika Anda ingin JobManager me-restart beberapa kali, Anda juga harus mengatur parameter YARN yarn.resourcemanager.am.max-attempts dan parameter Flink yarn.application-attempts. Untuk informasi lebih lanjut, lihat dokumentasi resmi Apache Flink. Berdasarkan pengalaman, Anda juga harus menaikkan nilai parameter yarn.application-attempt-failures-validity-interval dari default 10.000 milidetik (10 detik) menjadi nilai yang lebih besar, seperti 300.000 milidetik (5 menit), untuk mencegah JobManager me-restart terus-menerus.

Lihat metrik job Flink

  1. Di Konsol EMR, navigasikan ke halaman Monitoring kluster target dan klik Metric Monitoring.

  2. Dari daftar drop-down Dashboard, pilih FLINK.

  3. Pilih ID aplikasi dan ID job untuk job yang ingin Anda lihat. Metrik monitoring untuk job tersebut kemudian akan muncul.

    Catatan
    • Opsi ID aplikasi dan ID job hanya tersedia jika job Flink sedang berjalan di kluster.

    • Beberapa metrik, seperti sourceIdleTime, hanya dihasilkan jika source dan sink yang sesuai dikonfigurasi.

Lakukan troubleshooting masalah connector

Untuk pertanyaan umum tentang penyimpanan hulu dan hilir, lihat Connector.

Selesaikan error akses OSS tanpa password

Tangani masalah berdasarkan pesan error spesifik:

  • Pesan error: java.lang.UnsupportedOperationException: Recoverable writers on Hadoop are only supported for HDFS.

    • Penyebab: Kluster DataFlow menggunakan JindoSDK bawaan untuk mendukung akses OSS tanpa password dan API seperti StreamingFileSink. Anda tidak perlu melakukan konfigurasi tambahan seperti yang dijelaskan dalam dokumentasi komunitas. Melakukannya dapat menyebabkan konflik dependensi yang menghasilkan error ini.

    • Solusi: Di mesin pengiriman job di kluster Anda, periksa direktori $FLINK_HOME/plugins untuk direktori oss-fs-hadoop. Jika ada, hapus direktori tersebut dan kirim ulang job.

  • Pesan error: Could not find a file system implementation for scheme 'oss'. The scheme is directly supported by Flink through the following plugin: flink-oss-fs-hadoop. .....

    • Penyebab: Di kluster EMR versi 3.40 dan sebelumnya, mesin di grup server master selain master-1-1 mungkin kehilangan paket JAR terkait Jindo.

    • Solusi:

      • Untuk EMR 3.40 dan sebelumnya: Periksa apakah paket JAR terkait Jindo, seperti jindo-flink-4.0.0-full.jar, ada di direktori $FLINK_HOME/lib di mesin pengiriman job. Jika tidak ada, jalankan perintah berikut untuk menyalin paket JAR yang diperlukan ke direktori $FLINK_HOME/lib lalu kirim ulang job.

        cp /opt/apps/extra-jars/flink/jindo-flink-*-full.jar $FLINK_HOME/lib
      • Untuk versi EMR setelah 3.40:

        • Untuk mode Flink on YARN: Versi yang lebih baru memiliki mekanisme optimalisasi untuk dukungan OSS. Job yang membaca dan menulis ke OSS dapat berjalan normal meskipun paket JAR terkait Jindo tidak ada di direktori $FLINK_HOME/lib.

        • Untuk mode penyebaran lainnya: Periksa apakah paket JAR terkait Jindo, seperti jindo-flink-4.0.0-full.jar, ada di direktori $FLINK_HOME/lib di mesin pengiriman job. Jika tidak ada, jalankan perintah berikut untuk menyalinnya ke direktori $FLINK_HOME/lib lalu kirim ulang job.

          cp /opt/apps/extra-jars/flink/jindo-flink-*-full.jar $FLINK_HOME/lib

Selesaikan error "TaskManager heartbeat timed out"

  • Penyebab

    Penyebab langsungnya adalah timeout heartbeat TaskManager. Anda dapat memeriksa log TaskManager untuk pesan error spesifik guna mengidentifikasi alasan pastinya. Penyebab potensial lainnya termasuk memori heap TaskManager yang tidak mencukupi atau error out of memory (OOM) akibat memory leak di kode job. Untuk informasi lebih lanjut, lihat Bagaimana cara menyelesaikan error "java.lang.OutOfMemoryError: GC overhead limit exceeded"?.

  • Solusi

    Jika Anda mengalami error ini, tingkatkan alokasi memori atau analisis penggunaan memori job untuk mendiagnosis lebih lanjut.

Selesaikan error "GC overhead limit exceeded"

  • Penyebab

    Error ini menunjukkan bahwa garbage collector (GC) membutuhkan waktu terlalu lama karena memori yang dialokasikan untuk job tidak mencukupi. Penyebab umumnya termasuk memory leak di kode (seperti UDF) atau memori yang dikonfigurasi tidak mencukupi untuk kebutuhan job.

  • Solusi

    • Sebelum menjalankan ulang job, tentukan parameter JVM berikut menggunakan flag -D untuk menyimpan heap dump saat OutOfMemoryError terjadi: -D env.java.opts="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dump.hprof".

    • Tambahkan parameter env.java.opts: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dump.hprof ke file flink-conf.yaml untuk mengonfigurasi heap dump saat OutOfMemoryError.

    Setelah error terjadi lagi, Anda dapat menganalisis file heap dump yang ditentukan oleh HeapDumpPath menggunakan alat seperti MAT atau jvisualvm untuk menentukan akar penyebabnya.

Nol "Records Received" untuk job single-operator

Ini normal. Metrik Records Received Flink menggambarkan komunikasi data antar operator yang berbeda. Saat job dioptimalkan menjadi satu operator, metrik ini akan selalu bernilai 0.

Aktifkan flame graph untuk job Flink

Flame graph memvisualisasikan konsumsi CPU berbagai metode dalam suatu proses, membantu Anda mengidentifikasi dan menyelesaikan bottleneck performa. Flink telah mendukung flame graph sejak versi 1.13, tetapi fitur ini dinonaktifkan secara default untuk menghindari dampak pada job produksi. Jika Anda perlu menggunakan flame graph untuk menganalisis performa job, buka tab Configure layanan Flink di Konsol EMR. Di file flink-conf.yaml, tambahkan item konfigurasi baru dengan parameter rest.flamegraph.enabled dan atur nilainya menjadi true. Untuk petunjuk menambahkan item konfigurasi, lihat Kelola item konfigurasi.

Untuk informasi lebih lanjut tentang flame graph, lihat Flame Graphs.

Selesaikan error "NoSuchFieldError: DEPLOYMENT_MODE"

  • Penyebab

    Paket JAR job Anda secara langsung atau tidak langsung menyertakan dependensi flink-core yang tidak kompatibel dengan versi Flink di kluster, sehingga menyebabkan konflik dependensi.

  • Solusi

    Tambahkan konfigurasi berikut ke file pom.xml Anda untuk mengatur scope dependensi flink-core menjadi provided. Ini akan menyelesaikan masalah.

    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-core</artifactId>
      <!-- Ganti dengan versi flink Anda sendiri -->
      <version>1.16.1</version>
      <scope>provided</scope>
    </dependency>
    Catatan

    Anda harus mengganti version dengan versi Flink Anda.

    Untuk lebih lanjut menemukan sumber dependensi ini, lihat Apa yang harus saya lakukan jika paket JAR job bertentangan dengan paket JAR Flink kluster?.