【Linux】搭建Hadoop集羣

一、簡述Hadoop

Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。

Hadoop的框架最核心的設計: HDFS 和mapreduce
HDFS: 爲海量數據提供存儲
MapReduce: 爲海量數據提供了計算

分佈式計算角色

主節點: 作業節點(jobtracker)
從節點: 任務節點(tasktracker)

在任務節點當中,運行第一階段的代碼稱爲map任務(map task ) ,運行第二階段代碼稱爲 reduce任務(reduce task)

名詞解釋:

1) hadoop : apache 開源的分佈式框架
2) HDFS: hadoop的分佈式文件系統
3) NameNode: Hadoop HDFS 元數據主節點服務器,負責保存datenode文件存儲元數據信息,這個服務器時單點的。
4) jobtracker : hadoop的map/reduce調度器,負責與任務節點通信分配計算任何並跟蹤任務進度,這個服務器也是單點的。
5) DataNode : Hadoop的數據節點,負責存儲數據
6) tasktracker: hadoop的調度程度,負責map和reduce的任務的啓動和執行

準備環境

在這裏插入圖片描述在這裏插入圖片描述
1、三臺服務器(本次實戰用的是Centos6,這裏用的xshell連接虛擬機工具)
配置IP | 關閉IPtables | 關閉selinux | 配置hosts

2、更改了主節點的主機名 爲zss-1  後兩臺從節點主機名爲zss-2 與 zss-3 爲了便於實驗
[root@ zss-1  ~]# cat /etc/sysconfig/network  #主的
NETWORKING=yes
HOSTNAME=zss-1

可以重啓生效

3、配置主節點的hosts
[root@ zss-1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.33  zss-1
10.0.0.11  zss-2
10.0.0.20  zss-3

二、設置namenode能夠無密鑰登錄另外兩臺服務器
1)免祕鑰登陸

[root@ zss-1 ~]# ssh-keygen    #一直回車就行
[root@ zss-1 ~]# ssh-copy-id root@10.0.0.11 #輸入yes 後輸入對方主機密碼
[root@ zss-1 ~]# ssh-copy-id root@10.0.0.20
[root@ zss-1 ~]#  ssh 10.0.0.20 #測試能否登陸成功

2)三臺都要安裝安裝jdk,另外兩個節點(10.0.0.11;10.0.0.20)

[root@ zss-1 ~]# rpm -ivh jdk-8u131-linux-x64_.rpm  
[root@ zss-1 ~]#java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

/查看java的安裝目錄
rpm -pql /root/jdk-8u131-linux-x64_.rpm

3)三臺服務器上都要創建普通用戶,hadoop,配置密碼: 123456

[root@ zss-1~]# useradd -u 8000 hadoop ; echo 123456 | passwd --stdin hadoop
更改用戶 hadoop 的密碼 。
passwd: 所有的身份驗證令牌已經成功更新。

4)安裝namenode
Hadoop 安裝目錄:/home/hadoop/hadoop-3.13
使用 root 帳號將 hadoop-3.1.3.tar.gz 上傳到服務器,並且放到/home/hadoop下
(可以使用rz命令,或其他工具上傳)

[root@ zss-1 hadoop]# su - hadoop
[hadoop@ zss-1 ~]$ whoami
hadoop

創建dfs和tmp
mkdir -p /home/hadoop/dfs/name /home/hadoop/dfs/data /home/hadoop/tmp
[hadoop@ zss-1 ~]$ ls
dfs   tmp
[hadoop@ zss-1 ~]$ 

5)上傳壓縮包解壓並查看

[hadoop@ zss-1 ~]$ ls
dfs   hadoop-3.1.3.tar.gz  tmp
[hadoop@ zss-1 ~]$ tar xvf hadoop-3.1.3.tar.gz 
[hadoop@ zss-1 ~]$ cd hadoop-3.1.3
[hadoop@ zss-1 hadoop-3.1.3]$ ll
total 204
drwxr-xr-x 2 hadoop hadoop   4096 2019-09-12 12:46 bin
drwxr-xr-x 3 hadoop hadoop   4096 2019-09-12 10:51 etc
drwxr-xr-x 2 hadoop hadoop   4096 2019-09-12 12:46 include
drwxr-xr-x 3 hadoop hadoop   4096 2019-09-12 12:46 lib
drwxr-xr-x 4 hadoop hadoop   4096 2019-09-12 12:46 libexec
-rw-rw-r-- 1 hadoop hadoop 147145 2019-09-04 17:31 LICENSE.txt
drwxrwxr-x 3 hadoop hadoop   4096 2020-03-04 16:52 logs
-rw-rw-r-- 1 hadoop hadoop  21867 2019-09-04 17:31 NOTICE.txt
-rw-rw-r-- 1 hadoop hadoop   1366 2019-09-04 17:31 README.txt
drwxr-xr-x 3 hadoop hadoop   4096 2019-09-12 10:51 sbin
drwxr-xr-x 4 hadoop hadoop   4096 2019-09-12 13:08 share

[hadoop@ zss-1 hadoop-3.1.3]$ pwd
/home/hadoop/hadoop-3.1.3
[hadoop@ zss-1 hadoop-3.1.3]$ cd etc/hadoop/
[hadoop@ zss-1 hadoop]$ ls
hadoop-env.sh  /java的環境變量
yarn-env.sh  /制定yarn框架的Java運行環境
slaves  /指定datanode數據存儲服務器
core-site.xml     / hadoop-web界面路徑
hdfs-site.xml   /文件系統的配置文件
mapred-site.xml /mapreducer 任務配置文件
yarn-site.xml  /yarn框架配置,主要一些任務的啓動位置

[hadoop@ zss-1 hadoop-3.1.3]$ 

修改配置文件

第一個:

[hadoop@ zss-1 hadoop]$ pwd 
/home/hadoop/hadoop-3.1.3/etc/hadoop

[hadoop@ zss-1 hadoop]$ vim hadoop-env.sh  //添加
 38 exprot JAVA_HOME=/usr/java/jdk1.8.0_13

第二個:

[hadoop@ zss-1 hadoop]$ vim yarn-env.sh  //添加
 27 JAVA_HOME=/usr/java/jdk1.8.0_131

第三個:

[hadoop@ zss-1 hadoop]$ vim slaves //編輯一個slaves 添加兩個從節點主機名
zss-2
zss-3

第四個:

下面打開的是hadoop的核心配置,這裏需要配置兩屬性。
fs.default.name 配置hadoop的HDFS系統命令,位置爲主機的9000端口
hadoop.tmp.dir 配置haddop的tmp目錄的根位置

[hadoop@ zss-1 hadoop]$ vim core-site.xml  //在<configuration>中添加
<configuration>
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://zss-1:9000</value>
</property>

<property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
</property>


<property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/hadoop/tmp</value>
        <description>Abase for other tmporary directries.</description>
</property>

第五個:

下面打開的是HDFS主要的配置文件
dfs.http.address配置了hdfs的http的訪問位置;
dfs.replication 配置文件的副本,一般不大於從機個數;

[hadoop@ zss-1 hadoop]$ vim hdfs-site.xml  //在<configuration>中添加

<configuration>
<property>
	<name>dfs.namenode.secondary.http-address</name>
	<value>zss-1:9000</value>
</property>

<property>
	<name>dfs.namenode.name.dir</name>
	<value>file:/home/hadoop/dfs/name</value>
</property>

<property>
	<name>dfs.datanode.data.dir</name>
	<value>file:/home/hadoop/dfs/data</value>
</property>

<property>
	<name>dfs.replication</name>
	<value>2</value>
</property>

<property>
	<name>dfs.webhdfs.enabled</name>
	<value>true</value>
</property>
</configuration>

第六個:

下面修改的是mapreduce任務配置文件,mapreduce.framework.name 屬性下配置yarn;

mapred.map.tasks和mapred.reduce.tasks 分別爲map和reduce 的任務數。
同時指定hadoop歷史服務器hsitoryserver

我們可以通過historyserver查看mapreduce的作業記錄,比如用了多少個map,用了多少個reduce,作業啓動時間,作業完成時間。默認清空下,hadoop歷史服務器是沒有啓動的,我們需要通過命令來啓動
 
[hadoop@ zss-1 hadoop]$ /home/hadoop/hadoop-3.1.3/sbin/mr-jobhistory-daemon.sh  start historyserver

[hadoop@ zss-1 hadoop]$ vim mapred-site.xml 

<configuration>
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>

<property>
	<name>mapreduce.jobhistory.address</name>
	<value>zss-1:10020</value>
</property>

<property>
	<name>mapreduce.jobhistory.webapp.address</name>
	<value>zss-1:19888</value>
</property>

</configuration>

第七:

下面是yarn框架的配置,主要是一些任務的啓動位置

[hadoop@ zss-1 hadoop]$ vim yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<proetry>
	<name>yarn.nodemanager.aux-service</name>
	<value>mapreduce_shuffle</value>
</proetry>

<proetry>
	<name>yarn.nodemanager.uax-service.mapreduce.shuffle.class</name>
	<value>org.apache.hadoop.mapreduced.ShuffleHandle</value>
</proetry>
<proetry>
	<name>yarn.resoucemanager.address</name>
	<value>zss-1:8032</value>
</proetry>
<proetry>
	<name>yarn.resourcemanager.shceduler.address</name>
	<value>zss-1:8030</value>
</proetry>
<proetry>
	<name>yarn.resourcemanager.resource-tracker.address</name>
	<value>zss-1:8031</value>
</proetry>

<proetry>
	<name>yarn.resourcemanager.admin.address</name>
	<value>zss-1:8033</value>
</proetry>

<proetry>
	<name>yarn.resourcemanager.webapp.address</name>
	<value>zss-1:8088</value>
</proetry>
</configuration>

datanode配置文件生成

[hadoop@ zss-1 hadoop]$ scp -r /home/hadoop/hadoop-3.13 hadoop@zss-2:~/
[hadoop@ zss-1 hadoop]$ scp -r /home/hadoop/hadoop-3.13 hadoop@zss-3:~/

namenode格式化數據

一般第一次的時候需要初始化,之後就不需要了

[hadoop@ zss-1 hadoop]$ ../../bin/hdfs namenode -format ##只截取了一部分
2020-03-04 16:05:17,278 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at zss-1/192.168.1.18
************************************************************/
[hadoop@ zss-1 hadoop]$


查看是否生成相應的內容
[hadoop@ zss-1 ~]$ cd /home/hadoop/dfs/
[hadoop@ zss-1 dfs]$ ls
data  name
[hadoop@ zss-1 dfs]$ tree 
.
├── data
└── name
    └── current
        ├── fsimage_0000000000000000000
        ├── fsimage_0000000000000000000.md5
        ├── seen_txid
        └── VERSION

3 directories, 4 files
[hadoop@ zss-1 hadoop]$


配置免密鑰登錄
[hadoop@ zss-1 hadoop]$ ssh-keygen /一直回車就行
[hadoop@ zss-1 hadoop]$ ssh-copy-id zss-2
[hadoop@ zss-1 hadoop]$ ssh-copy-id zss-3
[hadoop@ zss-1 hadoop]$ ssh-copy-id zss-1 /對自己也實行一次

啓動hdfs

方便後期複製文件或者啓動服務。 因爲namenode啓動時候,會鏈接到datanode上啓動對應的服務。

如果報錯如下:
2020-03-04 16:16:45,394 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

前往官網下載對應版本壓縮包
		http://dl.bintray.com/sequenceiq/sequenceiq-bin/ 

上傳到 如下路徑:
[hadoop@ zss-1 hadoop]$ pwd
/home/hadoop/hadoop-3.1.3/lib/native

解壓
[hadoop@ zss-1 native]$ tar xf hadoop-native-64.tar 
[hadoop@ zss-1 native]$ ls
examples              libhadoop.so.1.0.0  libnativetask.a
hadoop-native-64.tar  libhadooputils.a    libnativetask.so
libhadoop.a           libhdfs.a           libnativetask.so.1.0.0
libhadooppipes.a      libhdfs.so
libhadoop.so          libhdfs.so.0.0.0
[hadoop@ zss-1 native]$

覆蓋完之後重啓,先關閉再啓動
[hadoop@ zss-1 hadoop]$ …//sbin/stop-dfs.sh
[hadoop@ zss-1 hadoop]$ ../../sbin/start-dfs.sh
Starting namenodes on [zss-1]
Starting datanodes
Starting secondary namenodes [zss-1]

啓動yarn

也就是說我們要啓動 分佈式計算

[hadoop@ zss-1 hadoop]$ pwd
/home/hadoop/hadoop-3.1.3/etc/hadoop
[hadoop@ zss-1 hadoop]$ ../../sbin/start-yarn.sh

除了使用上面的腳本外,我們也可以使用命令使其全部啓動

[hadoop@ zss-1 hadoop]$ ../../sbin/start-all.sh

啓動jobhistory

[hadoop@ zss-1 hadoop]$ …//sbin/mr-jobhistory-daemon.sh start historyserver

啓動存儲服務和資源管理主服務

[hadoop@ zss-1 hadoop-3.1.3]$ sbin/hadoop-daemon.sh  start datanode
WARNING: Use of this script to start HDFS daemons is deprecated.
WARNING: Attempting to execute replacement "hdfs --daemon start" instead.
[hadoop@ zss-1 hadoop-3.1.3]$ sbin/yarn-daemon.sh start nodemanager
WARNING: Use of this script to start YARN daemons is deprecated.
WARNING: Attempting to execute replacement "yarn --daemon start" instead.
[hadoop@ zss-1 hadoop-3.1.3]$ 

通過IP訪問瀏覽器查看集羣狀態

主節點的IP:

http://10.0.0.33:9870/
在這裏插入圖片描述

http://10.0.0.33:8088/ #可查詢hadoop集羣各項指標
在這裏插入圖片描述

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