輸入org.apache.hadoop.conf.Configuration。 輸入org.apache.hadoop.fs.FileSystem; 輸入org.apache.hadoop.fs.Path。 輸入org.apache.hadoop.io.IOUtils。 輸入org.apache.hadoop.security.UserGroupInformation。 輸入org.slf4j.Logger。 輸入org.slf4j.LoggerFactory; インポートのjava.io.File; 輸入java.io.FileOutputStreamは、 インポートにjava.io.IOException; 輸入java.io.InputStreamを。 インポートにjava.io.OutputStream; パブリック クラスFileSystemConnection { プライベート 静的文字列HDFS_URI = "HDFS://10.46.0.213:8020" ; プライベート 静的な文字列KERBEROS_PRINC =「管理者の@ TDH」。 プライベート 静的な文字列KERBEROS_PRINC_KEYTAB_PATH = "D:\\レポ\\ codeRepo \\ \\ gitのデータサービス\\データ・サービス-サービス・IMPL \\ SRC \\メイン\\リソース\\ admin.keytab" 。 パブリック 静的 最終ロガーロガー= LoggerFactory.getLogger(FileSystemConnection。クラス)。 公共の 静的なファイルシステムgetHdfsConnectionは(){ しようと{ 設定のconf = 新しい)(構成します。 conf.set("fs.defaultFS" 、HDFS_URI)。 conf.set( "hadoop.security.authentication"、 "ケルベロス" ); conf.set( "hadoop.security.authorization"、 "真" ); conf.set( "dfs.datanode.address"、 "0.0.0.0:50010" ); // conf.set( "dfs.datanode.ipc.address"、 "0.0.0.0:50020"); // 没开ケルベロス、下面两行き注释 logger.info( "Kerberosプリンシパル:{}、キータブパス:{}" 、KERBEROS_PRINC、KERBEROS_PRINC_KEYTAB_PATH)。 UserGroupInformation.setConfiguration(CONF)。 UserGroupInformation。 ファイルシステムFS = FileSystem.get(CONF)。 リターンFS; } キャッチ(例外e){ スロー 新しいのRuntimeExceptionを( "HDFS接続失敗を得る" 、E)。 } } プライベート 静的 ボイド downLoadFile()はスローにIOException {
ファイルシステムDFS = getHdfsConnection()。 列src = "HDFS://10.46.0.213:8020を/ tmp / TDT" 。 ストリングDEST = "D:\\ TestFs" 。 パスパス = 新しいパス(SRC); してみてください{ 場合(dfs.exists(パス)){ ファイルfile =新しいファイル(destの+ File.separator + path.getName()); file.createNewFile(); InputStream = dfs.open(パス)。 うちのOutputStream = 新しいのFileOutputStream(ファイル); IOUtils.copyBytes(IN、OUT、CONF)。 in.close(); out.close(); } } キャッチ(例外e){ e.printStackTrace(); } } }