hbase集群安裝與部署

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

1、相關環境 centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 hbase1.2.4 本篇文章僅涉及hbase集群的搭建,關於hadoop與zookeeper的相關部署參見上篇文章http://www.cnblogs.com/learn21cn/p/6184490. ...


1、相關環境

centos7 hadoop2.6.5 zookeeper3.4.9 jdk1.8 hbase1.2.4

本篇文章僅涉及hbase集群的搭建,關於hadoop與zookeeper的相關部署參見上篇文章http://www.cnblogs.com/learn21cn/p/6184490.html

目標如下:

master 192.1.68.1.215 HMaster
data1 192.168.1.218 HMaster備用 HRegionServer
data2 192.168.1.219 HRegionServer

 

 

 

2、關於時間同步的問題

安裝hbase,需要伺服器之間的時間同步,10秒之內是可接受的範圍

1> 安裝與配置NTP

每個節點都要安裝,以master來作為時間伺服器

# 安裝NTP
yum install ntp -y 
# 查看NTP狀態
service ntpd status
# 配置文件
vim /etc/ntp.conf

以下是配置文件內容

#禁止所有機器來進行連接
restrict default ignore
#允許內網其他機器同步時間
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
#配置時間伺服器的地址為本機(註視掉server0~server3)
server  127.127.1.0

之後個節點與master進行同步,並設置NTP開機自動啟動

# 終端執行命令同步時間         
ntpdate 192.168.1.215
# 設置開機自動啟動        
systemctl restart ntpd.service
systemctl enable ntpd.service

以上為最初同步

2> 設置定時任務,使伺服器定時同步時間

執行以下命令 :

crontab -e    

 配置文件寫入以下內容:

0    1    *    *    *    /usr/sbin/ntpdate    192.168.1.215    >> /data/ntpd.log

保存後執行以下命令查看定時任務,並重啟服務

crontab -l
# 重啟
systemctl restart crontab.service

3、設置linux系統最大進程數和最大文件打開數

使用root賬號

root            soft    nproc           50000
root            hard    nproc           50000
root            soft    nofile          25535
root            hard    nofile          25535
hadoop          soft    nproc           50000
hadoop          hard    nproc           50000
hadoop          soft    nofile          25535
hadoop          hard    nofile          25535

設置完重新登錄shell,執行以下命令查看結果

ulimit -a 

4、調整linux內核參數

打開文件 /etc/sysctl.conf,進行以下設置

net.ipv4.ip_forward= 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 268435456
# 提高系統支持的最大SYN半連接數,表示SYN隊列的長度,預設為1024,加大隊列長度為,可以容納最多等待連接的網路連接數
net.ipv4.tcp_max_syn_backlog = 65000
net.core.netdev_max_backlog= 32768
net.core.somaxconn = 32768
fs.file-max = 65000
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_timestamps = 1
# 減少系統SYN連接重試次數(預設是5)
# 為了打開對端的連接,內核需要發送一個SYN並附帶一個回應前面一個SYN的ACK,也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄連接之前發送SYN+ACK包的數量。
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
# 以下兩參數可解決生產場景中大量連接的Web(cache)伺服器中TIME_WAIT過多問題
# 表示開啟重用。允許將TIME-WAIT的sockets重新用於新的TCP連接,預設為0表示關閉
net.ipv4.tcp_tw_reuse = 1
# 打開TIME-WAIT套接字重用及回收功能,表示開啟TCP連接中TIME-WAIT的sockets的快速收回功能,預設為0表示關閉。
net.ipv4.tcp_tw_recycle = 1
# 當keepalive起用的時候,TCP發送keepalive消息的頻度,預設是2小時,改為1200秒
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies= 1
# 減少處於FIN-WAIT-2連接狀態的時間,使系統可以處理更多的連接,預設值是60秒
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 3
# 允許系統打開的埠範圍,表示用於向外連接的埠範圍
net.ipv4.ip_local_port_range = 1024 65535
# 網卡eno16777736
net.ipv4.conf.eno16777736.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 網卡eno16777736
net.ipv4.conf.eno16777736.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route= 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
kernel.core_pattern = /tmp/core
vm.overcommit_memory = 1

之後,一定要執行以下命令進行檢查,防止出現錯誤,例如“沒有那個文件或目錄”之類

# 從指定的文件載入系統參數,如不指定即從/etc/sysctl.conf中載入
sysctl -p

5、配置文件

 1> hbase-env.sh

# 配置JDK安裝路徑
export JAVA_HOME=/usr/java/jdk
# 配置Hadoop安裝路徑
export HADOOP_HOME=/usr/Apache/hadoop
# 設置HBase的日誌目錄
export HBASE_LOG_DIR=${HBASE_HOME}/logs
# 設置HBase的pid目錄
export HBASE_PID_DIR=${HBASE_HOME}/pids
# 使用獨立的ZooKeeper集群
export HBASE_MANAGES_ZK=false
# 設置HBase記憶體堆的大小
export HBASE_HEAPSIZE=1024
# 設置HMaster最大可用記憶體
export HBASE_MASTER_OPTS="-Xmx512m"
# 設置HRegionServer最大可用記憶體
export HBASE_REGIONSERVER_OPTS="-Xmx512m"

註意:
企業實際部署時,datanode一般設置16到20G左右,過小與過大都不合適;regionserver一般可以設置32到48,或者以上;hmaster一般4到8G足夠了。此外實際部署當中,hmaster與regionserver一般不在同一機器中。

2> hbase-site.xml參數說明見註釋

<configuration>
    <!-- 開啟分散式模式 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
  
    <!-- 設置HRegionServers目錄 -->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://nscluster/hbase</value>
    </property>
  
    <!-- 設置HMaster的rpc埠 -->
    <property>
        <name>hbase.master.port</name>
        <value>16000</value>
    </property>
  
    <!-- 設置HMaster的http埠 -->
    <property>
        <name>hbase.master.info.port</name>
        <value>16010</value>
    </property>
  
    <!-- 指定緩存文件存儲的路徑 -->
    <property>
        <name>hbase.tmp.dir</name>
        <value>/usr/Apache/hbase/data/tmp</value>
    </property>  
    
    <!-- 指定ZooKeeper集群位置 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>master,data1,data2</value>
    </property>
  
    <!-- 指定ZooKeeper集群埠 -->
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
  
    <!--指定Zookeeper數據目錄,需要與ZooKeeper集群上配置相一致 -->
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/usr/Apache/zookeeper/data</value>
    </property>
  
    <!-- ZooKeeper客戶端同時訪問的併發連接數,需要與ZooKeeper集群上配置相一致,可設置為2000 -->
    <property>
        <name>hbase.zookeeper.property.maxClientCnxns</name>
        <value>60</value>
    </property>
  
    <!-- 優化配置項 -->
    <!-- 關閉分散式日誌拆分 -->
    <property>
        <name>hbase.master.distributed.log.splitting</name>
        <value>false</value>
    </property>
  
    <!-- hbase客戶端rpc掃描一次獲取的行數,增大參數可以提高掃描次數,但同時會增加記憶體的使用 -->
    <property>
        <name>hbase.client.scanner.caching</name>
        <value>2000</value>
    </property>
  
    <!-- HRegion分裂前最大的文件大小(以下數字標識了10G)當HStoreFile 大於這個文件時,就會split 成兩個文件 -->
    <property>
        <name>hbase.hregion.max.filesize</name>
        <value>10737418240</value>
    </property>
  
    <!-- 一個HRegionServer中最大的region數量 -->
    <property>
        <name>hbase.regionserver.reginoSplitLimit</name>
        <value>2000</value>
    </property>
   
    <!-- 當某一個region的storefile個數達到該值則block寫入,等待compact,或者說定義storefile數量達到多少時block住update操作  預設7 -->
    <!-- 設置過小會使影響系統吞吐率,但也不應過大,經驗值是15到20左右。太大的話會在系統壓力很大時使storefile過多,compact一直無法完成,掃庫或者數據讀取的性能會受到影響。-->
    <!--同時,可以適當提高一些hbase.hstore.compactionThreshold,增加compact的處理線程數,加快compact的處理速度而避免block-->  
    <property>
        <name>hbase.hstore.blockingStoreFiles</name>
        <value>14</value>    
    </property>
  
    <!-- StoreFile的個數超過這個數就開始合併 預設值為3-->
    <property>
        <name>hbase.hstore.compactionThreshold</name>
        <value>6</value>
    </property>
  
  
    <!-- 超過memstore大小的倍數達到該值則block所有寫入請求,自我保護 -->
    <property>
        <name>hbase.hregion.memstore.block.multiplier</name>
        <value>20</value>
    </property>
  
    <!-- service工作的sleep間隔 預設10000-->
    <property>
        <name>hbase.server.thread.wakefrequency</name>
        <value>500</value>
    </property>
     
    <!-- 以下三項通常聯合起來調整 -->  
    <!-- MemStore flush 順序是按照大小降序執行的,直到刷新到MemStore使用記憶體略小於該百分比 -->
    <property>
        <name>hbase.regionserver.global.memstore.lowerLimit</name>
        <value>0.3</value>
    </property>
  
    <!-- hbase.regionserver.global.memstore.upperLimit與hbase.block.cache.size這兩項合起來不能超過0.8,誰大誰小取決於業務偏向於讀還是寫,如果讀多一些就把讀緩存設置大一些 -->  
    <!-- 預設0.4 當MemStore使用記憶體總量達到該值(總量的百分比)時,block所有更新,將會有多個MemStores flush到文件中-->
    <property>
        <name>hbase.regionserver.global.memstore.upperLimit</name>
        <value>0.39</value>
    </property>
    <!-- 讀緩存占堆的百分比,預設0.25 -->  
    <property>
        <name>hbase.block.cache.size</name>
        <value>0.4</value>
    </property>
  
    <!-- RegionServer處理rpc線程數,預設10 -->
    <property>
        <name>hbase.reginoserver.handler.count</name>
        <value>300</value>
    </property>
  
    <!-- 客戶端最大重試次數,預設10 -->
    <property>
        <name>hbase.client.retries.number</name>
        <value>5</value>
    </property>
  
    <!-- 客戶端重試的休眠時間 -->
    <property>
        <name>hbase.client.pause</name>
        <value>100</value>
    </property>
</configuration>

3> 配置regionservers文件

目錄:$HBASE_HOME/conf/,添加以下節點

data1
data2

4> 配置backup-masters文件

目錄:$HBASE_HOME/conf/,添加以下節點

data1

表示data1是一個備用的HMaster節點

6、創建配置文件中出現的文件夾

cd /usr/Apache/hbase
# 創建hbase的緩存文件目錄
mkdir data/tmp
# 創建hbase的日誌文件目錄
mkdir logs
# 創建hbase的pid文件目錄
mkdir pids

7、環境變數設置

~/.bashrc 或 ~/.bash_profile

export HADOOP_HOME=/usr/Apache/hadoop
export ZOOKEEPER_HOME=/usr/Apache/zookeeper
export HBASE_HOME=/usr/Apache/hbase
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:$HBASE_HOME/bin

8、啟動與關閉

start-hbase.sh
stop-hbase.sh

master節點

訪問:192.168.1.215:16010/

 data1節點會作為一個備用節點,如果master節點關閉,data1節點會成為主節點,這就是設置了backup-masters文件的作用,當然前提hbase使用了zookeeper集群。

 訪問:192.168.1.218:16010/

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 1、先引入jquery.js 2、接著引入luhmCheck.js //銀行卡號Luhm校驗 3、看下麵的案例: 下麵是js 測試卡號: 1、6222600810010710887 2、6225881414207430 ...
  • 引言 提到前端往往很多人的映像就是入門簡單,HTML、CSS加一起一個星期基本上就能大概上手,JS難一點但也能很快寫一些簡單的小效果,在網上隨便一搜索各種特效代碼隨意用,一個新手前端也能在很短的時間里寫出炫酷的頁面效果,然而入門簡單並不意味著前端這碗飯很好吃,做慣了切圖、佈局、扣特效的前端新同學在向 ...
  • 直接插入排序演算法(Straight Insertion Sort),是排序演算法中簡單的一種演算法,基本思想如下: 將一個記錄插入到已排序好的有序表中,從而得到一個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是一個有序的子序列,然後從第2個記錄逐個進行插入,直至整個序列有序為止。 要點:設立哨兵 ...
  • 本案例來自React.js中文官網對應內容。 一. 運行環境 二. 組件架構 App下有兩個子組件 (評論列表)和 (評論區),其中 下又有一個子組件 (評論) Comment包括一個h2的評論人名稱,一個span的評論內容,獲取數據之後,Comment組件以數組的形式傳入CommentList。 ...
  • 1.html 2.app.js ...
  • 1.定義變數:Sass中定義變數的關鍵字是'$'(畢竟程式員缺錢),並使用冒號(:)進行賦值,例如: $width:200px;//定義了一個名為width的變數,值為200px 2.普通變數和預設變數: 普通變數便是我們在大括弧外用上面的方式聲明的變數,可全局使用。 預設變數需要在聲明的變數後加上 ...
  • 關於排序,其實不管是哪種語言,都有它內置的排序函數,我們要用的時候調用就行了,既然如此,我們為什麼還要講這個東西呢?我想,其實,我們講排序更多是在於排序中包含的思想演算法,因為,演算法對於電腦來說相當重要,一個好的演算法能夠讓電腦的效率達到事半功倍的效果,所以,演算法是電腦語言中一門相當熱門的課程,它 ...
  • var http = require( 'http' ) var handlePaths = [] /** * 初始化路由配置數組 */ function initRotute() { handlePaths.push( '/' ) handlePaths.push( '/login' ) hand... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...