Skip to main content

การใช้งาน HDFS

ผู้ใช้งานสามารถใช้งาน HDFS ของ Data Platform ได้ 4 วิธี

  1. ใช้งานผ่าน Cloudera Hue
  2. ใช้งานผ่าน Data Platform Shell
  3. ใช้งานผ่าน REST API
  4. ใช้งานผ่าน Python API

แต่ละวิธีมีข้อดีและข้อเสียของตัวเอง ผู้ใช้งานสามารถเลือกใช้ได้ตามความเหมาะสมของงาน

การใช้งานผ่าน Cloudera Hue

ผู้ใช้งานสามารถศึกษาวิธีการเข้าใช้งาน HDFS ผ่าน Cloudera Hue ได้ที่คู่มือการใช้งาน Hue

การใช้งานผ่าน Data Platform Shell

  1. Log in ด้วย ssh เข้าเครื่อง dpc-cdr-u1.mea.or.th ด้วยคำสั่ง

    ssh <employee_id>@dpc-cdr-u1.mea.or.th

    ตัวอย่างสำหรับพนักงานรหัส 2237007

    ssh 2237007@dpc-cdr-u1.mea.or.th

    จากนั้นกรอก Password จากระบบ AD ซึ่งเป็นชุดเดียวกับรหัสผ่านเข้าเครื่องคอมพิวเตอร์และ WiFi

  2. ทำการขอ Ticket จากระบบความปลอดภัย Kerberos ด้วยคำสั่ง

    kinit <employee_id>@MEANET.MEA.OR.TH

    ตัวอย่างสำหรับพนักงานรหัส 2237007

    kinit 2237007@MEANET.MEA.OR.TH
  3. ใช้งาน HDFS Command Line Interface (CLI) ได้ตามปกติ ผู้ใช้งานสามารถศึกษา HDFS CLI เพิ่มเติมได้ที่นี่

    สิทธิการใช้งาน

    โดยปกติ ผู้ใช้งานจะสามารถใช้งาน HDFS ได้เฉพาะ Home Directory ของตัวเองเท่านั้น

    ตัวอย่างการ List files ใน root ไดเรกทอรี่

    hdfs dfs -ls /

    ตัวอย่างการสร้างไดเรกทอรี่

    hdfs dfs -mkdir /user/2237007/test_directory

    ตัวอย่างการอัพโหลดไฟล์จาก Local ไปยัง HDFS

    hdfs dfs -copyFromLocal myfile.csv /user/2237007

การใช้งานผ่าน REST API

ผู้ใช้งานสามารถใช้งาน HDFS ผ่านโปรแกรมที่สามารถเรียกใช้งาน REST API ได้ เช่น Command Prompt, Microsoft Terminal หรือ Postman โดยมี API URL อยู่ที่ https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/webhdfs/v1 ในคู่มือนี้จะแสดงวิธีการเรียกใช้งานผ่าน Command Prompt และ Postman

การใช้งานผ่าน Command Prompt

เปิดโปรแกรม Command Prompt และพิมพ์คำสั่ง

curl -i -u <employee_id> "https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/webhdfs/v1/<hdfs_path>?op=<operation>"

โดย

Parameterคำอธิบาย
employee_idรหัสพนักงาน
hdfs_pathHDFS Path ที่ต้องการใช้งาน เช่น /user/2237007
operationOperation ของ WebHDFS ตรวจสอบได้ที่นี่

ตัวอย่างการ List files ใน Directory /user/2237007

curl -i -u 2237007 "https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/webhdfs/v1/user/2237007?op=LISTSTATUS"

ตัวอย่างการสร้างไดเรกทอรี่ (MKDIRS)

curl -i -X PUT -u 2237007 "https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/webhdfs/v1/user/2237007/webhdfs_dir?op=MKDIRS"

ตัวอย่างการอัพโหลดไฟล์ (CREATE)

สร้าง CREATE Request ไปที่ API URL โดยไม่ต้องระบุชื่อไฟล์

curl -i -X PUT -u 2237007 "https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/webhdfs/v1/user/2237007/helloHDFS.txt?op=CREATE

Data Platform จะส่ง Output ที่เป็น URL สำหรับ Upload File ให้ดังรูป

HDFS Create

ทำการ PUT ไปที่ Location ตามรูปโดยระบุไฟล์ที่ต้องการ Upload

curl -i -X PUT -u 2237007 -T helloHDFS.txt "https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/webhdfs/data/v1/webhdfs/v1/user/2237007/helloHDFS.txt?_=AAAACAAAABAAAAEgCKk62kexdlWhdzgw4iQEcpPLMP3LBw27jI3kkKB9Mn2GCSBMscUslTgTR29MFfQPzkds96WIZKf86Qm4SGaYdux_i23WeLxmmzaCMUQRv-sUtPxrixA22D_XQpbPUJNA9ZVkWt3TjaWuxUnDmVVgWBVlXGCA8Y_QicVhlVEPvkGRUPhvdS_lIMA940HoUp8tQwNVEzaBYoLIMi9updiCMa8AwQYZ6EvOpz5XtagIP45tjXQNWAXs5opTDkGHkwlZf-sAlR8yikGk5DTXQK80AJo3EQdIDVSok0NOb5JmKp4cnosys-FvnQwYQO98ZtwmIdzP0YfP09_SQFXbjZgmdM5E8xo9HzAVAYAAflmLG1llgw1K3F68nFMUdorVytqsuNFHVpTotWh0U2bGK870n_zeS3Qs3Q9N"

ถ้าทำถูกต้อง API จะให้ Status Code 201 ตามรูป

HDFS Create

การใช้งานผ่านโปรแกรม Postman

ทำการสร้าง Request ใหม่และใส่ข้อมูลตามลำดับในรูป

  1. Method เลือกเป็น GET (ในกรณี op=LISTSTATUS)

  2. ใส่ API URL โดยมีโครงสร้างดังนี้

    https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/webhdfs/v1/<hdfs_path>?op=<operation>
    Parameterคำอธิบาย
    hdfs_pathHDFS Path ที่ต้องการใช้งาน เช่น /user/2237007
    operationOperation ของ WebHDFS ตรวจสอบได้ที่นี่
  1. คลิกที่ Authorization
  2. กรอก Username และ Password
  3. กดปุ่ม Send

HDFS Postman

การใช้งานผ่านภาษา Python

ก่อนการใช้งานให้ทำการติดตั้ง Module hdfs ด้วยคำสั่งด้านล่าง และ ตรวจสอบ Client API ได้ที่นี่

pip install hdfs

การสร้าง Client Connection

ทำการสร้าง Connection ไปที่ Data Platform URL: https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/ โดยให้ระบุ Authentication เป็น HTTPBasicAuth ตาม Code ตัวอย่างด้านล่าง

Username & Password

ผู้ใช้งานควรใช้ Environment Variables ในการเก็บข้อมูลที่เป็นความลับเช่น Username และ Password ไม่ควรจะพิมพ์เข้าไปใน Source Code

from hdfs.client import Client
from requests.auth import HTTPBasicAuth
import requests

WEBHDFS_URL = 'https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/'
session = requests.Session()
session.auth = HTTPBasicAuth("username", "password") # Change to your username & password here.

client = Client(WEBHDFS_URL, session=session)

List files

client.list('/user/2237007')

ตัวอย่าง Output

['.Trash', '.sparkStaging', 'Billing', 'code', 'oozie-oozi']

Check status

client.status('/user/2237007')

ตัวอย่าง Output

{'accessTime': 0,
'blockSize': 0,
'childrenNum': 8,
'fileId': 861789,
'group': 'supergroup',
'length': 0,
'modificationTime': 1658731635098,
'owner': '2237007',
'pathSuffix': '',
'permission': '755',
'replication': 0,
'storagePolicy': 0,
'type': 'DIRECTORY'}

Rename a file

เปลี่ยนชื่อไฟล์จาก /user/2237007/helloHDFS.txt ไปเป็น /user/2237007/helloPy.txt

client.rename('/user/2237007/helloHDFS.txt', '/user/2237007/helloPy.txt')

Read a file

อ่านไฟล์ชื่อ /user/2237007/helloPy.txt และพิมพ์ในแต่ละบรรทัด

with client.read('/user/2237007/helloPy.txt', encoding='utf-8', delimiter='\n') as reader:
for line in reader:
print(line)