Java操作hdfs出現的問題

lightTrace發表於2018-12-19

前言

需求是用golang儲存資料到hdfs裡面,但由於有kerberos的驗證問題,golang的開源輪子沒有驗證的東西,遂放棄golang,使用Java來封裝相關介面。具體的操作程式碼就不說了,說說幾個遇到的問題。

springboot 、hadoop日誌衝突問題

需要去除hadoop裡面的slf4j相關以及tomcat的servlet的相關依賴

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
    </exclusions>
    <version>2.7.4</version>

</dependency>

Failed to APPEND_FILE問題

要麼是沒有實時關閉FSDataOutputStream,要麼是配置條件沒有設定允許追加

conf.set("dfs.support.append", "true");
conf.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");
conf.set("dfs.client.block.write.replace-datanode-on-failure.enable", "true");

java併發寫hdfs檔案問題

hdfs不允許併發的寫入同一個檔案,此時可以將追加寫入的方法粗暴的加一個synchronized關鍵字來防止“fs控制程式碼”的併發使用

相關文章