Hadoop 徹底分佈式安裝與部署

Hadoop官方指導傳送門 傳送門html

截止當前(2020年01月08日),Hadoop最新版本是3.2.1,本文依據3.2.1部署安裝java

本篇文章只介紹瞭如何安裝和配置範圍從幾個節點到具備數千個節點的超大型Hadoop集羣。 要快速天眼使用Hadoop,可能只須要將其安裝在單臺服務器上。 node

本篇文章不涉及hadoop安全或高可用性等高級話題。 web

服務器準備

服務器規劃,提供四臺服務器,OS 爲centos 7shell

修改主機名

hostnamectl set-hostname centos-x
複製代碼

x 爲咱們每臺服務器apache

完成咱們的主機以下vim

主機名 IP 預備分配服務
centos-1 10.211.55.11 DataNode NodeManager NameNode
centos-2 10.211.55.12 DataNode NodeManager SecondaryNameNode
centos-3 10.211.55.13 DataNode NodeManager ResourceManager
centos-4 10.211.55.14 DataNode NodeManager HistoryServer

服務器ip

服務器服務分配

安裝openJDK-8

經過yum安裝jdkcentos

yum update
yum install java-1.8.0-openjdk-devel -y
複製代碼

修改 環境變量安全

vim /etc/profile
複製代碼

在尾部新增bash

export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export PATH=$JAVA_HOME/bin:$PATH
複製代碼

配置服務器靜態IP

靜態IP

vim /etc/sysconfig/network-scripts/ifcfg-enp0s5
複製代碼

完整配置以下

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # 修改dhcp 爲 static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s5"
UUID="e2bda9d6-dc4f-4513-adbc-fdf3a1e2f384"
DEVICE="enp0s5"
ONBOOT="yes"

# 新增
GATEWAY=10.211.55.1 # 修改網關,虛擬機須要注意修改nat
IPADDR=10.211.55.12 # 分配IP地址
NETMASK=255.255.255.0 # 子網掩碼
DNS1=223.5.5.5 # 使用阿里公共DNS1
DNS2=223.6.6.6 # 使用阿里公共DNS2
複製代碼

增長 dhfs 用戶

一般,建議HDFS和YARN以單獨的用戶身份運行。

在大多數安裝中,HDFS進程以「hdfs」執行。YARN一般使用「yarn」賬戶

adduser hdfs
passwd hdfs # 修改密碼
複製代碼

設置SSH無密碼登陸

四臺服務器所有設置

ssh-keygen -t rsa
複製代碼
  1. 分配ssh key
ssh-copy-id centos-1
ssh-copy-id centos-2
ssh-copy-id centos-3
ssh-copy-id centos-4
複製代碼

安裝部署Hadoop

切換至 hdfs 用戶

su - hdfs
複製代碼

下載

curl http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz -O
複製代碼

解壓

這裏直接解壓到/usr/local/

tar -zxf hadoop-3.2.1.tar.gz  -C /usr/local/hadoop-3.2.1
複製代碼

修改環境變量

sudo vim /etc/profile
複製代碼

修改原先配置爲

export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export HADOOP_HOME=/usr/local/hadoop-3.2.1

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
複製代碼

修改配置

這裏咱們進入$HADOOP_HOME文件夾開始操做

mkdir -p $HADOOP_HOME/hdfs/data
mkdir -p $HADOOP_HOME/tmp
複製代碼

配置hadoop-env.sh

sudo vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
複製代碼

增長 或 修改

export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
複製代碼

配置core-site.xml

vim etc/hadoop/core-site.xml
複製代碼

configuration配置以下

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://10.211.55.11:4000</value>
        <description>HDFS的URI,文件系統://namenode標識:端口號</description>
    </property>
    
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-3.2.1/tmp</value>
        <description>namenode上本地的hadoop臨時文件夾</description>
    </property>

</configuration>
複製代碼

fs.defaultFSNameNode的地址。 hadoop.tmp.dirhadoop臨時目錄的地址,默認狀況下,NameNodeDataNode的數據文件都會存在這個目錄下的對應子目錄下。

配置hdfs-site.xml

vim etc/hadoop/hdfs-site.xml
複製代碼
<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>10.211.55.12:50090</value>
    </property>
    <property>
        <name>dfs.http.address</name>
        <value>10.211.55.11:50070</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop-3.2.1/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop-3.2.1/hdfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>
複製代碼

dfs.namenode.secondary.http-address是指定secondaryNameNode的http訪問地址和端口號,由於在規劃中,咱們將centos-2規劃爲SecondaryNameNode服務器。

dfs.http.address配置的是本機默認的dfs地址,有些服務器能夠不用配置,個人試過了,必須加上,否則後續網頁打不開。 dfs.namenode.name.dir 指定name文件夾,dfs.datanode.data.dir 指定data文件夾 dfs.datanode.data.dir 指定副本數,通常小於服務器數,咱們設置爲3

配置workers

hadoop2.x中叫作slaves,在3.x版本中更名workers。 用來指定HDFS上有哪些DataNode節點,以及各個節點使用ip地址或者主機名,用換行分隔。

vim etc/hadoop/workers
複製代碼

這裏咱們就使用主機名

centos-1
centos-2
centos-3
centos-4
複製代碼

配置yarn-site.xml

vim etc/hadoop/yarn-site.xml
複製代碼

配置以下

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>centos-3</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>106800</value>
  </property>
</configuration>
複製代碼

按照規劃使用centos-3作爲 resourcemanager 使用yarn.log-aggregation-enable開啓日誌聚合,yarn.log-aggregation.retain-seconds配置彙集的日誌在HDFS上最多保存多長時間。

配置mapred-site.xml

vim etc/hadoop/mapred-site.xml
複製代碼
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>centos-4:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>centos-4:19888</value>
    </property>
</configuration>
複製代碼

mapreduce.framework.name設置mapreduce任務運行在yarn上。 mapreduce.jobhistory.address是設置mapreduce的歷史服務器安裝在centos-4上。 mapreduce.jobhistory.webapp.address是設置歷史服務器的web頁面地址和端口號。 yarn.app.mapreduce.am.env,mapreduce.map.env,mapreduce.reduce.env須要設置爲HADOOP_MAPRED_HOME=${HADOOP_HOME},不然在運行yarn程序的時候會出現jar包未找到的錯誤。

啓動 hadoop集羣

完成上述全部必要的配置後,將文件分發到全部服務器的HADOOP_CONF_DIR目錄下(/user/local)。在全部計算機上,該目錄應該是相同的目錄。

格式化

要啓動Hadoop集羣,須要同時啓動HDFSYARN集羣。 首次啓動HDFS時,必須對其進行格式化。將新的分佈式文件系統格式化爲hdfs.

$HADOOP_HOME/bin/hdfs namenode -format <羣集名稱>
複製代碼

集羣名稱能夠不填寫,不出意外,執行完成後$HADOOP_HOME/hdfs/data中就有東西了。

啓動 HDFS

若是配置了workersssh互信咱們能夠

$HADOOP_HOME/sbin/start-dfs.sh
複製代碼

啓動 YARN

若是配置了workers和ssh互信咱們能夠

$HADOOP_HOME/sbin/start-yarn.sh
複製代碼

若上面沒有配置的workersssh互信咱們能夠

  1. 啓動namenode
$HADOOP_HOME/bin/hdfs --daemon start namenode
複製代碼
  1. 啓動DataNode
$HADOOP_HOME/bin/hdfs --daemon start datanode
複製代碼

啓動 NodeManager

規劃在centos-4上,所以咱們在centos-4上執行

$HADOOP_HOME/bin/yarn --daemon start nodemanager
複製代碼

啓動 ResourceManager

規劃在centos-3上,所以咱們在centos-3上執行

$HADOOP_HOME/bin/yarn --daemon start resourcemanager
複製代碼

啓動 HistoryServer

規劃在centos-4上,所以咱們在centos-4上執行

$HADOOP_HOME/bin/mapred --daemon start historyserver
複製代碼

查看HDFS Web頁面

位於centos50070端口:http://centos-1:50070/

HDFS Web

查看YARN Web 頁面

位於centos-38088端口:http://centos-3:8088/

YARN Web

查看歷史WEB頁面

位於centos-419888端口:http://centos-4:19888/

歷史WEB

測試

爲了測試咱們使用 wordcount 來測試

  1. 新建文件
sudo vim /opt/word.txt
複製代碼
  1. 文本內容
hadoop mapreduce hive
hbase spark storm
sqoop hadoop hive
spark hadoop
複製代碼
  1. 新建hadoop裏文件夾demo
hadoop fs -mkdir /demo
複製代碼
  1. 文件寫入
hdfs dfs -put /opt/word.txt /demo/word.txt
複製代碼
  1. 執行輸入到hadoop的/output
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /demo/word.txt /output
複製代碼
  1. 查看文件列表
hdfs dfs -ls /output
複製代碼
Found 2 items
-rw-r--r--   3 hdfs supergroup          0 2020-01-07 02:20 /output/_SUCCESS
-rw-r--r--   3 hdfs supergroup         60 2020-01-07 02:20 /output/part-r-00000
複製代碼
  1. 查看文件中內容
hdfs dfs -cat /output/part-r-00000
複製代碼
2020-01-07 16:40:19,951 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
hadoop	3
hbase	1
hive	2
mapreduce	1
spark	2
sqoop	1
storm	1
複製代碼
相關文章
相關標籤/搜索