1. 程式人生 > >利用JavaAPI訪問HDFS的檔案

利用JavaAPI訪問HDFS的檔案

1、重讀配置檔案core-site.xml

要利用Java客戶端來存取HDFS上的檔案,不得不說的是配置檔案hadoop-0.20.2/conf/core-site.xml了,最初我就是在這裡吃了大虧,所以我死活連不上HDFS,檔案無法建立、讀取。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!--- global properties -->
<property>
<name>hadoop.tmp.dir

</name>
<value>/home/zhangzk/hadoop</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://linux-zzk-113:9000</value>
</property>
</configuration>

配置項:hadoop.tmp.dir表示命名節點上存放元資料的目錄位置,對於資料節點則為該節點上存放檔案資料的目錄。 

配置項:fs.default.name表示命名IP地址和埠號,預設值是,對於JavaAPI來講,連線HDFS必須使用這裡的配置的URL地址,對於資料節點來講,資料節點通過該URL來訪問命名節點。

2、利用JavaAPI來訪問HDFS的檔案與目錄

package com.demo.hdfs;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;

/**
 * @author zhangzk
 *
 */
public class FileCopyToHdfs {

 public static void main(String[] args) throws Exception {
  try {
   //uploadToHdfs();   
   //deleteFromHdfs();
   //getDirectoryFromHdfs();
   appendToHdfs();
   readFromHdfs();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  finally
  {
   System.out.println("SUCCESS");
  }
 }

 /**上傳檔案到HDFS上去*/

 private static void uploadToHdfs() throws FileNotFoundException,IOException {
  String localSrc = "d://qq.txt";
  String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.txt";
  InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
  Configuration conf = new Configuration();
  
  FileSystem fs = FileSystem.get(URI.create(dst), conf);
  OutputStream out = fs.create(new Path(dst), new Progressable() {
   public void progress() {
    System.out.print(".");
   }
  });
  IOUtils.copyBytes(in, out, 4096, true);
 }
 

 /**從HDFS上讀取檔案*/
 private static void readFromHdfs() throws FileNotFoundException,IOException {
  String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.txt";  
  Configuration conf = new Configuration();  
  FileSystem fs = FileSystem.get(URI.create(dst), conf);
  FSDataInputStream hdfsInStream = fs.open(new Path(dst));
  
  OutputStream out = new FileOutputStream("d:/qq-hdfs.txt");
  byte[] ioBuffer = new byte[1024];
  int readLen = hdfsInStream.read(ioBuffer);

  while(-1 != readLen){
  out.write(ioBuffer, 0, readLen);  
  readLen = hdfsInStream.read(ioBuffer);
  }
  out.close();
  hdfsInStream.close();
  fs.close();
 }
 

 /**以append方式將內容新增到HDFS上檔案的末尾;注意:檔案更新,需要在hdfs-site.xml中添<property><name>dfs.append.support</name><value>true</value></property>*/
 private static void appendToHdfs() throws FileNotFoundException,IOException {
  String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.txt";  
  Configuration conf = new Configuration();  
  FileSystem fs = FileSystem.get(URI.create(dst), conf);  
  FSDataOutputStream out = fs.append(new Path(dst));

  int readLen = "zhangzk add by hdfs java api".getBytes().length;

  while(-1 != readLen){
  out.write("zhangzk add by hdfs java api".getBytes(), 0, readLen);
  }
  out.close();
  fs.close();
 }
 

 /**從HDFS上刪除檔案*/
 private static void deleteFromHdfs() throws FileNotFoundException,IOException {
  String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq-bak.txt";  
  Configuration conf = new Configuration();  
  FileSystem fs = FileSystem.get(URI.create(dst), conf);
  fs.deleteOnExit(new Path(dst));
  fs.close();
 }
 

 /**遍歷HDFS上的檔案和目錄*/
 private static void getDirectoryFromHdfs() throws FileNotFoundException,IOException {
  String dst = "hdfs://192.168.0.113:9000/user/zhangzk";  
  Configuration conf = new Configuration();  
  FileSystem fs = FileSystem.get(URI.create(dst), conf);
  FileStatus fileList[] = fs.listStatus(new Path(dst));
  int size = fileList.length;
  for(int i = 0; i < size; i++){
  System.out.println("name:" + fileList[i].getPath().getName() + "/t/tsize:" + fileList[i].getLen());
  }
  fs.close();
 } 

}

注意:對於append操作,從hadoop-0.21版本開始就不支援了,關於Append的操作可以參考Javaeye上的一篇文件。

相關推薦

利用JavaAPI訪問HDFS檔案

1、重讀配置檔案core-site.xml 要利用Java客戶端來存取HDFS上的檔案,不得不說的是配置檔案hadoop-0.20.2/conf/core-site.xml了,最初我就是在這裡吃了大虧,所以我死活連不上HDFS,檔案無法建立、讀取。 <?xml vers

Structure Streaming和spark streaming原生API訪問HDFS檔案資料對比

此文已由作者嶽猛授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 Structure Stream訪問方式 code examples import org.apache.spark.sql.streaming._ val df = spark.

HAWQ上安裝PXF外掛,並訪問HDFS檔案資料

在安裝pxf外掛之前,可以先檢視一下基礎軟體對應的版本資訊:在hawq目錄下的pxf/gradle.properties檔案中 因我在安裝pxf之前,已經把hadoop及hawq安裝完,在後期所需低版本的hdfs,需要重新指定低版本的路徑(主要是jar包的路徑) 使用

JavaAPI實現hdfs檔案增刪改查

package com.aimuti.hadoop.hdfs; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; import java

使用JavaAPI進行HDFS檔案系統的增刪改查

0、事前準備。 0.1    完成HADOOP的叢集安裝,完成HDFS的配置和初始化。 0.2    配置好Linux或Win環境下的Java開發環境。 本文環境為WIN10 + Java1.8 + Eclipse。 0.3    有一定Java基礎。

訪問hdfs裡的檔案

準備工作:   給hdfs裡上傳一份用於測試的檔案    [[email protected] ~]# cat hello.txt   hello 1  hello 2  hello 3  hello 4   [[email protected] ~]# hadoop fs -put

java連線hdfs檔案系統並訪問檔案

package hadoop; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import org.apache.

HDFS操作實驗(hdfs檔案上傳、使用JavaAPI判斷檔案存在,檔案合併)

    此部落格為博主學習總結,內容為博主完成本週大資料課程的實驗內容。實驗內容分為兩部分。    1. 在分散式檔案系統中建立檔案並用shell指令檢視;    2. 利用Java API程式設計實現判斷檔案是否存在和合並兩個檔案的內容成一個檔案。    感謝廈門大學資料庫

windows系統下使用Java語言訪問Linux系統下HDFS檔案系統相關配置步驟

前提:Linux系統已部署完成Hadoop叢集並已啟動,在Windows系統可以通過IP:50070檢視HDFS檔案系統 配置過程: 1.Windows系統下安裝JDK並配置環境變數 2.Windows系統配置Hadoop環境變數 配置HADOOP_HOME

如何利用android訪問assets下的檔案或資料夾

package com.bn.pp7; import java.io.ByteArrayOutputStream; import java.io.InputStream; import android.app.Activity; import android.o

HDFS檔案許可權及ACL訪問控制

Hdfs檔案許可權及ACL訪問控制 1、許可權相關配置 (1)、hdfs-site.xml設定啟動acl <property> <name>dfs.permissions.enabled</name>

第一個hadoop程式(java程式訪問hadoop的hdfs檔案系統中的檔案

1:hadoop2.7.3環境 2:阿里雲伺服器centos6.5,ip是:47.88.14.190 3:hadoop在偽分散式下執行的。 4:具體配置檔案如下: 1)core-site.xml配置(ip地址最好不用localhost,不然不好測試) <configu

【Hadoop】HA 場景下訪問 HDFS JAVA API Client

new mes inpu true stream node spa lba main 客戶端需要指定ns名稱,節點配置,ConfiguredFailoverProxyProvider等信息。 代碼示例: package cn.itacst.hadoop.hdfs; i

關於利用PHP訪問MySql數據庫的邏輯操作以及增刪改查實例操作

自增 刪除 nbsp bsp 增刪 sso 成員 執行 ech PHP訪問MySql數據庫 <?php //造連接對象$db = new MySQLi("localhost","root","","0710_test");//寫SQL語句$sql = "select

VS2013利用ajax訪問不了json文件——VS2013配置webconfig識別json文件

cat mark 無法 style south ati 添加 b2c logs 這兩天用VS2013開發工具來訪問json文件,老是報404文件,我根據網上來設置IIS添加MIME重啟IIS和VS2013還是失敗,無法訪問json文件,但是奇怪的是可以訪問txt文件 查詢

使用javaAPI操作hdfs

文件系統 ole 文件 緩沖區 api println 不存在 ogg 就會 歡迎到https://github.com/huabingood/everyDayLanguagePractise查看源碼。 一.構建環境 在hadoop的安裝包中的share目錄

利用JavaFX訪問MySQL數據庫

com .cn ati button 獲取 integer 占位符 dst system 1. 創建數據庫表 create table Course( courseId char(5), subjectId char(4) not null, courseNumber

外網無法訪問hdfs文件系統

actor hand dfs 安裝 RR and hosts method 鏈接 由於本地測試和服務器不在一個局域網,安裝的hadoop配置文件是以內網ip作為機器間通信的ip. 在這種情況下,我們能夠訪問到namenode機器, namenode會給我們數據所在機器的ip

nginx功能之一可以啟動一個本地伺服器,通過配置server_name和root目錄等來訪問目標檔案

  一. 下載 http://nginx.org/   下載後解壓   二. 修改配置檔案 nginx配置檔案在 nginx-1.8.0\conf\nginx.conf http { #壓縮html

IDEA編寫wordcount,讀取hdfs檔案,執行在Spark叢集例子

前期:已安裝好hadoop叢集和spark叢集,hadoop2.6.5,spark2.3.1,jdk1.8. scala2.1.0 第一步:在idea編寫scala程式,並且要打包(pom檔案的build標籤中配置好maven打包程式碼,可以定義主類也可以在提交的時候再定義){補充:可以在s