01. apache flume 启动入口【小明同学】

本文指导如何配置和运行Apache FlumeNG,通过解读bin/flume-ng脚本,理解启动类和配置文件的应用,带你快速上手Flume的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flume NG

代码地址,我们把代码clone下来以后就会发现,工程里集成了很多的模块,那该如何下手?

阅读官网的手册

官方手册 这里不再翻译,我们来看重点

start手册步骤中第五步:

Configure and Run Flume NG
After you’ve configured Flume NG (see below), you can run it with the bin/flume-ng executable. This script has a number of arguments and modes.

中文翻译:

配置和运行 Flume NG, 在你配置好了 flume ng(上述的步骤)之后,你可以使用 bin/flume-ng 执行文件进行运行,这个脚本有一些参数和模式。

我们不难发现,Flume NG 的运行入口在 bin/flume-ng

研究 bin/flume-ng 脚本

脚本就在 flume 工程的 bin 包下,我们不对脚本进行详细介绍,直接看重点

# flume 代理类定义
FLUME_AGENT_CLASS="org.apache.flume.node.Application"

# 运行 flume 函数,java命令执行(从这个可以能够察觉到调用该函数的地方就是我们的入口函数)
run_flume() {  
  local FLUME_APPLICATION_CLASS  
  ...
  if [ "$#" -gt 0 ]; then  
  FLUME_APPLICATION_CLASS=$1  
    shift  
  else  
  error "Must specify flume application class" 1  
  fi  
  
 if [ ${CLEAN_FLAG} -ne 0 ]; then  
  set -x  
  fi  
  $EXEC $JAVA_HOME/bin/java $JAVA_OPTS $FLUME_JAVA_OPTS "${arr_java_props[@]}" -cp "$FLUME_CLASSPATH" \  
      -Djava.library.path=$FLUME_JAVA_LIBRARY_PATH "$FLUME_APPLICATION_CLASS" $*  
}
...
# 调用对应的命令,通过不同的参数我们发现有不同的启动入口
# finally, invoke the appropriate command  
if [ -n "$opt_agent" ] ; then  
  run_flume $FLUME_AGENT_CLASS $args  
elif [ -n "$opt_avro_client" ] ; then  
  run_flume $FLUME_AVRO_CLIENT_CLASS $args  
elif [ -n "${opt_version}" ] ; then  
  run_flume $FLUME_VERSION_CLASS $args  
elif [ -n "${opt_tool}" ] ; then  
  run_flume $FLUME_TOOLS_CLASS $args  
else  
  error "This message should never appear" 1  
fi  
exit 0

根据对脚本的分析,我们不难发现启动类是:

org.apache.flume.node.Application#main

那我们要研究的就是这个类了

启动 demo

  1. 在 conf 目录下创建文件 flume.conf 配置文件
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
a1.sinks.k1.type = logger
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  1. 运行 Application.main 函数的时候传入命令参数
--conf-file conf/flume.conf --name a1
  1. 运行 Application.main 函数即可
### Flume 1.9.0 运行 `flume-ng` 命令时遇到的找不到或无法加载主类 `org.apache.flume.tools.GetJavaProperty` 的解决方案 当尝试通过命令行工具启动 Apache Flume 并指定版本号时,如果收到关于找不到或无法加载特定 Java 类的信息,则表明环境配置存在问题。对于提到的具体情况——即缺少名为 `org.apache.flume.tools.GetJavaProperty` 的类文件——这通常意味着 Flume 安装过程中某些必要的库未被正确设置于系统的 CLASSPATH 中。 针对此问题的一个常见修复措施是在启动脚本中手动调整 HBase 和其他相关组件的路径变量,从而确保这些外部资源能够被成功识别并加入到 JVM 加载器所使用的搜索范围内[^3]。具体操作如下: #### 修改启动脚本中的环境变量定义部分 编辑位于安装目录下 bin 文件夹内的 flume-env.sh (如果是 Windows 版本则可能是 .bat 或者 .ps1),向其中添加如下几行用于设定额外的 ClassPath 参数: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 根据实际情况修改JDK位置 export FLUME_CLASSPATH=$FLUME_CLASSPATH:/path/to/hbase/*jar # 将HBase jar包所在路径补充完整 ``` #### 更新 GetJavaProperty 方法调用逻辑 在同一文件内查找是否存在类似下面这段代码的地方,并对其进行适当改造以适应当前需求: ```bash local HBASE_JAVA_LIBRARY_PATH=$(HBASE_CLASSPATH="$FLUME_CLASSPATH" \ ${JAVA_HOME}/bin/java org.apache.hadoop.hbase.util.GetJavaProperty \ java.library.path 2>/dev/null | grep hbase) ``` 将其更改为指向正确的类名空间: ```bash local HBASE_JAVA_LIBRARY_PATH=$(HBASE_CLASSPATH="$FLUME_CLASSPATH" \ ${JAVA_HOME}/bin/java org.apache.flume.tools.GetJavaProperty \ java.library.path 2>/dev/null | grep hbase) ``` 完成上述更改之后保存文件并再次尝试执行 `flume-ng version` 查看是否解决了原始错误消息。需要注意的是,在实际部署环境中应当依据官方文档指导来合理规划软件间的依赖关系以及相应的环境搭建流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值