HDFS_實戰
  • Introduction
  • hadoop fs / hdfs
  • Filesystem 物件(pyspark 為例)
  • webhdfs
Powered by GitBook
On this page
  • hadoop 有提供對應的 java 物件供 hdfs 操作 “org.apache.hadoop.fs.FileSystem”
  • 舉個例子,今天我使用 pyspark。
  • 程式範例如下
  • 而後,便可以透過 fs 取用相對應的 hadoop 操作方法
  • 比如

Was this helpful?

Filesystem 物件(pyspark 為例)

hadoop 有提供對應的 java 物件供 hdfs 操作 “org.apache.hadoop.fs.FileSystem”

如果你今天是用 Java 那就是用 FileSystem 建立一個物件,來使用 filesystem 的方法。

無論你用 MapReduce 還是 Spark.

而若是使用其他語言,你只要能夠溝通到 jvm,讀到 java 的 class ,建立一個 java 物件即可,其實大同小異。

舉個例子,今天我使用 pyspark。

因為 python 可以透過 py4j 與 java 溝通,透過py4j 提供的 java_gateway,溝通到 jvm,就可以呼叫到我要取用的 java 物件。

常規的做法我建立一個 spark session,取出其中的 spark context,並透過 spark context 去讀 FileSystem 類別以及 config 物件

並以此建立對應的 file system 物件。

最後還要記得建立 Path 物件,才會正確讀到對應路徑。

程式範例如下

spark = SparkSession.builder\
.appName("Timothy test")\
.config("spark.some.config.option", "some-value")\
.getOrCreate();

sc = spark.sparkContext

FileSystem = sc._gateway.jvm.org.apache.hadoop.fs.FileSystem

Configuration = sc._gateway.jvm.org.apache.hadoop.conf.Configuration

fs = FileSystem.get(Configuration())

set_path = sc._gateway.jvm.org.apache.hadoop.fs.Path

而後,便可以透過 fs 取用相對應的 hadoop 操作方法

比如

  • 檢察檔案存在與否,存在則回傳 True 不存在則回傳 False

fs.exists(set_path('<hdfs file path>'))
  • 重新命名,真正的動作是搬動(mv)

fs.rename(set_path("<from path>"), set_path("<destination path>"))
  • 刪除檔案

fs.delete(set_path(path), True)
  • 建立路徑

fs.mkdirs(set_path(path))

Previoushadoop fs / hdfsNextwebhdfs

Last updated 5 years ago

Was this helpful?