本地idea开发flink程序并本地运行读取HDFS文件

本文介绍如何在Apache Flink项目中配置HDFS依赖,确保Flink集群能正确读取HDFS上的文件。通过在Maven中添加指定版本的Hadoop依赖,实现Flink与HDFS的有效整合。
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.5</version>
        </dependency>

1、需要在MAVEN中添加以上依赖。因为只添加的flink依赖不包含HDFS的文件读写,再提交到Flink集群的时候能够读到HDFS的文件,使用为在Flink集群和HDFS整合之后会自动找到HDFS的依赖包。这个选项在flink-conf.yaml中的 fs.hdfs.hadoopconf: $HADOOP_HOME/etc/hadoop

### 3.1 配置Hadoop配置文件路径 在Flink项目中集成Hadoop配置,首先需要将Hadoop集群的配置文件(如`core-site.xml`和`hdfs-site.xml`)引入到Flink环境中。这些文件通常位于Hadoop安装目录下的`etc/hadoop/`路径中[^4]。 为了确保Flink能够正确读取Hadoop配置信息,可以在Flink的配置文件`flink-conf.yaml`中指定Hadoop配置目录: ```yaml fs.hdfs.hadoopconf: /path/to/hadoop/conf ``` 其中,`/path/to/hadoop/conf`应替换为实际存放`core-site.xml`和`hdfs-site.xml`的路径。 --- ### 3.2 在IDEA中导入Hadoop配置文件 在IntelliJ IDEA开发Flink项目时,可以将Hadoop配置文件作为资源添加到项目的`resources`目录中。这样做的好处是可以直接通过类路径访问这些配置文件,而不需要手动指定绝对路径。 具体操作如下: - 将`core-site.xml`和`hdfs-site.xml`复制到Flink项目的`src/main/resources`目录下。 - 在代码中加载Hadoop配置,示例如下: ```java Configuration hadoopConf = new Configuration(); hadoopConf.addResource(new Path("file:///path/to/core-site.xml")); hadoopConf.addResource(new Path("file:///path/to/hdfs-site.xml")); FileSystem.initialize(hadoopConf); ``` 也可以通过类路径方式加载配置文件: ```java Configuration hadoopConf = new Configuration(); hadoopConf.addResource(new Path("classpath:/core-site.xml")); hadoopConf.addResource(new Path("classpath:/hdfs-site.xml")); FileSystem.initialize(hadoopConf); ``` --- ### 3.3 添加Hadoop依赖库 为了使Flink能够与Hadoop交互,必须在Maven或Gradle构建文件中添加Hadoop客户端依赖。例如,在`pom.xml`中添加以下内容以引入Hadoop相关库: ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.3.6</version> </dependency> ``` 此依赖项包含了Hadoop的核心库、HDFS客户端以及其他必要的组件,确保Flink可以访问Hadoop HDFS执行文件操作。 --- ### 3.4 测试HDFS连接 完成上述配置后,可以通过编写一个简单的测试程序来验证Flink是否能够成功访问Hadoop HDFS。例如,读取HDFS上的文本文件输出其内容: ```java public class HadoopIntegrationTest { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> input = env.readFile(FileSystem.getDefaultFileSystem().createInput(new Path("hdfs://node1:9000/path/to/input.txt"))); input.print(); env.execute("Hadoop Integration Test"); } } ``` 在此示例中,`node1`是Hadoop NameNode的主机名,`9000`是HDFS的默认端口。如果程序成功运行输出HDFS文件的内容,则表示Flink已正确集成Hadoop配置。 --- ### 3.5 Kerberos安全认证(可选) 如果Hadoop集群启用了Kerberos认证,则需要额外配置Flink任务以支持安全访问。这包括设置Kerberos配置文件、使用Keytab文件进行登录,Flink任务启动时添加JVM参数: ```bash -Djava.security.krb5.conf=/path/to/krb5.conf ``` 同时,在代码中使用`UserGroupInformation`类进行Kerberos登录: ```java UserGroupInformation.setConfiguration(hadoopConf); UserGroupInformation.loginUserFromKeytab("flink@REALM", "/path/to/flink.keytab"); ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值