一個知乎上的問題:Hbase的Region server和hadoop的datanode是否可以部署在一台服務器上?如果是的話,二者是否是一對一的關系?
部署在同一台服務器上,可以減少數據跨網絡傳輸的流量。 但不是一對一對的關系,首先,數據還hdfs中保存N份,默認是三分,也就是說數據會分布在三個datanode上,即使regionserver上只保存一個region,它也可以與三個datanode交互,更何況,一台regionserver可以保存多個region.
參考:https://www.zhihu.com/question/20376001/answer/15602027
然后來看一下關於節點的動態增加與動態刪除問題
1、hdfs增加datanode
1> 准備新節點的操作系統,安裝好需要的軟件,實現ssh無密碼登錄
2> 各個節點的配置文件需要更改
$HBASE_HOME/conf/regionservers
$HADOOP_HOME/etc/hadoop/slaves
/etc/hosts
3> 在新節點執行以下命令
hadoop-daemon.sh start datanode yarn-daemon.sh start nodemanager
4> 刷新一下
yarn rmadmin -refreshNodes hdfs dfsadmin -refreshNodes # 查看狀態 hdfs dfsadmin -report
5> 設置帶寬,配置均衡器balancer,一般不在主節點上運行,以避免影響業務,可以有專門的balancer節點
hdfs dfsadmin -setBalancerBandwidth 1048576 # 如果某個datanode的磁盤里用率比平均水平高出5%,Blocks向其他低於平均水平的datanode中傳送 start-balancer.sh -threshold 5
說明:
隨時時間推移,各個datanode上的塊分布來越來越不均衡,這將降低MR的本地性,導致部分datanode相對更加繁忙。
balancer是一個hadoop守護進程,它將塊從忙碌的datanode移動相對空閑的datanode,同時堅持塊復本放置策略,將復本分散到不同的機器、機架。
balancer會促使每個datanode的使用率與整個集群的使用率接近,這個“接近”是通過-threashold參數指定的,默認是10%。
不同節點之間復制數據的帶寬是受限的,默認是1MB/s,可以通過hdfs-site.xml文件中的dfs.balance.bandwithPerSec屬性指定(單位是字節)。
建議定期執行均衡器,如每天或者每周。
2、hdfs刪除datanode
1> $HADOOP_HOME/etc/hadoop/excludes文件中添加需刪除的主機名,一般在執行命令的主節點上添加即可
2> 刷新一下
yarn rmadmin -refreshNodes
hdfs dfsadmin -refreshNodes
3> 刪除后修正以下配置文件,
$HBASE_HOME/conf/regionservers
$HADOOP_HOME/etc/hadoop/slaves
/etc/hosts
注意:關於hadoop集群刪除數據節點一直處於Decommission in progress狀態問題
在小集群中(例如3台機器),如果datanode數據量小於文件的備份數設置(默認是3),有可能會出現這樣的情況,被數據節點一直處於Decommission in progress狀態。
這個是hadoop的一個未處理的問題,因為大的集群一般不會出現這種情況,即datanode數據量小於文件的備份數設置
解決方案是:嘗試將文件備份數設置為1或者2,然后嘗試從三台datanode中exclude掉一台
以下是修改已有的副本數量的命令,一般不建議使用,而應提前在配置文件中進行優化,以避免出現此類問題
hdfs dfs -setrep -w 2 -R /文件
3、hbase增加regionserver節點
1> 執行以下命令啟動regionserver
hbase-daemon.sh start regionserver
2> 在新啟動的節點上
打開hbase shell,如下設置:
balance_switch true
4、hbase刪除regionserver節點
1> 執行命令
graceful_stop.sh data1
2> 由於會關閉hbase的balancer,因此需要在其他regionserver節點上
打開hbase shell,檢查hbase狀態
同時重新設置:
balance_switch true
此外,注意執行的順序,如果一個datanodet同時作為regionserver,先刪除regionserver,再刪除datanode,反之,新增的節點,先設為datanode,再設為regionserver
。