hadoop集羣搭建

4. 集羣搭建

4.1 HADOOP集羣搭建

4.1.1集羣簡介

HADOOP集羣具體來說包含兩個集羣:HDFS集羣和YARN集羣,兩者邏輯上分離,但物理上常在一起

HDFS集羣:

負責海量數據的存儲,集羣中的角色主要有 NameNode / DataNode

YARN集羣:

負責海量數據運算時的資源調度,集羣中的角色主要有 ResourceManager /NodeManager

(mapreduce是什麼呢?它其實是一個應用程序開發包)

 

本集羣搭建案例,以5節點爲例進行搭建,角色分配如下:

hdp-node-01    NameNode  SecondaryNameNode

hdp-node-02    ResourceManager

hdp-node-03 DataNode    NodeManager

hdp-node-04 DataNode    NodeManager

hdp-node-05 DataNode    NodeManager

部署圖如下:

 

4.1.2服務器準備

本案例使用虛擬機服務器來搭建HADOOP集羣,所用軟件及版本:

ü Vmware 11.0

ü Centos  6.5  64bit

 

4.1.3網絡環境準備

ü 採用NAT方式聯網

ü 網關地址:192.168.33.1

ü 3個服務器節點IP地址:192.168.33.101192.168.33.102192.168.33.103

ü 子網掩碼:255.255.255.0

4.1.4服務器系統設置

ü 添加HADOOP用戶

ü HADOOP用戶分配sudoer權限

ü 同步時間

ü 設置主機名

n hdp-node-01

n hdp-node-02

n hdp-node-03

ü 配置內網域名映射:

n 192.168.33.101          hdp-node-01

n 192.168.33.102          hdp-node-02

n 192.168.33.103          hdp-node-03

ü 配置ssh免密登陸

ü 配置防火牆

 

4.1.5 Jdk環境安裝

ü 上傳jdk安裝包

ü 規劃安裝目錄  /home/hadoop/apps/jdk_1.7.65

ü 解壓安裝包

ü 配置環境變量 /etc/profile


4.1.6 HADOOP安裝部署

補充: HADOOP的版本選擇

1APACHE官方版本

      大版本:  0.20.2

                1.x

                2.x       2.6.4   2.7.3

2、商業發行版(商業版提供完善的管理系統、修bug可能領先於官方):

       Cloudera公司的CDH5.7.x

ü 上傳HADOOP安裝包

ü 規劃安裝目錄  /root/apps/hadoop-2.6.1

ü 解壓安裝包

ü 修改配置文件  $HADOOP_HOME/etc/hadoop/

最簡化配置如下:

vi  hadoop-env.sh

# The java implementation to use.

export JAVA_HOME=/home/hadoop/apps/jdk1.7.0_51


vi  core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://hdp-node-01:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/HADOOP/apps/hadoop-2.6.1/tmp</value>

</property>

</configuration>

vi  hdfs-site.xml

<configuration>

<property>

<name>dfs.namenode.name.dir</name>

<value>/home/hadoop/data/name,/path2/,/path3/,nfs://</value>

</property>

<!---namenode配置多個目錄和datanode配置多個目錄,有什麼區別?---->

<property>

<name>dfs.datanode.data.dir</name>

<value>/home/hadoop/data/data,/path2/</value>

</property>

 

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

 

<property>

<name>dfs.secondary.http.address</name>

<value>hdp-node-01:50090</value>

</property>

</configuration>


vi  mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

 

vi  yarn-site.xml

<configuration>

<property>

<name>yarn.resourcemanager.hostname</name>

<value>hadoop01</value>

</property>

 

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

 

vi  salves

hdp-node-01

hdp-node-02

hdp-node-03


4.1.7 啓動集羣

初始化HDFS

bin/hadoop  namenode  -format


啓動
HDFS

sbin/start-dfs.sh


啓動
YARN

sbin/start-yarn.sh

4.1.8 測試

1、上傳文件到HDFS

從本地上傳一個文本文件到hdfs/wordcount/input目錄下

[HADOOP@hdp-node-01 ~]$ HADOOP fs -mkdir -p /wordcount/input

[HADOOP@hdp-node-01 ~]$ HADOOP fs -put /home/HADOOP/somewords.txt  /wordcount/input


2、運行一個mapreduce程序

HADOOP安裝目錄下,運行一個示例mr程序

cd $HADOOP_HOME/share/hadoop/mapreduce/

hadoop jar mapredcue-example-2.6.1.jar wordcount /wordcount/input  /wordcount/output


5 集羣使用初步

5.1 HDFS使用

1、查看集羣狀態

命令:   hdfs  dfsadmin  –report

 

可以看出,集羣共有3datanode可用

也可打開web控制檯查看HDFS集羣信息,在瀏覽器打開http://hdp-node-01:50070/

2、上傳文件到HDFS

² 查看HDFS中的目錄信息

命令   hadoop  fs  –ls  /

² 上傳文件

命令:   hadoop  fs  -put  ./ scala-2.10.6.tgz  to  /


² HDFS下載文件

命令:  hadoop  fs  -get  /yarn-site.xml

5.2 MAPREDUCE使用

mapreducehadoop中的分佈式運算編程框架,只要按照其編程規範,只需要編寫少量的業務邏輯代碼即可實現一個強大的海量數據併發處理程序

5.2.1 Demo開發——wordcount

1、需求

從大量(比如T級別)文本文件中,統計出每一個單詞出現的總次數

 

2mapreduce實現思路

Map階段:

a) HDFS的源數據文件中逐行讀取數據

b) 將每一行數據切分出單詞

c) 爲每一個單詞構造一個鍵值對(單詞,1)

d) 將鍵值對發送給reduce

 

Reduce階段

a) 接收map階段輸出的單詞鍵值對

b) 將相同單詞的鍵值對匯聚成一組

c) 對每一組,遍歷組中的所有“值”,累加求和,即得到每一個單詞的總次數

d) (單詞,總次數)輸出到HDFS的文件中

 

 

1、 具體編碼實現

(1)定義一個mapper

//首先要定義四個泛型的類型

//keyin:  LongWritable    valuein: Text

//keyout: Text            valueout:IntWritable

 

public class WordCountMapper extends Mapper<LongWritable, Text, Text, 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, Iterable<IntWritable> values, 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 {

//把業務邏輯相關的信息(哪個是mapper,哪個是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.setMapperClass(WordCountMapper.class);

wcjob.setReducerClass(WordCountReducer.class);

//設置我們的業務邏輯Mapper類的輸出keyvalue的數據類型

wcjob.setMapOutputKeyClass(Text.class);

wcjob.setMapOutputValueClass(IntWritable.class);

//設置我們的業務邏輯Reducer類的輸出keyvalue的數據類型

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);

}


5.2.2 程序打包運行

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

hadoop  fs  –put  /home/hadoop/words.txt  /wordcount/input

 

 

3. 將程序jar包上傳到集羣的任意一臺服務器上

 

4. 使用命令啓動執行wordcount程序jar

$ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver /wordcount/input /wordcount/out

 

5. 查看執行結果

$ hadoop fs –cat /wordcount/out/part-r-00000

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章