zookeeper集群的搭建以及hadoop ha的相關配置

来源:http://www.cnblogs.com/learn21cn/archive/2016/12/15/6184490.html
-Advertisement-
Play Games

1、環境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 master作為active主機,data1作為standby備用機,三台機器均作為數據節點,yarn資源管理器在master上開啟,在data1上備用,data1上開啟歷史伺服器 主要參考見下表 Data ...


1、環境

centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8

master作為active主機,data1作為standby備用機,三台機器均作為數據節點,yarn資源管理器在master上開啟,在data1上備用,data1上開啟歷史伺服器

主要參考見下表

master 192.168.1.215 Namenode DataNode QuorumPeerMain ZKFC JournalNode ResourceManager NodeManager
data1 192.168.1.218 Namenode DataNode QuorumPeerMain ZKFC JournalNode ResourceManager NodeManager JobHistoryServer ApplicationHistoryServer
data2 192.168.1.219

DataNode QuorumPeerMain JournalNode NodeManager

 

 

 

 

 2、zookeeper集群的搭建

安裝到/usr/Apache目錄下,所有者與所屬組均為hadoop

tar -zxvf zookeeper-3.4.9.tar.gz -C /usr/Apache/
ln -s zookeeper-3.4.9/ zookeeper
cd zookeeper/conf
# 配置文件
cp zoo_sample.cfg zoo.cfg
# 編輯zoo.cfg的內容
# The number of milliseconds of each tick tickTime
=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/usr/Apache/zookeeper/data dataLogDir=/usr/Apache/zookeeper/data/log # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature autopurge.purgeInterval=1 # server.1=master:2888:3888 server.2=data1:2888:3888 server.3=data2:2888:3888

一般採用預設值,重點是標藍的地方。

數據的路徑單獨設,將日誌分開,並且,不要放到預設的tmp文件夾下麵,因為這個會定期刪除

dataDir=/usr/Apache/zookeeper/data  dataLogDir=/usr/Apache/zookeeper/data/log

將快照打開,並且設置autopurge.purgeInterval=1,與上面的不同,快照需要定期刪除

增大客戶端的連接數量maxClientCnxns=60

 先安裝到master下麵,之後進行分發

scp -r zookeeper-3.4.9 data1:usr/Apache/
scp -r zookeeper-3.4.9 data2:usr/Apache/
# 註意所屬組與所有者
chown -R hadoop:hadoop zookeeper
# 分別在三台機器的/usr/Apache/zookeeper/data目錄下建立myid文件,分別寫入數字1、2、3,這點很重要
cd /usr/Apache/zookeeper/data/
touch myid # 三台機器分別啟動 zkServer.
sh start # 查看狀態 zkServer.sh status # 最後,檢查,關閉一個看是否自動選舉

 

3、hadoop以及yarn的高可用配置

先前安裝過,主要是配置文件的修改,註意,如果不重新安裝,需要刪除一些文件 rm -rf tmp/* data/nn/* data/jn/* data/dn/* data/dn/* logs/*

上面的data/nn data/jn data/dn data/dn 是自己建的一些文件,用於節點數據的存放。

重新安裝也不麻煩,此處選擇重新安裝,目錄選擇/usr/Apache,所有者與所屬組均為hadoop,環境變數如下:

更改環境變數,hadoop用戶下麵的~/.bashrc文件
export HADOOP_HOME=/usr/Apache/hadoop
export ZOOKEEPER_HOME=/usr/Apache/zookeeper
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
# 之後
source ~/.bashrc

下麵關鍵看配置

1> core-site.xml

<configuration>
<!--緩存文件存儲的路徑,可以這樣寫file:/opt/mdisk/disk02/data/tmp,file:/opt/mdisk/disk01/data/tmp-->
<!--如果掛載多個數據盤,用逗號分開-->
<!--配置緩存文件的目錄,註意另建新的文件夾tmp,不要在hadoop/tmp下,因為會定期刪除-->
<property>
<name>hadoop.tmp.dir</name>
     <value>/usr/Apache/hadoop/data/tmp</value>
    <description>A base for other temporary directories.</description>
</property>

<!--指定nameservice的名稱,自定義,但後面必須保持一致-->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://nscluster</value>
</property>

<!-- 編輯日誌文件存儲的路徑,這個也可以放到hdfs-site.xml中 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/usr/Apache/hadoop/data/jn</value>
</property>

<!--文件讀寫緩存大小,此處為128kb-->
<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
</property>

<!--指定zookeeper地址,配置HA時需要,這個也可以放到hdfs-site.xml中-->
<!--<property>
    <name>ha.zookeeper.quorum</name>
    <value>master:2181,data1:2181,data2:2181</value>
</property>-->

<!--以下不是必須的-->
<!--配置hdfs文件被永久刪除前保留的時間(單位:分鐘),預設值為0表明垃圾回收站功能關閉-->
<!--<property>
    <name>fs.trash.interval</name>
    <value>0</value>
</property>-->

<!--指定可以在任何IP訪問-->
<!--<property>
    <name>hadoop.proxyuser.hduser.hosts</name>
    <value>*</value>
</property>-->

<!--指定所有用戶可以訪問-->
<!--<property>
    <name>hadoop.proxyuser.hduser.groups</name>
    <value>*</value>
</property>-->
</configuration>

這裡要註意hadoop.tmp.dir這個屬性,上面的註釋也已經說了,一定不要放到暫時的hadoop/tmp中,而要放到永久的文件夾中,否則namenode的啟動可能遇到問題。

上面一些註釋掉的屬性不是必須的,下麵一樣。

2> hdfs-site.xml

註意下麵的nscluster是自定義的名稱,並且被應用於多個屬性中,部署使用時更改樣式

<configuration>

<!--指定hdfs元數據存儲的路徑-->
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/Apache/hadoop/data/nn</value>
</property>

<!--指定hdfs數據存儲的路徑-->
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/Apache/hadoop/data/dn</value>
</property>

<!--開啟WebHDFS功能(基於REST的介面服務)-->
<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>

<!-- 數據備份的個數 -->
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>    

<!--關閉許可權驗證 -->
<property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
</property>

<!--DateNode上的服務線程數,處理rpc,預設為10,可以調大-->
<property>
    <name>dfs.datanode.handler.count</name>
    <value>200</value>
</property>

<!--文件操作的線程數,如果處理文件有很多,則調大,建議值8192-->
<property>
    <name>dfs.datanode.max.transfer.threads</name> 
    <value>8192</value> 
</property>

<!--不用的數據節點,添加到excludes文件,方法同slaves文件,之後執行hadoop dfsadmin -refreshNodes命令-->
<property>
    <name>dfs.hosts.exclude</name>
    <value>/usr/Apache/hadoop/etc/hadoop/excludes</value>
</property>

<!--以下為ha的相關配置-->
<!-- 指定hdfs的nameservice的名稱為nscluster,務必與core-site.xml中的邏輯名稱相同 -->
<property>
    <name>dfs.nameservices</name>
    <value>nscluster</value>
</property>    

<!-- 指定nscluster的兩個namenode的名稱,分別是nn1,nn2,註意後面的尾碼.nscluster,這個是自定義的,如果邏輯名稱為nsc,則尾碼為.nsc,下麵一樣 -->
<property>
    <name>dfs.ha.namenodes.nscluster</name>
    <value>nn1,nn2</value>
</property>    

<!-- 配置nn1,nn2的rpc通信 埠    -->
<property>
    <name>dfs.namenode.rpc-address.nscluster.nn1</name>
    <value>master:9000</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.nscluster.nn2</name>
    <value>data1:9000</value>
</property>    

<!-- 配置nn1,nn2的http訪問埠 -->
<property>
    <name>dfs.namenode.http-address.nscluster.nn1</name>
    <value>master:50070</value>
</property>
<property>
    <name>dfs.namenode.http-address.nscluster.nn2</name>
    <value>data1:50070</value>
</property>    

<!-- 指定namenode的元數據存儲在journalnode中的路徑 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://master:8485;data1:8485;data2:8485/nscluster</value>
</property>    

<!-- 開啟失敗故障自動轉移 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>     

<!-- 配置失敗自動切換的方式 -->
<property>
    <name>dfs.client.failover.proxy.provider.nscluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>    

<!-- 配置zookeeper地址,如果已經在core-site.xml中配置了,這裡不是必須的 -->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>master:2181,data1:2181,data2:2181</value>
</property>

<!-- 配置隔離機制 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>

<!-- 指定秘鑰的位置 -->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/hadoop/.ssh/id_rsa</value>
</property>    

<!--配置sshfence隔離機制超時時間-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
</property>

<!--保證數據恢復-->
<!--<property>
    <name>dfs.journalnode.http-address</name>
    <value>0.0.0.0:8480</value>
</property>-->
<!--<property>
    <name>dfs.journalnode.rpc-address</name>
    <value>0.0.0.0:8485</value>
</property> -->
</configuration>

 3> mapred-site.xml

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

<!--配置 MapReduce JobHistory Server 地址 ,預設埠10020-->
<property>
  <name>mapreduce.jobhistory.address</name>
  <value>0.0.0.0:10020</value>
</property>

<!--配置 MapReduce JobHistory Server web ui 地址, 預設埠19888-->
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>0.0.0.0:19888</value>
</property>

<!--不用的數據節點,添加到excludes文件,之後執行hadoop dfsadmin -refreshNodes命令,-->
<!--協同hdfs-site.xml中的dfs.hosts.exclude屬性-->
<property>
    <name>mapred.hosts.exclude</name>
  <value>/usr/Apache/hadoop/etc/hadoop/excludes</value>
</property>

<property>
    <name>mapreduce.job.ubertask.enable</name>
    <value>true</value>
</property>

</configuration>

註意上面0.0.0.0:19888這種寫法,不能簡單的寫為19888,否則歷史伺服器不能訪問

4> yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<!--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>

<!-- 日誌刪除時間 -1禁用,單位為秒 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

<!--修改日誌目錄hdfs://mycluster/var/log/hadoop-yarn/apps,當應用程式運行結束後,日誌被轉移到的HDFS目錄(啟用日誌聚集功能時有效)-->
<property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/logs</value>
</property>

<!-- yarn記憶體,配置nodemanager可用的資源記憶體 -->
<!--<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>8192</value>
</property>-->

<!-- yarn  cpu,配置nodemanager可用的資源CPU -->
<!--<property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>8</value>
</property>-->

<!--以下為ha配置-->
<!-- 開啟yarn ha -->
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
</property>

<!-- 指定yarn ha的名稱 -->
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>nscluster-yarn</value>
</property>

<!--啟用自動故障轉移-->
<property>
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>??
    <value>true</value>
</property>

<!-- resourcemanager的兩個名稱 -->
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
</property>

<!-- 配置rm1、rm2的主機  -->
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>master</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>data1</value>
</property>

<!-- 配置yarn web訪問的埠 -->
<property>
  <name>yarn.resourcemanager.webapp.address.rm1</name>
  <value>master:8088</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.rm2</name>
  <value>data1:8088</value>
</property>

<!-- 配置zookeeper的地址 -->
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>master:2181,data1:2181,data2:2181</value>
</property>

<!-- 配置zookeeper的存儲位置 -->
<property>
  <name>yarn.resourcemanager.zk-state-store.parent-path</name>
  <value>/rmstore</value>
</property>

<!--  yarn restart-->
<!-- 開啟resourcemanager restart -->
<property>
  <name>yarn.resourcemanager.recovery.enabled</name>
  <value>true</value>
</property>

<!-- 配置resourcemanager的狀態存儲到zookeeper中 -->
<property>
  <name>yarn.resourcemanager.store.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

<!-- 開啟nodemanager restart -->
<property>
  <name>yarn.nodemanager.recovery.enabled</name>
  <value>true</value>
</property>

<!-- 配置rpc的通信埠 -->
<property>
  <name>yarn.nodemanager.address</name>
  <value>0.0.0.0:45454</value>
</property>
<!--配置Web Application Proxy安全代理(防止yarn被攻擊)-->
<property>
<name>yarn.web-proxy.address</name>
<value>0.0.0.0:8888</value>
</property>

</configuration>

註意:

A. yarn.nodemanager.address這個屬性0.0.0.0:45454,在2.6的版本中不要只寫成45454,否則會導致nodemanager啟動不了

B. yarn.nodemanager.resource.memory-mb與yarn.nodemanager.resource.cpu-vcores這兩個屬性,可以預設,在目前的hadoop版本中,如果設置不當,會導致mapreduce程式呈現accepted但是不能run的狀態。在試驗中,2cpu,1G記憶體的配置就出現了這種情況。當設置為8cpu,8G記憶體時卻正常了,即使這不是機器的真實配置。針對這種情況,另一個解決方案是添加yarn.scheduler.minimum-allocation-mb這個屬性:

<property>
  <name>yarn.nodemanager.resource.memory-mb</name>
  <value>2200</value>
  <description>Amount of physical memory, in MB, that can be allocated for containers.</description>
</property>

<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
  <value>500</value>
</property>

由於資源問題而導致的這種情況可參考以下:

http://stackoverflow.com/questions/20200636/mapreduce-jobs-get-stuck-in-accepted-state

http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.9.1/bk_installing_manually_book/content/rpm-chap1-11.html

http://zh.hortonworks.com/blog/how-to-plan-and-configure-yarn-in-hdp-2-0/

C. 如果

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1:https關閉證書跟功能變數名稱的驗證 如果報 In order to validate a domain name for self signed certificates, you MUST use pinning 也是上面這種方式進行解決 2: iOS UIWebView 訪問https繞過證書驗 ...
  • 作為Android四大組件之一,Activity可以說是最基本也是最常見的組件,它提供了一個顯示界面,從而實現與用戶的交互,作為初學者,必須熟練掌握。今天我們就來通過實驗演示,來幫助大家理解Activity的四大啟動模式。 演示效果如下: 第一步:實驗前準備,相關配置文件以及Activity的建立 ...
  • 我們都知道,靜態變數用起來是挺方便的,可是一不小心那就say拜拜了。說一說我在項目中遇到的情況,測試了好多次,最後才發現原因。感動啊! private static String UserRootPath = "/sdcard/User/"+UserManager.username; private ...
  • 這次搭建iOS的ProtocolBuffer編譯器和把*.proto源文件編譯成*.pbobjc.h 和 *.pbobjc.m文件時,碰到不少問題! 搭建pb編譯器到時沒有什麼問題,只是在把*.proto文件編譯出來後,我用cocoaPods集成ProtocolBuffers到自己項目, cocoa ...
  • 從iOS8系統開始,用戶可以在設置裡面設置在WiFi環境下,自動更新安裝的App。此功能大大方便了用戶,但是一些用戶沒有開啟此項功能,因此還是需要在程式裡面提示用戶的 方法一:在伺服器介面約定對應的數據,這樣,伺服器直接傳遞信息,提示用戶有新版本,可以去商店升級 註意:這個方法是有毛病的,若您的Ap ...
  • 這是一篇我曾經拜讀過的資料庫基礎總結性的文章,原文出自園友 "游戲世界" 。最近想重新鞏固一遍,不過原文訪問受限,我在某網站找到爬蟲版,重新排版後轉載至此處。 1.什麼是SQL語句 SQL語言,結構化的查詢語言(Structured Query Language),是關係資料庫管理系統的標準語言。它 ...
  • 初識spark,需要對其API有熟悉的瞭解才能方便開發上層應用。本文用圖形的方式直觀表達相關API的工作特點,並提供瞭解新的API介面使用的方法。例子代碼全部使用python實現。 1. 數據源準備 準備輸入文件: 啟動pyspark: 使用textFile創建RDD: 查看RDD分區與數據: 2. ...
  • 你正在使用 SQL Server 的哪個版本? "我是誰" SQL Server 及其組件的版本、版本類別和更新級別? 作為一個SQL Server資料庫管理者或維護、支持人員,應該會經常問自己這樣一個問題:我當前SQL Server版本號是?當前版本已經有的累計更新、安全更新包有哪些?這麼多包要選 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...