Ошибка при перемещении файлов журнала из локальной файловой системы в HDFS через Apache Flume

#java #hadoop #hdfs #flume #flume-ng

#Ява #hadoop #hdfs #желоб #слив-нг

Вопрос:

У меня есть файлы журналов в моей локальной файловой системе, которые необходимо перенести в HDFS через Apache Flume. У меня есть следующий файл конфигурации в домашнем каталоге, сохраненный как net.conf

 NetcatAgent.sources = Netcat NetcatAgent.channels = MemChannel NetcatAgent.sinks= LoggerSink  # configuring source NetcatAgent.sources.Netcat.type = netcat  #type of conection is netcat NetcatAgent.sources.Netcat.bind = localhost  # bind to localhost NetcatAgent.sources.Netcat.port=9999  # localhost port number   # configuring sink NetcatAgent.sinks.LoggerSink.type = logger  #logger sends output to console  # Configuring Channel NetcatAgent.channels.MemChannel.type = memory   #defines type of memory it is storing NetcatAgent.channels.MemChannel.capacity = 10000   #how many events can be present NetcatAgent.channels.MemChannel.transactionCapacity = 1000   #how many events it can handle at a time  # bind source and sink to channel NetcatAgent.sources.Netcat.channels = MemChannel NetcatAgent.sinks.LoggerSink.channel = MemChannel    #to run the file on console  #flume-ng agent -n NetcatAgent -f net.conf  #on other terminal establish connection using #telnet localhost 9999  

После выполнения команды в самом домашнем каталоге flume-ng agent -n NetcatAgent -f net.conf

Я получил следующий результат:

 Warning: No configuration directory set! Use --conf lt;dirgt; to override. Info: Including Hadoop libraries found via (/home/samar/hadoop-3.3.1/bin/hadoop) for HDFS access Info: Including Hive libraries found via () for Hive access   exec /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Xmx20m -cp '/home/samar/flume/lib/*:/home/samar/hadoop-3.3.1/etc/hadoop:/home/samar/hadoop-3.3.1/share/hadoop/common/lib/*:/home/samar/hadoop-3.3.1/share/hadoop/common/*:/home/samar/hadoop-3.3.1/share/hadoop/hdfs:/home/samar/hadoop-3.3.1/share/hadoop/hdfs/lib/*:/home/samar/hadoop-3.3.1/share/hadoop/hdfs/*:/home/samar/hadoop-3.3.1/share/hadoop/mapreduce/*:/home/samar/hadoop-3.3.1/share/hadoop/yarn:/home/samar/hadoop-3.3.1/share/hadoop/yarn/lib/*:/home/samar/hadoop-3.3.1/share/hadoop/yarn/*:/lib/*' -Djava.library.path=:/home/samar/hadoop-3.3.1/lib/native org.apache.flume.node.Application -n NetcatAgent -f net.conf SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/home/samar/flume/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/home/samar/hadoop-3.3.1/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space  at java.base/java.util.Arrays.copyOf(Arrays.java:3745)  at java.base/jdk.internal.loader.Resource.getBytes(Resource.java:117)  at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:797)  at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)  at com.google.common.collect.Sets.newHashSetWithExpectedSize(Sets.java:194)  at com.google.common.collect.HashMultimap.createCollection(HashMultimap.java:114)  at com.google.common.collect.HashMultimap.createCollection(HashMultimap.java:49)  at com.google.common.collect.AbstractMultimap.createCollection(AbstractMultimap.java:156)  at com.google.common.collect.AbstractMultimap.getOrCreateCollection(AbstractMultimap.java:214)  at com.google.common.collect.AbstractMultimap.put(AbstractMultimap.java:201)  at com.google.common.collect.AbstractSetMultimap.put(AbstractSetMultimap.java:117)  at com.google.common.collect.HashMultimap.put(HashMultimap.java:49)  at com.google.common.eventbus.AnnotatedHandlerFinder.findAllHandlers(AnnotatedHandlerFinder.java:57)  at com.google.common.eventbus.EventBus.register(EventBus.java:211)  at org.apache.flume.node.Application.main(Application.java:355)  

Я отредактировал flume-env.sh файл как этот, но проблема сохраняется. введите описание изображения здесь

Для этой задачи. введите описание изображения здесь

Ответ №1:

Следующее исключение подразумевает, что у агента flume недостаточно памяти (точнее, кучи) для выполнения задачи.

Увеличьте объем памяти java агента flume в flume_env.sh файле или укажите объем памяти во время развертывания с помощью flume-ng agent -n NetcatAgent -f net.conf -Xmx2048m (Примечание: При этом размер кучи flume устанавливается равным 2 ГБ = 2048 МБ).

Вы можете указать параметры java-D и-X из командной строки.

Внутри каталога flume перейдите в conf каталог, там должен быть flume-env.sh flume-env.sh.template файл или или, если есть файл .template, скопируйте файл с помощью

 cp flume-env.sh.template flume-env.sh  

Как только это будет сделано, откройте flume-env.sh файл и добавьте следующие строки

 export JAVA_OPTS="-Xms1G -Xmx2G"  

Сохраните файл, а затем запустите flume-агент, агент flume автоматически подберет переменную JAVA_OPTS и применит размер кучи.

Примечание: -Xms1G означает выделение минимальной кучи размером 1 ГБ, а-Xmx означает максимальную кучу размером 2 ГБ. Вносите изменения в соответствии с вашими потребностями.

Комментарии:

1. как я могу отредактировать flume_env.sh файл?

2. @SamarPratapSingh обновил ответ о том, как редактировать flume-env.sh

3. Я добавил скриншот своего файла, пожалуйста, проверьте его.

4. Ну, похоже, вы читаете большой набор данных в память. Могу я спросить, каков размер данных, которые вы пытаетесь прочитать из netcat?

5. flume-env.sh кажется, все в порядке.