1、檢視集群狀態
命令: hdfs dfsadmin –report
可以看出,集群共有3個
datanode可用
也可開啟web控制台檢視
hdfs
集群資訊,在瀏覽器開啟
2、上傳檔案到
hdfs
² 檢視hdfs中的目錄資訊
命令: hadoop fs –ls /
² 上傳檔案
命令: hadoop fs -put ./ scala-2.10.6.tgz to /
命令: hadoop fs -get /yarn-site.xml
mapreduce是
hadoop
中的分布式運算程式設計框架,只要按照其程式設計規範,只需要編寫少量的業務邏輯**即可實現乙個強大的海量資料併發處理程式
1、需求
從大量(比如t級別)文字檔案中,統計出每乙個單詞出現的總次數
2、mapreduce
實現思路
map階段:
a) 從hdfs的源資料檔案中逐行讀取資料
b) 將每一行資料切分出單詞
c) 為每乙個單詞構造乙個鍵值對(單詞,1)
d) 將鍵值對傳送給reduce
reduce階段:
a) 接收map階段輸出的單詞鍵值對
b) 將相同單詞的鍵值對匯聚成一組
c) 對每一組,遍歷組中的所有「值」,累加求和,即得到每乙個單詞的總次數
d) 將(單詞,總次數
)輸出到
hdfs
的檔案中
1、 具體編碼實現
(1)定義乙個類
//首先要定義四個泛型的型別
//keyin: longwritable valuein: text
//keyout: text valueout:intwritable
//map方法的生命週期: 框架每傳一行資料就被呼叫一次
//key : 這一行的起始點在檔案中的偏移量
//value: 這一行的內容
@override
protected void map(longwritable key, text value, context context) throws ioexception, interruptedexception {
//拿到一行資料轉換為
string
string line = value.tostring();
//將這一行切分出各個單詞
string words = line.split(" ");
//遍歷陣列,輸出
<
單詞,1>
for(string word:words){
context.write(new text(word), new intwritable(1));
(2)定義乙個
reducer類
//生命週期:框架每傳遞進來乙個
kv 組,
reduce
方法被呼叫一次
@override
protected void reduce(text key, iterablevalues, context context) throws ioexception, interruptedexception {
//定義乙個計數器
int count = 0;
//遍歷這一組
kv的所有
v,累加到
count
中 for(intwritable value:values){
count += value.get();
context.write(key, new intwritable(count));
(3)定義乙個主類,用來描述
job並提交
job
public class wordcountrunner {
//把業務邏輯相關的資訊(哪個是
,哪個是
reducer
,要處理的資料在**,輸出的結果放**。。。。。。)描述成乙個
job物件
//把這個描述好的
job提交給集群去執行
public static void main(string args) throws exception {
configuration conf = new configuration();
job wcjob = job.getinstance(conf);
//指定我這個
job所在的
jar包
// wcjob.setjar("/home/hadoop/wordcount.jar");
wcjob.setjarbyclass(wordcountrunner.class);
wcjob.setreducerclass(wordcountreducer.class);
//設定我們的業務邏輯
類的輸出
key和
value
的資料型別
wcjob.setmapoutputkeyclass(text.class);
wcjob.setmapoutputvalueclass(intwritable.class);
//設定我們的業務邏輯
reducer
類的輸出
key和
value
的資料型別
wcjob.setoutputkeyclass(text.class);
wcjob.setoutputvalueclass(intwritable.class);
//指定要處理的資料所在的位置
fileinputformat.setinputpaths(wcjob, "hdfs://hdp-server01:9000/wordcount/data/big.txt");
//指定處理完成之後的結果所儲存的位置
fileoutputformat.setoutputpath(wcjob, new path("hdfs://hdp-server01:9000/wordcount/output/"));
//向yarn
集群提交這個
job boolean res = wcjob.waitforcompletion(true);
system.exit(res?0:1);
1. 將程式打包
2. 準備輸入資料
vi /home/hadoop/test.txt
hello tom
hello jim
hello ketty
hello world
ketty tom
在hdfs上建立輸入資料資料夾:
hadoop fs mkdir -p /wordcount/input
將words.txt上傳到
hdfs上
3. 將程式jar包上傳到集群的任意一台伺服器上
4. 使用命令啟動執行wordcount程式
jar包
5. 檢視執行結果
集群使用初步
5 集群使用初步1 檢視集群狀態 命令 hdfs dfsadmin report 可以看出,集群共有3個 datanode可用 也可開啟web控制台檢視 hdfs 集群資訊,在瀏覽器開啟 2 上傳檔案到 hdfs 檢視hdfs中的目錄資訊 命令 上傳檔案 命令 hadoop fs put scala...
集群使用初步
5 集群使用初步1 檢視集群狀態 命令 hdfs dfsadmin report 可以看出,集群共有3個 datanode可用 也可開啟web控制台檢視 hdfs 集群資訊,在瀏覽器開啟 2 上傳檔案到 hdfs 檢視hdfs中的目錄資訊 命令 hadoop fs ls 上傳檔案 命令 hadoop...
08 Hadoop集群初步使用
1.hdfs使用 1 檢視集群狀態,命令 hdfs dfsadmin report 可以看出,集群共有3個datanode可用 也可開啟web控制台檢視hdfs集群資訊,在瀏覽器開啟http hdp node 01 50070 2 上傳檔案到hdfs 檢視hdfs中的目錄資訊,命令 hadoop f...