實驗五 Java API分布式存盤
- 第1關: 利用shell把電商資料上傳到HDFS
- 任務描述
- 相關知識
- HDFS shell常見命令
- 編程要求
- 測驗說明
- 代碼實作
- 第2關:利用Java API把電商資料上傳到HDFS
- 任務描述
- 相關知識
- 常用 HDFS Java介面的使用
- 編程要求
- 測驗說明
- 代碼實作
第1關: 利用shell把電商資料上傳到HDFS
任務描述
原始電商資料都是存盤在關系型資料庫或 NoSQL 資料庫上的,是面向OLTP(聯機事務處理程序)的;資料都是面向業務的,而不是面向分析,因此資料比較復雜,表很多關聯的資料是分散的,不利于統計分析;因此需要把資料從多個表里匯出來、聯合起來,找出分析所需要的資料項,然后把這些資料存入到 HDFS 中,
另一方面,因為資料量很大,可能上百 GB 甚至 TB,這些資料超過了單臺服務器的記憶體容量甚至硬碟容量,而且如果都存到一臺服務器上,那么讀寫起來花費時間也是很長的,如果把資料分攤到多個服務器上,那么原本的讀寫時間就能減倍,HDFS 就能做到這一點,
HDFS 是 Hadoop 中的分布式檔案系統,可以高效的利用多臺(數百、數千都可以)服務器的存盤能力,因此把電商資料存盤到 HDFS 中,可以借助強大的 Hadoop 來管理、分析海量的電商資料,以挖掘最大的潛在商業價值,
本關任務:使用 HDFS shell 命令把電商資料從本地上傳到 HDFS 中,
相關知識
為了完成本關任務,你需要掌握:HDFS shell常見命令:
HDFS shell常見命令
如果你熟悉 linux 命令,你會發現 HDFS shell 命令類似 linux 的shell命令,在終端直接輸入命令列來管理HDFS中的檔案、檔案夾,常用的HDFS命令如下:
hdfs dfs -ls / 查看目錄/下的檔案和檔案夾;
hdfs dfs -mkdir /images 創建新檔案夾/images;
hdfs dfs -rmdir /images 洗掉檔案夾/images;
hdfs dfs -rm /citys.csv 洗掉檔案citys.csv;
hdfs dfs -put data02.csv /dataset 上傳本地檔案data02.csv到HDFS的檔案夾/dataset內;
hdfs dfs -copyFromLocal data02.csv /dataset 上傳本地檔案data02.csv到HDFS的檔案夾/dataset內;
hdfs dfs -get /dataset/data02.csv data02_v2.csv 拷貝HDFS的/dataset/data02.csv到本地檔案data02_v2.csv;
hdfs dfs -copyToLocal /dataset/data02.csv data02_v2.csv 拷貝HDFS的/dataset/data02.csv到本地檔案data02_v2.csv;
hdfs dfs -cp /user/userinfo.txt /data/userinfo.txt 拷貝HDFS的資料檔案/user/userinfo.txt到/data/userinfo.txt;
hdfs dfs -mv /user/userinfo.txt /data/userinfo.txt 移動HDFS的資料檔案/user/userinfo.txt到/data/userinfo.txt;
hdfs dfs -text /itemsinfo.csv 以文本格式輸出/itemsinfo.csv檔案;
hdfs dfs -tail /itemsinfo.csv 以文本格式輸出/itemsinfo.csv檔案,但是只顯示末尾1KB大小的資料,
編程要求
本關不需要撰寫 Java 代碼,直接在命令列完成關卡,根據任務提示,啟動 hadoop, 把資料檔案上傳到 HDFS 中,
- 使用
start-all.sh或start-dfs.sh啟動 hadoop 或 hdfs; - 把
/data/workspace/···/dataset/user_behavior.csv檔案拷貝到/root目錄內(…里面的都是單檔案夾,可以用tab建自動補全); - 在HDFS中創建一個新檔案夾
/dataset; - 把
user_behavior.csv檔案上傳到剛創建的檔案夾中; - 列印檔案內容,以檢測檔案是否上傳成功,(檔案比較大,可使用
hdfs dfs -cat /yourpath | tail -10只顯示末尾10行資料,減少輸出量)
測驗說明
平臺會查看你剛上傳的檔案路徑是否正確,并核對檔案最后 10 行資料是否一致,如果一致則通過,
代碼實作
//一行一步
start-all.sh
cp /data/workspace/myshixun/dataset/user_behavior.csv /root/
hdfs dfs -mkdir /dataset
hdfs dfs -put user_behavior.csv /dataset
第2關:利用Java API把電商資料上傳到HDFS
任務描述
目的與第一關一致,部分任務描述可參考第一關,有時候,我們并不想直接用 HDFS 命令來上傳輸入,比如當上傳的檔案很多、檔案名很長的時候,一次又一次的打 HDFS 命令很慢也可能會出錯,這時候可以使用 Java API 的方式,HDFS Java API 是 HDFS 提供的可供 Java 程式呼叫的介面,類似 JDBC,本關卡將通過 Java 編程的方式來向 HDFS 上傳資料檔案,
本關任務:使用 HDFS Java API 命令把電商資料user_behavior.csv從本地上傳到 HDFS 中,
相關知識
為了完成本關任務,你需要掌握:常用 HDFS Java介面的使用,
常用 HDFS Java介面的使用
1、獲得 HDFS 的 FileSystem 實體,該實體是操作 HDFS 的主要入口;
Configuration configuration = new Configuration();
fileSystem fs = FileSystem.get(configuration);
2、FileSystem物件的常用方法
- 用法舉例,使用FileSystem物件的mkdir(Path filePath)方法創建一個新 HDFS 檔案目錄代碼如下:
// 創建新目錄 "/newPath"
Path newPath = new Path("/newPath");
fs.mkdir(newPath);
- 其他方法用法相似,常用方法介紹:
void mkdir(Path filePath) 創建一個新目錄;
boolean exists(Path filePath) 判斷檔案是否存在;
FSDataInputStream open(Path filePath) 讀取檔案;
boolean rename(Path oldPath, Path newPath) 重命名檔案;
boolean delete(Path filePath, boolean isRecursion) 洗掉一個目錄或檔案,第二個引數如果為 true 則遞回洗掉一個目錄所有內容;
void copyFromLocalFile(Path src, Path dst) 把本地路徑的檔案拷貝到HDFS指定路徑中;
void copyToLocalFile(Path src, Path dst) 把 HDFS 上的檔案拷貝到 本地路徑中,
編程要求
根據提示,在右側編輯器補充代碼,把本地資料檔案上傳到 HDFS 中,
1、所使用的本地資料檔案路徑為/root/user_behavior.csv;
2、上傳至 HDFS 的目錄路徑為 /dataset,
測驗說明
平臺會對你撰寫的代碼進行測驗:
- 核對資料檔案是否成功上傳至HDFS;
- 且資料檔案末尾10行資料是否符合預期,
代碼實作
//什么都不需要輸,“點測評”,但前提是第一關沒有出現任何錯誤!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/350853.html
標籤:其他
上一篇:HDFS常用Shell命令
下一篇:資料湖構建與計算
