Hadoop(一)阿里雲hadoop集群配置


 

 

集群配置

三台ECS雲服務器

 

配置步驟

1.准備工作

1.1 創建/bigdata目錄

mkdir /bigdata
cd /bigdata
mkdir /app

1.2修改主機名為node01、node02、node03

1.3修改hosts文件

vim /etc/hosts

添加node01~node03內網IP映射

127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.237.91 node01 172.16.237.90 node02 172.16.221.55 node03

 

1.4安裝jdk

1.5配置SSH免密登陸

1.6安裝zookeeper,

 

2.開始配置

2.1 配置前的准備

將hadoop安裝包上傳解壓到/bigdata/app路徑下

tar -zxvf hadoop-2.8.4.tar.gz -C /bigdata/app

創建軟鏈接

ln -s /bigdata/app/hadoop-2.8.4 /usr/local/hadoop

將hadoop配置信息添加到環境變量中
注意:Hadoop配置文件路徑是/usr/local/hadoop/etc/hadoop

vim /etc/profile

添加內容如下:

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_HOME=$HADOOP_HOME
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

重新編譯環境變量使配置生效

source /etc/profile

 

2.2 配置HDFS
2.2.1進入到Hadoop配置文件路徑
cd /usr/local/hadoop/etc/hadoop
2.2.2修改hadoo-env.sh
修改JDK路徑

export JAVA_HOME=/usr/local/jdk

2.2.3 配置core-site.xml
2.2.4 配置hdfs-site.xml

 配置文件在下面

 

2.3 配置YARN
2.3.1 修改yarn-site.xml
2.3.2 修改mapred-site.xml

配置文件在下面
2.3.3 在/usr/local/hadoop路徑下創建hdpdata文件夾

cd /usr/local/hadoop
mkdir hdpdata

 

2.4 修改/usr/local/hadoop/etc/hadoop下的slaves文件

設置datanode和nodemanager啟動節點主機名稱

在slaves文件中添加節點的主機名稱

node02
node03

 

2.5將配置好的hadoop拷貝
scp -r hadoop-2.8.4 root@node02:/bigdata/app
scp -r hadoop-2.8.4 root@node03:/bigdata/app

在每個節點分別執行如下三步操作
第一步:使用root用戶創建軟鏈接
ln -s /bigdata/app/hadoop-2.8.4 /usr/local/hadoop
第二步:設置環境變量

vim /etc/profile

添加內容:

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_HOME=$HADOOP_HOME
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

第三步:重新編譯環境變量使配置生效

source /etc/profile

 

3.集群啟動(注意嚴格按照順序啟動)

3.1 啟動journalnode(分別在node01、node02、node03上執行啟動)

/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode

運行jps命令檢驗,node01、node02、node03上多了JournalNode進程


3.2 格式化HDFS
在node01上執行命令:

hdfs namenode -format

格式化成功之后會在core-site.xml中的hadoop.tmp.dir指定的路徑下生成dfs文件夾,將該文件夾拷貝到node02的相同路徑下

scp -r hdpdata root@node02:/usr/local/hadoop

 

3.3 在node01上執行格式化ZKFC操作

hdfs zkfc -formatZK

執行成功,日志輸出如下信息
INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns in ZK

3.4 在node01上啟動HDFS

sbin/start-dfs.sh

 

3.5在node02上啟動YARN

sbin/start-yarn.sh

在node01單獨啟動一個ResourceManger作為備份節點

sbin/yarn-daemon.sh start resourcemanager

 

3.6在node02上啟動JobHistoryServer

sbin/mr-jobhistory-daemon.sh start historyserver

啟動完成node02會增加一個JobHistoryServer進程

3.7hadoop安裝啟動完成
HDFS HTTP訪問地址
NameNode (active):http://node01:50070
NameNode (standby):http://node02:50070
ResourceManager HTTP訪問地址
ResourceManager :http://node02:8088
歷史日志HTTP訪問地址
JobHistoryServer:http:/node02:19888

4.集群驗證

4.1 驗證HDFS 是否正常工作及HA高可用首先向hdfs上傳一個文件

hadoop fs -put /usr/local/hadoop/README.txt /

在active節點手動關閉active的namenode

sbin/hadoop-daemon.sh stop namenode

通過HTTP 50070端口查看standby namenode的狀態是否轉換為active
手動啟動上一步關閉的namenode

sbin/hadoop-daemon.sh start namenode

4.2驗證ResourceManager HA高可用
手動關閉node02的ResourceManager

sbin/yarn-daemon.sh stop resourcemanager

通過HTTP 8088端口訪問node01的ResourceManager查看狀態
手動啟動node02 的ResourceManager

sbin/yarn-daemon.sh start resourcemanager

 

啟動腳本

 

 

配置文件

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <!-- 指定hdfs的nameservice名稱空間為ns -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns</value>
    </property>
    <!-- 指定hadoop臨時目錄,默認在/tmp/{$user}目錄下,不安全,每次開機都會被清空-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/hdpdata/</value>
        <description>需要手動創建hdpdata目錄</description>
    </property>
    <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node01:2181,node02:2181,node03:2181</value>
        <description>zookeeper地址,多個用逗號隔開</description>
    </property>
</configuration>

 

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <!-- NameNode HA配置 -->
    <property>
        <name>dfs.nameservices</name>
        <value>ns</value>
        <description>指定hdfs的nameservice為ns,需要和core-site.xml中的保持一致</description>
    </property>
    <property>
        <name>dfs.ha.namenodes.ns</name>
        <value>nn1,nn2</value>
        <description>ns命名空間下有兩個NameNode,邏輯代號,隨便起名字,分別是nn1,nn2</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns.nn1</name>
        <value>node01:9000</value>
        <description>nn1的RPC通信地址</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns.nn1</name>
        <value>node01:50070</value>
        <description>nn1的http通信地址</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.ns.nn2</name>
        <value>node02:9000</value>
        <description>nn2的RPC通信地址</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.ns.nn2</name>
        <value>node02:50070</value>
        <description>nn2的http通信地址</description>
    </property>
    <!--JournalNode配置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node01:8485;node02:8485;node03:8485/ns</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop/journaldata</value>
        <description>指定JournalNode在本地磁盤存放數據的位置</description>
    </property>
    <!--namenode高可用主備切換配置 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
        <description>開啟NameNode失敗自動切換</description>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.ns</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        <description>配置失敗自動切換實現方式,使用內置的zkfc</description>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
            sshfence
            shell(/bin/true)
        </value>
        <description>配置隔離機制,多個機制用換行分割,先執行sshfence,執行失敗后執行shell(/bin/true),/bin/true會直接返回0表示成功</description>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
        <description>使用sshfence隔離機制時需要ssh免登陸</description>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
        <description>配置sshfence隔離機制超時時間</description>
    </property>
    <!--dfs文件屬性設置-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description>默認block副本數為3,測試環境這里設置為1,注意生產環境一定要設置3個副本以上</description>
    </property>

    <property>
        <name>dfs.block.size</name>
        <value>134217728</value>
        <description>設置block大小是128M</description>
    </property>

    <!-- 如果是通過公網IP訪問阿里雲上內網搭建的集群 -->
<property>
    <name>dfs.client.use.datanode.hostname</name>
    <value>true</value>
    <description>only cofig in clients</description>
</property>

</configuration>

 

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>指定mr框架為yarn方式 </description>
    </property>
    <!-- 歷史日志服務jobhistory相關配置 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node02:10020</value>
        <description>歷史服務器端口號</description>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node02:19888</value>
        <description>歷史服務器的WEB UI端口號</description>
    </property>
</configuration>

 

yarn-site.xml

<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>
    <!-- 開啟RM高可用 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 指定RM的cluster id,一組高可用的rm共同的邏輯id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn-ha</value>
    </property>
    <!-- 指定RM的名字,可以隨便自定義 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 分別指定RM的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node01</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8088</value>
        <description>HTTP訪問的端口號</description>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node02</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8088</value>
    </property>
    <!-- 指定zookeeper集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node01:2181,node02:2181,node03:2181</value>
    </property>
    <!--NodeManager上運行的附屬服務,需配置成mapreduce_shuffle,才可運行MapReduce程序-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 開啟日志聚合 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 日志聚合HDFS目錄 -->
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/data/hadoop/yarn-logs</value>
    </property>
    <!-- 日志保存時間3days,單位秒 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>259200</value>
    </property>
</configuration>

 

 

 

問題

namenode連接不上,查看日志發現

java.io.IOException: There appears to be a gap in the edit log.  We expected txid 1, but got txid 2.

在hadoop的bin目錄下修復元數據

hadoop namenode -recover

先選y后選c

 

概念

守護進程是在后台運行不受終端控制的進程(如輸入、輸出等),一般的網絡服務都是以守護進程的方式運行。守護進程脫離終端的主要原因有兩點:(1)用來啟動守護進程的終端在啟動守護進程之后,需要執行其他任務。(2)(如其他用戶登錄該終端后,以前的守護進程的錯誤信息不應出現)由終端上的一些鍵所產生的信號(如中斷信號),不應對以前從該終端上啟動的任何守護進程造成影響。要注意守護進程與后台運行程序(即加&啟動的程序)的區別。

守護進程和后台程序

(a)守護進程已經完全脫離終端控制台了,而后台程序並未完全脫離終端,在終端未關閉前還是會往終端輸出結果
(b)守護進程在關閉終端控制台時不會受影響,而后台程序會隨用戶退出而停止,需要在以nohup command & 格式運行才能避免影響
(c)守護進程的會話組和當前目錄,文件描述符都是獨立的。后台運行只是終端進行了一次fork,讓程序在后台執行,這些都沒改變。

 

hadoop目錄結構

1.$HADOOP_HOME/bin目錄下文件及作用

文件名稱 說明
hadoop 用於執行hadoop腳本命令,被hadoop-daemon.sh調用執行,也可以單獨執行,一切命令的核心

 

 

2.$HADOOP_HOME/sbin目錄下文件及作用

文件名稱 說明
hadoop-daemon.sh

通過執行hadoop命令來啟動/停止一個守護進程(daemon);該命令會被bin目錄下面所有以start或stop開頭的所有命令調用來執行命令,

hadoop-daemons.sh也是通過調用hadoop-daemon.sh來執行命令的,而hadoop-daemon.sh本身就是通過調用hadoop命令來執行任務。

start-all.sh 全部啟動,它會調用start-dfs.sh及start-mapred.sh
start-dfs.sh 啟動NameNode、DataNode以及SecondaryNameNode
start-mapred.sh 啟動MapReduce
stop-all.sh 全部停止,它會調用stop-dfs.sh及stop-mapred.sh
stop-balancer.sh 停止balancer
stop-dfs.sh 停止NameNode、DataNode及SecondaryNameNode
stop-mapred.sh  停止MapReduce

 

 

 

 

 

 

 

 

3.$HADOOP_HOME/etc/hadoop目錄下文件及作用

文件名稱 說明
core-site.xml

Hadoop核心全局配置文件,可以其他配置文件中引用該文件中定義的屬性,如在hdfs-site.xml及mapred-site.xml中會引用該文件的屬性;

該文件的模板文件存在於$HADOOP_HOME/src/core/core-default.xml,可將模板文件復制到conf目錄,再進行修改。

hadoop-env.sh Hadoop環境變量
hdfs-site.xml HDFS配置文件,該模板的屬性繼承於core-site.xml;該文件的模板文件存於$HADOOP_HOME/src/hdfs/hdfs-default.xml,可將模板文件復制到conf目錄,再進行修改
mapred-site.xml

MapReduce的配置文件,該模板的屬性繼承於core-site.xml;該文件的模板文件存於$HADOOP_HOME/src/mapred/mapredd-default.xml,

可將模板文件復制到conf目錄,再進行修改

slaves 用於設置所有的slave的名稱或IP,每行存放一個。如果是名稱,那么設置的slave名稱必須在/etc/hosts有IP映射配置

 

 

 

 

 

 

 

 

4.$HADOOP_HOME/lib目錄

該目錄下存放的是Hadoop運行時依賴的jar包,Hadoop在執行時會把lib目錄下面的jar全部加到classpath中。

5.$HADOOP_HOME/logs目錄

該目錄存放的是Hadoop運行的日志,查看日志對尋找Hadoop運行錯誤非常有幫助。

6.$HADOOP_HOME/include目錄
對外提供的編程庫頭文件(具體動態庫和靜態庫在lib目錄中),這些頭文件均是用C++定義的,通常用於C++程序訪問HDFS或者編寫MapReduce程序。
7.$HADOOP_HOME/libexec目錄
各個服務對用的shell配置文件所在的目錄,可用於配置日志輸出、啟動參數(比如JVM參數)等基本信息。
8.$HADOOP_HOME/share目錄
Hadoop各個模塊編譯后的jar包所在的目錄。

 

端口

Hadoop集群的各部分一般都會使用到多個端口,有些是daemon之間進行交互之用,有些是用於RPC訪問以及HTTP訪問。而隨着Hadoop周邊組件的增多,完全記不住哪個端口對應哪個應用,特收集記錄如此,以便查詢。

這里包含我們使用到的組件:HDFS, YARN, HBase, Hive, ZooKeeper:

組件

節點

默認端口

配置

用途說明

HDFS

DataNode

50010

dfs.datanode.address

datanode服務端口,用於數據傳輸

HDFS

DataNode

50075

dfs.datanode.http.address

http服務的端口

HDFS

DataNode

50475

dfs.datanode.https.address

https服務的端口

HDFS

DataNode

50020

dfs.datanode.ipc.address

ipc服務的端口

HDFS

NameNode

50070

dfs.namenode.http-address

http服務的端口

HDFS

NameNode

50470

dfs.namenode.https-address

https服務的端口

HDFS

NameNode

8020

fs.defaultFS

接收Client連接的RPC端口,用於獲取文件系統metadata信息。

HDFS

journalnode

8485

dfs.journalnode.rpc-address

RPC服務

HDFS

journalnode

8480

dfs.journalnode.http-address

HTTP服務

HDFS

ZKFC

8019

dfs.ha.zkfc.port

ZooKeeper FailoverController,用於NN HA

YARN

ResourceManager

8032

yarn.resourcemanager.address

RM的applications manager(ASM)端口

YARN

ResourceManager

8030

yarn.resourcemanager.scheduler.address

scheduler組件的IPC端口

YARN

ResourceManager

8031

yarn.resourcemanager.resource-tracker.address

IPC

YARN

ResourceManager

8033

yarn.resourcemanager.admin.address

IPC

YARN

ResourceManager

8088

yarn.resourcemanager.webapp.address

http服務端口

YARN

NodeManager

8040

yarn.nodemanager.localizer.address

localizer IPC

YARN

NodeManager

8042

yarn.nodemanager.webapp.address

http服務端口

YARN

NodeManager

8041

yarn.nodemanager.address

NM中container manager的端口

YARN

JobHistory Server

10020

mapreduce.jobhistory.address

IPC

YARN

JobHistory Server

19888

mapreduce.jobhistory.webapp.address

http服務端口

HBase

Master

60000

hbase.master.port

IPC

HBase

Master

60010

hbase.master.info.port

http服務端口

HBase

RegionServer

60020

hbase.regionserver.port

IPC

HBase

RegionServer

60030

hbase.regionserver.info.port

http服務端口

HBase

HQuorumPeer

2181

hbase.zookeeper.property.clientPort

HBase-managed ZK mode,使用獨立的ZooKeeper集群則不會啟用該端口。

HBase

HQuorumPeer

2888

hbase.zookeeper.peerport

HBase-managed ZK mode,使用獨立的ZooKeeper集群則不會啟用該端口。

HBase

HQuorumPeer

3888

hbase.zookeeper.leaderport

HBase-managed ZK mode,使用獨立的ZooKeeper集群則不會啟用該端口。

Hive

Metastore

9083

/etc/default/hive-metastore中export PORT=來更新默認端口

 

Hive

HiveServer

10000

/etc/hive/conf/hive-env.sh中export HIVE_SERVER2_THRIFT_PORT=來更新默認端口

 

ZooKeeper

Server

2181

/etc/zookeeper/conf/zoo.cfg中clientPort=

對客戶端提供服務的端口

ZooKeeper

Server

2888

/etc/zookeeper/conf/zoo.cfg中server.x=[hostname]:nnnnn[:nnnnn],標藍部分

follower用來連接到leader,只在leader上監聽該端口。

ZooKeeper

Server

3888

/etc/zookeeper/conf/zoo.cfg中server.x=[hostname]:nnnnn[:nnnnn],標藍部分

用於leader選舉的。只在electionAlg是1,2或3(默認)時需要。

所有端口協議均基於TCP。

對於存在Web UI(HTTP服務)的所有hadoop daemon,有如下url:

/logs

日志文件列表,用於下載和查看

/logLevel

允許你設定log4j的日志記錄級別,類似於hadoop daemonlog

/stacks

所有線程的stack trace,對於debug很有幫助

/jmx

服務端的Metrics,以JSON格式輸出。

/jmx?qry=Hadoop:*會返回所有hadoop相關指標。 

/jmx?get=MXBeanName::AttributeName 查詢指定bean指定屬性的值,例如/jmx?get=Hadoop:service=NameNode,name=NameNodeInfo::ClusterId會返回ClusterId。 

這個請求的處理類:org.apache.hadoop.jmx.JMXJsonServlet

而特定的Daemon又有特定的URL路徑特定相應信息。

NameNode:http://:50070/

/dfshealth.jsp

HDFS信息頁面,其中有鏈接可以查看文件系統

/dfsnodelist.jsp?whatNodes=(DEAD|LIVE) 

顯示DEAD或LIVE狀態的datanode

/fsck

運行fsck命令,不推薦在集群繁忙時使用!

DataNode:http://:50075/

/blockScannerReport

每個datanode都會指定間隔驗證塊信息

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM