實際場景中,我們經常需要通過ftp協議把不同資料來源的檔案統一匯入到hdfs資料中心,經過實踐,有以下的三種方法,分別列出其優缺點及適用場景。
hdfs上傳命名
hdfs
dfs –put
[local_path]
[hdfs_path]
優點:檔案在本地可以進行本地化的一系列操作後,再放回hdfs中
缺點:檔案傳輸經過兩層,並且從源伺服器到本地提取是單機序列,比較消耗時間。
適用於檔案放入hfds前需要預處理的情景,如:.zip壓縮檔案不被hadoop支援的,所以我們可以先在本地轉壓縮方式然後再放入hdfs中。
mget_ftp()
2)wget
mget_using_wget()
這種方法會在本地建立乙個和ftp伺服器相同的目錄結構
或者自定目錄
wget --ftp-user=$user --ftp-password=$password ftp://$host/$remote_dir/$file -o $local_dir/$file
wget的速度相對於lftp和ftp快很多。
3)lftp
需要安裝lftp
獲取遠端ftp上的列表
lftp -e
'ls;quit' sftp://$user:$password@$host/$remote_dir|sed '1,2d'|awk '' > $remote_list
lftp sftp://$user:$password@$host
-e"get $remote_dir/$file -o $local_dir; bye"
del_file_from_ftp
()mdel_ftp
()'`
do del_file_from_ftp $file
$remote_dir
done
}//設定ssh互信登入
mdel_ftp_using_ssh
()'`
do ssh -t $user@$ip
"rm $remote_dir/$file"
done
}
3.上傳到hdfs
upload_data_to_hdfs
()'`
doecho
"upload $file to $des_hdfs_dir"
$hdfs_exe dfs -put $upload_dir/$file
$des_hdfs_dir
done
}
hdfs dfs –cp [ftp://username:password@hostname/ftp_path] [hdfs:///hdfs_path]
優點:簡單,提取速度快
缺點:cli執行不會顯示進度
適用場景:適用於小檔案的ftp拷貝。
這種方法沒有實際使用過。
hadoop distcp [ftp://username:password@hostname/ftp_path] [hdfs:///hdfs_path]
優點:簡單,能顯示拷貝進度,並且是分布式提取的,資料比較快。
缺點: 如果拷貝的檔案是不斷有其他程式寫入,會報錯,因為該命令最後要對資料進行checksum導致兩邊不一致,當然,該命令是主要用於集群間拷貝的。
適用場景:大量檔案或大檔案的拷貝。
ftp提取檔案到hdfs
實際場景中,我們經常需要通過ftp協議把不同資料來源的檔案統一匯入到hdfs資料中心,經過實踐,有以下的三種方法,分別列出其優缺點及適用場景。1 先把檔案ftp到本地,然後用命令hdfsdfs put local path hdfs path 優點 檔案在本地可以進行本地化的一系列操作後,再放回hd...
上傳檔案到HDFS
hadoop計算需要在hdfs檔案系統上進行,檔案上傳到hdfs上通常有三種方法 a hadoop自帶的dfs服務,put b hadoop的api,writer物件可以實現這一功能 c 呼叫otl可執行程式,資料從資料庫直接進入hadoop hadoop計算需要在hdfs檔案系統上進行,因此每次計...
上傳檔案到HDFS方式
hadoop計算需要在hdfs檔案系統上進行,因此每次計算之前必須把需要用到的檔案 我們稱為原始檔案 都上傳到hdfs上。檔案上傳到hdfs上通常有三種方法 1 hadoop自帶的dfs服務,put 2 hadoop的api,writer物件可以實現這一功能 3 呼叫otl可執行程式,資料從資料庫直...