1. 程式人生 > >CentOS7.4下部署hadoop3.1.1

CentOS7.4下部署hadoop3.1.1

prop art 否則 man tar.gz 自帶 不同 step minimum

CentOS7.4下部署hadoop3.1.1

契機

由於工作原因要部署hadoop的集群,習慣使用最新的穩定版本2018年的時候由於時間緊破部署了2.7.2版本,最新由於又要部署有研究了一下3.x的部署.這次
研究通了,在這裏記錄一下,防止以往.

本次部署的是一個可用的集群,不是高可用的,因為高可用的hadoop還要部署zookeeper和ha,搞可用的hadoop以後有需要再研究.

準備工作

規劃

軟件

軟件 版本 位數 說明
Jdk Jdk1.8 64位 穩定版本
Centos Centos7.4 64位 穩定版本
Hadoop Hadoop 3.1.1 最新版本
Zookeeper
Zookeeper 3.4.6 穩定版本

數據目錄

目錄名稱 絕對路徑
目錄名稱 絕對路徑
所有軟件存放目錄 /home/hadoop3/app
datanode目錄 /home/hadoop3/data
namenode目錄 /home/hadoop3/name
tmp目錄 /home/hadoop3/tmp
jdk目錄 /usr/local/opt/java

關閉防火墻

  • systemctl stop firewalld -> 關閉防火墻
  • systemctl disable firewalld -> 開機不啟動防火墻
  • systemctl status firewalld -> 開機不啟動防火墻

關閉selinux

打開文件/etc/selinux/config,修改文件內容

SELinux=enforing -> SELINUX=disabled 

開啟ntp 時間同步服務

  • systemctl stop ntpd

    如果是在局域網內可以用一臺機器為時間同步的主服務器,其他機器使用主服務的時間同步本機時間,設置方法參考下文

新建賬戶

通常由於安全的考慮我們不會把hadoop部署到root賬戶下,新建用戶名為hadoop3的用戶

  • adduser hadoop3 ->新增用戶
  • passwd hadoop3 ->設置hadoop3的用戶密碼
  • groupmod -g 2000 hadoop3 -> adduser命令會新增同名group,更改所有集群hadoop3組的groupid為一樣的值

修改機器名

以namenode的機器為例

使用hostnamectl -set-hostname m1.hadoop

修改 /etc/hosts 增加

x.x.x.1 m1.hadoop m1
x.x.x.1 s1.hadoop s1
x.x.x.1 s2.hadoop s2 

修改 /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=m1.hadoop  

ssh免密登錄

在hadoop3賬戶下

  • ssh-keygen 生成公鑰和私鑰過程中需要敲兩次Enter,不要要輸入任何內容
  • ssh-copy-id [email protected]
  • 選一臺機器,所有其他節點聲場秘鑰後用ssh-copy-id將公鑰拷貝到這臺機器
  • 使用 scp /home/hadoop3/.ssh/authoried_keys [email protected]:/home/hadoop3/.ssh/ 將記錄公鑰的文件拷貝的所有節點,這樣所有節點都配置好免密登錄了

ntp局域網時間同步

參考地址: http://blog.51cto.com/xu20cn/69689

假定時鐘服務器IP地址為:192.168.0.1

服務器端配置

  1. 置/etc/ntp.conf文件內容為:

    server 127.127.1.0 minpoll 4
    fudge 127.127.1.0 stratum 1
    restrict 127.0.0.1
    restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
    driftfile /var/lib/ntp/drift

  2. /etc/ntp/ntpservers應置空
  3. /etc/ntp/step-tickers應配置為 127.127.1.0
    上述修改完成後,以root用戶身份重啟ntpd服務:systemctl restart ntpd 即可

客戶端配置

  1. 置/etc/ntp.conf文件內容為:

    server 192.168.0.1
    fudge 127.127.1.0 stratum 2
    restrict 127.0.0.1
    driftfile /var/lib/ntp/drift
    restrict 192.168.0.1 mask 255.255.255.255

  2. /etc/ntp/ntpservers 文件內容置空
  3. /etc/ntp/step-tickers文件內容置為時鐘服務器IP地址 192.168.0.1
    上訴修改完成後,以root用戶身份重啟ntpd服務:systemctl restart ntpd 即可
    用戶可用以下兩個常用命令查看ntpd服務狀態:
    1 ntpq -p
    2 ntpstat

linux下ntpd安裝配置筆記
概述: ntp能與互聯網上的時鐘保持同步,而且本身也是一臺NTP服務器,可以為局域網電腦提供校對時間服務
安裝: redhat自帶
配置文件: /etc/ntp.conf
附:我的配置文件

#restrict default ignore
restrict 127.0.0.1
restrict 192.168.3.20
restrict 192.168.0.0 mask 255.255.255.0
restrict 192.168.2.0 mask 255.255.255.0
restrict 192.168.4.0 mask 255.255.255.0
server 210.72.145.44 prefer       #National Time Service Center
server 195.13.1.153
server 194.137.39.67
server 127.127.1.0     # local clock
restrict 210.72.145.44
restrict 195.13.1.153
restrict 194.137.39.67
driftfile /var/lib/ntp/drift

附:相關配置參數說明

  • restrict權限控制語法為:
  • restrict IP mask netmask_IP parameter
    • 其中 IP 可以是軟件地址,也可以是 default ,default 就類似 0.0.0.0 咯!
    • 至於 paramter 則有:
      • ignore :關閉所有的 NTP 聯機服務
      • nomodify:表示 Client 端不能更改 Server 端的時間參數,不過,
      • Client 端仍然可以透過 Server 端來進行網絡校時。
      • notrust :該 Client 除非通過認證,否則該 Client 來源將被視為不信任網域
      • noquery :不提供 Client 端的時間查詢
      • 如果 paramter 完全沒有設定,那就表示該 IP (或網域) 『沒有任何限制!』
  • 設定上層主機主要以 server這個參數來設定,語法為:
    • server [IP|FQDN] [prefer]
    • Server 後面接的就是我們上層 Time Server 啰!而如果 Server 參數
    • 後面加上 perfer 的話,那表示我們的 NTP 主機主要以該部主機來作為
    • 時間校正的對應。另外,為了解決更新時間封包的傳送延遲動作

讓FreeBSD使用ntpd同步時間
  我們知道ntpd是一種在後臺運行可以使用遠程時間服務器的進程,它可以讓你的服務器時間準確而不會影響系統的正常。
  首先修改/etc/rc.conf添加ntpd_enable="YES"到最後一行。然後vi /etc/ntp.conf
添加:
server 210.72.145.44 prefer
server 159.226.154.47
server 127.127.1.0
fudge 127.127.0.1 stratum 5
restrict default ignore
restrict 127.0.0.0 mask 255.0.0.0
restrict 192.168.0.0 mask 255.255.255.0 noquery nopeer notrust
restrict 210.72.145.44 noquery
restrict 159.226.154.47 noquery
driftfile /var/db/ntpd.drift
  其中server 210.72.145.44 prefer、server 159.226.154.47、restrict 210.72.145.44 noquery、restrict 159.226.154.47 noquery可以改成其他離你最近或最準確的時間服務器。
  這樣在服務器重啟後ntpd進程就會自動在後臺運行,幫助系統同步時間,和在192.168.0這個網段內做一臺時間服務器。

安裝jdk

下載jdk 下載網頁 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安裝包名字類似 jdk-8u191-linux-x64.tar.gz

部署和分發hadoop程序

下載 hadoop-3.1.1.tar.gz 下載網頁 https://hadoop.apache.org/releases.html

使用 tar -zxvf hadoop-3.1.1.tar.gz 解壓hadoop,

3.x的hdfs的默認端口號是9870和2.x的50070不同

core-site.xml

在hadoop解壓目錄 etc/hadoop/目錄下
<configuration> 
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://m1.hadoop:9000</value>
    </property> 
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property> 
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop3/tmp</value>
    </property>

    <!-- httpfs 設置-->
    <property>
        <name>hadoop.proxyuser.hadoop3.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.hadoop3.groups</name>
        <value>*</value>
    </property>
</configuration> 

hdfs-site.xml

在hadoop解壓目錄 etc/hadoop/目錄下
<configuration> 
    <!--Configurations for NameNode-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop3/name</value>
    </property> 
    <property>
        <name>dfs.hosts</name>
        <value></value>
    </property> 
    <property>
        <name>dfs.blocksize</name>
        <value>268435456</value>
    </property>
    <property>
        <name>dfs.namenode.handler.count</name>
        <value>100</value>
    </property>

    <!--Configurations for DataNode-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop3/data</value>
    </property> 
</configuration>

yarn-size.xml

在hadoop解壓目錄 etc/hadoop/目錄下
<configuration> 
    <!-- Site specific YARN configuration properties --> 
    <!-- Configurations for ResourceManager and NodeManager --> 
    <property>
        <name>yarn.acl.enable</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.admin.acl</name>
        <value>*</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>false</value>
    </property>

    <!--Configurations for ResourceManager-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>m1.hadoop</value>
    </property>
    <property>
        <name>yarn.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>256</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>

    <!--Configurations for Manager-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

hadoop-env.sh

修改了這個文件,就不需要修改 /etc/profile的配置文件來修改環境變量了
在hadoop解壓目錄 etc/hadoop/目錄下

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
# export JAVA_HOME=
export JAVA_HOME=/usr/local/opt/java/jdk1.8.0_191

# Location of Hadoop.  By default, Hadoop will attempt to determine
# this location based upon its execution path.
# export HADOOP_HOME=
export HADOOP_HOME=/home/hadoop3/app/hadoop-3.1.1

啟動dfs

在hadoop的部署目錄下的sbin目錄執行
start-dfs.sh

查看dfs的狀態: http://x.x.x.x:9870/

使用jps查看狀態(jps需要將jdk目錄設置到環境變量)

20401 SecondaryNameNode
20993 HttpFSServerWebServer
20082 NameNode
20636 ResourceManager
27533 Jps

啟動httpfs代理

在hadoop的部署目錄下的sbin目錄執行
httpfs.sh start

啟動yarn

在hadoop的部署目錄下的sbin目錄執行
start-yarn.sh

查看yarn的狀態: http://x.x.x.x:8088/

CentOS7.4下部署hadoop3.1.1