1. 程式人生 > >分別用Shell和Python遍歷查詢Hdfs檔案路徑

分別用Shell和Python遍歷查詢Hdfs檔案路徑

1、使用Shell
/Users/nisj/PycharmProjects/BiDataProc/getOssFileForDemo/getHdfsFilePath.sh
#!/usr/bin/env bash

for file_path in `hadoop dfs -ls /tmp/oss_access/ | awk  -F ' '  '{print $8}' `
   do
     hadoop dfs -ls $file_path | awk  -F ' '  '{print $8}'
   done

2、使用Python
/Users/nisj/PycharmProjects/BiDataProc/getOssFileForDemo/getHdfsFilePath.py
# -*- coding=utf-8 -*-
import os
import re

for dir_path in os.popen("""hadoop dfs -ls /tmp/oss_access/ | awk  -F ' '  '{print $8}'""").readlines():
    dir_path = dir_path.strip()
    if len(dir_path) != 0:
        x_dir_path = dir_path.replace('/','#')
        output = open('txt_path:{x_dir_path}.txt'.format(x_dir_path=x_dir_path), 'w+')

        file_path_list = os.popen("""hadoop dfs -ls %s | awk  -F ' '  '{print $8}' """ % (dir_path)).readlines()
        output.writelines(file_path_list)
        # for file_path in file_path_list:
        #     file_path = re.split(' ', file_path.replace('\n', ''))
        #     print file_path[0]

        output.close()

3、說明
此處檔案路徑的遍歷,只考慮到了兩級目錄,且目錄結構相對統一規範。
Shell指令碼通過迴圈查詢及awk操作,將目錄路徑打印出來;而python指令碼是將上級目錄下的檔案路徑存放在一個檔案中,可供檢視(打印出來的情況,只程式碼註釋部分)。
遍歷Os檔案路徑及Oss上的檔案路徑的方式,應該與此相同;需要根據不同的訪問方式進行程式碼更改。