1. 程式人生 > >2.如何使用python連線hdfs

2.如何使用python連線hdfs

總所周知,python是一門很強大的語言,主要在於它有著豐富的第三方模組,當然連線hdfs的模組也不例外。

在python中有一個模組也叫hdfs,可以使用它連線hadoop的hdfs。直接pip install hdfs即可。我們使用python的hdfs可以達到和hadoop shell一樣的效果

import hdfs
# 1.如何連線hadoop上的hdfs
'''
引數:
def __init__(self, url, root=None, proxy=None, timeout=None, session=None):
    url:這裡的url就是我們在瀏覽器檢視hdfs時的連線,也就是ip:埠
    root:指定hdfs的根目錄
    proxy:指定使用者的登入身份
    timeout:設定的超時時間
    session:requests模組裡面的session類的例項,用來發出請求
'''
client = hdfs.Client("http://ubuntu:50070")

# 2.檢視路徑的具體資訊
'''
引數:
def status(self, hdfs_path, strict=True):
    hdfs_path:路徑,這裡我們指定/,也就是根目錄
    strict:嚴格模式,預設為True,表示路徑不存在就會丟擲異常,為False路徑不存在則返回None
'''
client.status(hdfs_path="/")

# 3.檢視指定目錄裡的檔案或目錄
'''
引數:
def list(self, hdfs_path, status=False):
    hdfs_path:路徑
    status:預設為False,如果為True,則不僅顯示有哪些檔案或目錄,還顯示具體的資訊
'''
client.list("/")

# 4.建立目錄
'''
引數:
def makedirs(self, hdfs_path, permission=None):
    hdfs_path:建立的目錄,值得一提的是,這個是可以遞迴建立的
    permission:設定許可權,比如777,可讀可寫可執行    
'''
client.makedirs("/古明地覺/hello.txt")

# 5.重新命名
'''
引數:
def rename(self, hdfs_src_path, hdfs_dst_path):
    hdfs_src_path:原始檔
    hdfs_dst_path:新檔案
'''
client.rename("/古明地覺/hello.txt", "/古明地覺/hello_satori.txt")

# 6.刪除
'''
引數:
def delete(self, hdfs_path, recursive=False):
    hdfs_path:路徑
    recursive:表示是否遞迴,預設為False
'''
client.delete("/古明地覺/hello_satori.txt", recursive=True)

# 7.上傳檔案
'''
引數:
def upload(self, hdfs_path, local_path, overwrite=False, n_threads=1,
    temp_dir=None, chunk_size=2 ** 16, progress=None, cleanup=True, **kwargs):
    hdfs_path:hdfs路徑
    local_path:本地檔案路徑,仔細一看這和hdfs dfs -put 本地 hdfs,剛好是相反的。表示從本地上傳檔案到hdfs
    overwrite:就是遇見同名的,是否覆蓋
    n_threads:啟動的執行緒數
    temp_dir:當overwrite=true時,遠端檔案一旦存在,則會在上傳完之後進行交換
    chunk_size:檔案上傳的大小區間
    progress:回撥函式來跟蹤進度,為每一chunk_size位元組。它將傳遞兩個引數,檔案上傳的路徑和傳輸的位元組數。一旦完成,-1將作為第二個引數
    cleanup:如果在上傳任何檔案時發生錯誤,則刪除該檔案
'''
client.upload("/", "/home/satori/Desktop/diary")


# 8.下載檔案
'''
引數:
def download(self, hdfs_path, local_path, overwrite=False, n_threads=1,
    temp_dir=None, **kwargs):
    hdfs_path:hdfs檔案路徑
    local_path:本地檔案路徑,表示從hdfs下載檔案到本地
'''
client.download("/hello.txt", "/home/satori/Desktop/hello.txt")

  

 

 

 但當我們想建立檔案的時候,卻出現瞭如下錯誤

不要怕,這個只需要修改一下配置檔案core-site.xml即可。

然後重啟hadoop叢集