การใช้งาน HDFS
ผู้ใช้งานสามารถใช้งาน HDFS ของ Data Platform ได้ 4 วิธี
- ใช้งานผ่าน Cloudera Hue
- ใช้งานผ่าน Data Platform Shell
- ใช้งานผ่าน REST API
- ใช้งานผ่าน Python API
แต่ละวิธีมีข้อดีและข้อเสียของตัวเอง ผู้ใช้งานสามารถเลือกใช้ได้ตามความเหมาะสมของงาน
การใช้งานผ่าน Cloudera Hue
ผู้ใช้งานสามารถศึกษาวิธีการเข้าใช้งาน HDFS ผ่าน Cloudera Hue ได้ที่คู่มือการใช้งาน Hue
การใช้งานผ่าน Data Platform Shell
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
ทำการขอ Ticket จากระบบความปลอดภัย Kerberos ด้วยคำสั่ง
kinit <employee_id>@MEANET.MEA.OR.TH
ตัวอย่างสำหรับพนักงานรหัส
2237007
kinit 2237007@MEANET.MEA.OR.TH
ใช้งาน 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_path | HDFS Path ที่ต้องการใช้งาน เช่น /user/2237007 |
operation | Operation ของ 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 ให้ดังรูป
ทำการ 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 ตามรูป
การใช้งานผ่านโปรแกรม Postman
ทำการสร้าง Request ใหม่และใส่ข้อมูลตามลำดับในรูป
Method เลือกเป็น
GET
(ในกรณีop=LISTSTATUS
)ใส่ API URL โดยมีโครงสร้างดังนี้
https://dpc-cdr-u2.mea.or.th:8443/gateway/cdp-proxy-api/webhdfs/v1/<hdfs_path>?op=<operation>
Parameter คำอธิบาย hdfs_path
HDFS Path ที่ต้องการใช้งาน เช่น /user/2237007
operation
Operation ของ WebHDFS ตรวจสอบได้ที่นี่
- คลิกที่ Authorization
- กรอก Username และ Password
- กดปุ่ม Send
การใช้งานผ่านภาษา 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)