使用pyhdfs連接HDFS進行操作


一、pyhdfs.HdfsClient

pyhdfs.HdfsClient(hosts: Union[str, Iterable[str]] = 'localhost', 
randomize_hosts: bool = True,
user_name: Optional[str] = None,
timeout: float = 20, 
max_tries: int = 2, 
retry_delay: float = 5, 
requests_session: Optional[requests.sessions.Session] = None,
requests_kwargs: Optional[Dict[str, Any]] = None)

參數:

  • hosts(list 或str)– NameNode HTTP host:port字符串的列表,可以list是逗號分隔的字符串。如果未指定,則端口默認為50070。請注意,在Hadoop 3中,默認的NameNode HTTP端口已更改為9870。舊版本的默認值50070保持向后兼容。
  • randomize_hosts(bool)–默認情況下,隨機選擇主機。
  • user_name –以什么Hadoop用戶身份運行。默認為HADOOP_USER_NAME環境變量(如果存在),否則為getpass.getuser()。
  • timeout(float)–等待一個NameNode持續多長時間(以秒為單位)。在某些情況下,備用NameNode可能無響應(例如,加載fsimage或檢查點),因此我們不想對其進行阻止。
  • max_tries(int)–對每個NameNode重試請求的次數。如果NN1處於待機狀態,而NN2處於活動狀態,則我們可能首先聯系NN1,然后在聯系NN2時觀察到故障轉移到NN1。在這種情況下,我們要針對NN1重試。
  • retry_delay(float)–再次經歷NameNodes之前要等待的時間(以秒為單位)
  • requests_session –一個requests.Session高級用法的對象。如果不存在,則此類將使用默認請求行為,即每個HTTP請求進行新會話。呼叫者負責關閉會話。
  • request_kwargs – **kwargs傳遞給請求的附加項
    使用pyhdfs連接hdfs,需要注意連接時需要修改本機hosts文件中的IP地址與主機名的映射,不然會報錯。
    文件路徑:C:\WINDOWS\system32\drivers\etc 下的hosts文件中添加hadoop集群主機的映射關系
    例如 添加一下主機映射:
    192.168.160.100 hdp-100
import pyhdfs

fs = pyhdfs.HdfsClient(hosts="192.168.130.163,50070", user_name="root")  # 這兩種連接方式都可以
fs = pyhdfs.HdfsClient(hosts="192.168.130.163,9000", user_name="root")

二、返回用戶的根目錄

print(fs.get_home_directory())
>> /user/root

三、返回可用的namenode節點

print(fs.get_active_namenode())
>> 192.168.160.100:50070

四、返回指定目錄下的所有文件

print(fs.listdir("/"))  # 目錄下的文件夾
>> ['image', 'mp4', 'tmp']

五、從本地上傳文件至集群、從集群上copy到本地

fs.copy_to_local("D:\PYTHNON/hadoop/3.mp4", '/mp4/3.mp4')  # 從hadoop下載到本地
fs.copy_from_local("D:\PYTHNON/hadoop/3.mp4", '/mp4/3.mp4')  # 從本地上傳到hadoop上

六、判斷目錄、文件是否存在

fs.exists('/mp4')  # 存在返回True,不存在返回False
print(fs.exists("/mp4/3.mp4"))  # 文件是否存,在存在返回True,不存在返回False

七、返回目錄下的所有目錄,路徑,文件名

print(list(fs.walk('/mp4')))
>> [('/mp4', [], ['3.mp4'])]

八、刪除目錄、文件

fs.delete("/mp4", recursive=True)  # 刪除目錄  recursive=True
fs.delete("/mp4/3.mp4  ")  # 刪除文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM