一,環境:
1,主機規劃:
集羣中包括3個節點:hadoop01爲Master,其餘爲Salve,節點之間局域網連接,可以相互ping通。
機器名稱 |
IP地址 |
hadoop01 |
192.168.1.31 |
hadoop02 |
192.168.1.32 |
hadoop03 |
192.168.1.33 |
三個節點上均是CentOS6.3 x86_64系統,並且有一個相同的用戶hadoop。hadoop01做爲master配置NameNode和JobTracker的角色,負責總管分佈式數據和分解任務的執行;另外兩臺配置DataNode和TaskTracker的角色,負責分佈式數據存儲以及任務的執行。安裝目錄統一爲/usr/local下
2,軟件版本:
hadoop-1.2.1.tar.gz,jdk-7u25-linux-x64.rpm
二,準備工作,三臺機器都需要做 ,將三臺機器selinux,iptables停用。
1,安裝jdk
[root@hadoop01 ~]# rpm -ivh jdk-7u25-linux-x64.rpm
[root@hadoop01 ~]# cd /usr/java/
[root@hadoop01 java]# ls
default jdk1.7.0_25 latest
[root@hadoop01 java]# ln -s jdk1.7.0_25 jdk
[root@hadoop01 java]# vim /etc/profile
[root@hadoop01 java]# source /etc/profile 讓其java命令立即生效
[root@hadoop01 java]# java 執行java命令,如果能正常執行就表示java安裝完成
2,添加一個hadoop用戶,用來運行hadoop集羣
3,做三臺機器之間做雙機互信,原因master通過遠程啓動datanode進程和tasktracker進程,如果不做雙機互信,會導致每次啓動集羣服務都會需要密碼
[root@hadoop01 ~]# vim /etc/hosts
將hosts文件分別複製到另外兩臺。
4,切換到hadoop用戶,對其用做雙機互信,先在三臺機器先執行ssh-keygen生成公鑰與私鑰。
將公鑰複製到別的機器,需要對hadoop01,hadoop03,都做相同的動作。
[hadoop@hadoop02 ~]$ ssh-copy-id -i hadoop01
[hadoop@hadoop03 ~]$ ssh-copy-id -i hadoop01
5,同步時間,三臺機器啓用ntpd服務,另外兩臺執行相同的操作
[root@hadoop01 ~]# crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp.api.bz &> /dev/null
三,配置master,也就hadoop01
[root@hadoop01 ~]# tar xf hadoop-1.2.1.tar.gz -C /usr/local/
[root@hadoop01 ~]# chown -R hadoop:hadoop /usr/local/hadoop-1.2.1
[root@hadoop01 ~]# su - hadoop
[hadoop@hadoop01 ~]$ cd /usr/local/hadoop-1.2.1/
(1)Hadoop的配置文件都存儲在conf下,配置文件解釋
hadoop-env.sh:用於定義hadoop運行環境相關的配置信息,比如配置JAVA_HOME環境變量、爲hadoop的JVM指定特定的選項、指定日誌文件所在的目錄路徑以及master和slave文件的位置等;
core-site.xml: 用於定義系統級別的參數,它作用於全部進程及客戶端,如HDFS URL、Hadoop的臨時目錄以及用於rack-aware集羣中的配置文件的配置等,此中的參數定義會覆蓋core-default.xml文件中的默認配置;
hdfs-site.xml: HDFS的相關設定,如文件副本的個數、塊大小及是否使用強制權限等,此中的參數定義會覆蓋hdfs-default.xml文件中的默認配置;
mapred-site.xml:mapreduce的相關設定,如reduce任務的默認個數、任務所能夠使用內存的默認上下限等,此中的參數定義會覆蓋mapred-default.xml文件中的默認配置;
masters: hadoop的secondary-masters主機列表,當啓動Hadoop時,其會在當前主機上啓動NameNode和JobTracker,然後通過SSH連接此文件中的主機以作爲備用NameNode;
slaves:Hadoop集羣的slave(datanode)和tasktracker的主機列表,master啓動時會通過SSH連接至此列表中的所有主機併爲其啓動DataNode和taskTracker進程;
Hadoop-metrics2.properties:控制metrics在hadoop上如何發佈屬性
Log4j.properties:系統日誌文件、namenode審計日誌、tarsktracker子進程的任務日誌屬性
(2)修改hadoop-env.sh
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/hadoop-env.sh
(3)修改core-site.xml
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop01:9000</value>
</property>
</configuration>
hadoop.tmp.dir屬性用於定義Hadoop的臨時目錄,其默認爲/tmp/hadoop-${username}。HDFS進程的許多目錄默認都在此目錄中,/hadoop/tmp目錄,需要注意的是,要保證運行Hadoop進程的用戶對其具有全部訪問權限。
fs.default.name屬性用於定義HDFS的名稱節點和其默認的文件系統,其值是一個URI,即NameNode的RPC服務器監聽的地址(可以是主機名)和端口(默認爲8020)。其默認值爲file:///,即本地文件系統。
(4)修改hdfs-site.xml文件
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.data.dir</name>
<value>/data/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
dfs.name.dir屬性定義的HDFS元數據持久存儲路徑,默認爲${hadoop.tmp.dir}/dfs/name
dfs.replication屬性定義保存副本的數量,默認是保存3份,由於這裏只有兩臺slave。所以設置2。
(5)修改mapred-site.xml文件
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://hadoop01:9001</value>
</property>
</configuration>
(6)編輯masters文件
masters用於指定,輔助名稱節點(SecondaryNameNode)的主機名或主機地址
[hadoop@hadoop01 hadoop-1.2.1]$ vim conf/masters
hadoop01
(7)編輯slaves文件,這個文件只需在master主機上編輯就行
用於指定各從服務器(TaskTracker或DataNode)的主機名或主機地址
hadoop02
hadoop03
在三臺機器上分別創建兩個目錄:
[root@hadoop01 local]# mkdir -p /hadoop/data
[root@hadoop01 local]# mkdir -p /hadoop/tmp
[root@hadoop01 local]# chown -R hadoop:hadoop /hadoop/
[root@hadoop02 local]# mkdir -p /hadoop/data
[root@hadoop02 local]# mkdir -p /hadoop/tmp
[root@hadoop02 local]# chown -R hadoop:hadoop /hadoop/
[root@hadoop03 local]# mkdir -p /hadoop/data
[root@hadoop03 local]# mkdir -p /hadoop/tmp
[root@hadoop03 local]# chown -R hadoop:hadoop /hadoop/
(8)配置slave:將配置的hadoop整個目錄複製到hadoop02,haoop03
[root@hadoop01 ~]# scp -rp /usr/local/hadoop-1.2.1 hadoop02:/usr/local/
[root@hadoop01 ~]# scp -rp /usr/local/hadoop-1.2.1 hadoop03:/usr/local/
修改權限:
[root@hadoop02 ~]# chown -R hadoop:hadoop /usr/local/hadoop-1.2.1/
[root@hadoop03 ~]# chown -R hadoop:hadoop /usr/local/hadoop-1.2.1/
四,啓動集羣:
1、格式化名稱節點
與普通文件系統一樣,HDFS文件系統必須要先格式化,創建元數據數據結構以後才能使用。
[hadoop@hadoop01 hadoop-1.2.1]$ bin/hadoop namenode -format
如果格式化出錯,一般會提示錯誤,就像下面,已經在提示哪個文件,第幾行,根據提示檢查即可。
[hadoop@hadoop01 ~]$ bin/start-all.sh
[hadoop@hadoop01 ~]$ jps 查看進程是否起來。secondarynamenode,nomenode,jobtracker三個進程必須都有,才正常。
8549 SecondaryNameNode
8409 NameNode
8611 JobTracker
8986 Jps
或者這種方式查看集羣是否正常
[hadoop@hadoop01 hadoop-1.2.1]$ bin/hadoop dfsadmin -report
Safe mode is ON
Configured Capacity: 37073182720 (34.53 GB)
Present Capacity: 32421658624 (30.2 GB)
DFS Remaining: 32421576704 (30.19 GB)
DFS Used: 81920 (80 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
-------------------------------------------------
Datanodes available: 2 (2 total, 0 dead)
Name: 192.168.0.33:50010
Decommission Status : Normal
Configured Capacity: 18536591360 (17.26 GB)
DFS Used: 40960 (40 KB)
Non DFS Used: 2325061632 (2.17 GB)
DFS Remaining: 16211488768(15.1 GB)
DFS Used%: 0%
DFS Remaining%: 87.46%
Last contact: Sat Aug 31 22:25:13 CST 2013
Name: 192.168.0.32:50010
Decommission Status : Normal
Configured Capacity: 18536591360 (17.26 GB)
DFS Used: 40960 (40 KB)
Non DFS Used: 2326462464 (2.17 GB)
DFS Remaining: 16210087936(15.1 GB)
DFS Used%: 0%
DFS Remaining%: 87.45%
Last contact: Sat Aug 31 22:25:12 CST 2013
測試集羣:
[hadoop@hadoop01 hadoop-1.2.1]$ bin/hadoop jar hadoop-test-1.2.1.jar DFSCIOTest -write -nrFiles 10 -filesize 1000
[hadoop@hadoop01 hadoop-1.2.1]$ bin/hadoop jar hadoop-test-1.2.1.jar DFSCIOTest -read -nrFiles 10 -filesize 1000
hadoop默認監聽的端口:
Hadoop進程監聽的地址和端口
Hadoop啓動時會運行兩個服務器進程,一個爲用於Hadoop各進程之間進行通信的RPC服務器,另一個是提供了便於管理員查看Hadoop集羣各進程相關信息頁面的HTTP服務器。
用於定義各RPC服務器所監聽的地址和端口的屬性有如下幾個:
fs.default.name:定義HDFS的NameNode用於提供URI所監聽的地址和端口,默認端口爲8020;
dfs.datanode.ipc.address:DataNode上RPC服務器監聽的地址和端口,默認爲0.0.0.0:50020;
mapred.job.tracker:JobTracker的PRC服務器所監聽的地址和端口,默認端口爲8021;
mapred.task.tracker.report.address:TaskTracker的RPC服務器監聽的地址和端口;TaskTracker的子JVM使用此端口與TaskTracker進行通信,它僅需要監聽在本地迴環地址127.0.0.1上,因此可以使用任何端口;只有在當本地沒有迴環接口時才需要修改此屬性的值;
除了RPC服務器之外,DataNode還會運行一個TCP/IP服務器用於數據塊傳輸,其監聽的地址和端口可以通過dfs.datanode.address屬性進行定義,默認爲0.0.0.0:50010。
可用於定義各HTTP服務器的屬性有如下幾個:
dfs.http.address:NameNode的HTTP服務器地址和端口,默認爲0.0.0.0:50070;
dfs.secondary.http.address:SecondaryNameNode的HTTP服務器地址和端口,默認爲0.0.0.0:50090;
mapred.job.tracker.http.addrss:JobTracker的HTTP服務器地址和端口,默認爲0.0.0.0:50030;
dfs.datanode.http.address:DataNode的HTTP服務器地址和端口,默認爲0.0.0.0:50075;
mapred.task.tracker.http.address:TaskTracker的HTTP服務器地址和端口,默認爲0.0.0.0:50060;上述的HTTP服務器均可以通過瀏覽器直接訪問以獲取對應進程的相關信息,訪問路徑爲http://Server_IP:Port。如namenode的相關信息:
四,排錯思路
1,是否是hadoop.tmp.dir,dfs.data.dir屬性,如果定義在別的目錄需要在集羣中所有節點都創建,並讓hadoop用戶能夠訪問
2,查看進程對應的端口是否有在監聽。在上面配置中將namenode的端口定義9000,jobtracker定義成9001
[hadoop@hadoop01 hadoop-1.2.1]$ netstat -tunlp |grep 9000
tcp 0 0 ::ffff:192.168.0.31:9000 :::* LISTEN 22709/java
[hadoop@hadoop01 hadoop-1.2.1]$ netstat -tunlp |grep 9001
tcp 0 0 ::ffff:192.168.0.31:9001 :::* LISTEN 22924/java
3,查看日誌,哪個服務沒起來就查看對應的日誌。
4,查看集羣中所有節點的時間是不是一致。
5,iptable與selinux是否阻止。
6,/etc/hosts是否正確。
五,添加節點,刪除節點
添加節點
1.修改host
和普通的datanode一樣。添加namenode的ip
2.修改namenode的配置文件conf/slaves
添加新增節點的ip或host
3.在新節點的機器上,啓動服務
[hadoop@hadoop04
hadoop]# ./bin/hadoop-daemon.sh start datanode
[hadoop@hadoop04
hadoop]# ./bin/hadoop-daemon.sh start tasktracker
4.均衡block
[hadoop@hadoop04
hadoop]# ./bin/start-balancer.sh
1)如果不balance,那麼cluster會把新的數據都存放在新的node上,這樣會降低mapred的工作效率
2)設置平衡閾值,默認是10%,值越低各節點越平衡,但消耗時間也更長
[root@slave-004 hadoop]# ./bin/start-balancer.sh -threshold 5
3)設置balance的帶寬,默認只有1M/s
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>1048576</value>
<description>
Specifies the maximum amount of bandwidth that each datanode
can utilize for the balancing purpose in term of
the number of bytes per second.
</description>
</property>
注意:
1.
必須確保slave的firewall已關閉;
2.
確保新的slave的ip已經添加到master及其他slaves的/etc/hosts中,反之也要將master及其他slave的ip添加到新的slave的/etc/hosts中
刪除節點
1.集羣配置
修改conf/hdfs-site.xml文件
<property>
<name>dfs.hosts.exclude</name>
<value>/data/soft/hadoop/conf/excludes</value>
<description>Names a file that contains a list of hosts that are
not permitted to connect to the namenode. The full pathname of the
file must be specified. If the value is empty, no hosts are
excluded.</description>
</property>
2確定要下架的機器
dfs.hosts.exclude定義的文件內容爲,每個需要下線的機器,一行一個。這個將阻止他們去連接Namenode。如:
haoop04
3.強制重新加載配置
[root@master hadoop]# ./bin/hadoop dfsadmin -refreshNodes
它會在後臺進行Block塊的移動
4.關閉節點
等待剛剛的操作結束後,需要下架的機器就可以安全的關閉了。
[root@master hadoop]# ./bin/ hadoop dfsadmin -report
可以查看到現在集羣上連接的節點
正在執行Decommission,會顯示:
Decommission Status : Decommission in progress
執行完畢後,會顯示:
Decommission Status : Decommissioned
5.再次編輯excludes文件
一旦完成了機器下架,它們就可以從excludes文件移除了
登錄要下架的機器,會發現DataNode進程沒有了,但是TaskTracker依然存在,需要手工處理一下
六,安裝zookeeper:
1,zookeeper概述:
ZooKeeper是一個分佈式開源框架,提供了協調分佈式應用的基本服務,它向外部應用暴露一組通用服務——分佈式同步(Distributed Synchronization)、命名服務(Naming Service)、集羣維護(Group Maintenance)等,簡化分佈式應用協調及其管理的難度,提供高性能的分佈式服務。ZooKeeper本身可以以Standalone模式安裝運行,不過它的長處在於通過分佈式ZooKeeper集羣(一個Leader,多個Follower),基於一定的策略來保證ZooKeeper集羣的穩定性和可用性,從而實現分佈式應用的可靠性。
hadoop01爲zookeeper1,hadoop02爲zookeeper2,hadoop03爲zookeeper3。zookeerper
2,下載zookeeper-3.4.4解壓到/usr/local/下,並修改權限
# chown -R hadoop:hadoop /usr/local/zookeeper-3.4.4/
# 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=/hadoop/zookeeper
# the port at which the clients will connect
clientPort=2181
server.1=hadoop01:28888:38888
server.2=hadoop02:28888:38888
server.3=hadoop03:28888:38888
#
# 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
註解:
tickTime發送心跳時間間隔,單位毫秒
initlimit和sysnclimit,兩者都是以ticktime的總數進行度量(上面的時間爲10*2000=20s)。initLimit參數設定了允許所有跟隨者與領導者進行連接並同步的時間,如果在設定的時間內內,半數以上的跟隨者未能完成同步,領導者便會宣佈放棄領導地位,然後進行另外一次領導 者選舉。如果這種情況經常發生,通過查看日誌中的記錄發現,則表明設定的值太小。
syscLimit參數設定了允許一個跟隨者與領導者進行同步的時間。如果在設定的時間內,一個跟隨者未能完成同步,它將會自己重啓,所有關聯到這個跟隨者的客戶端將連接到另外一個跟隨者。
datadir保存的zk中持久化的數據,zk中存在兩種數據,一種用完即消失,一種需要持久存在,zk的日誌也保存在這
[hadoop@hadoop01 ~]$ mkdir /hadoop/zookeeper/
[hadoop@hadoop01 ~]$ echo "1" > /hadoop/zookeerper/myid
將zookeeper目錄分別複製到hadoop02,hadoop03,並創建/hadoop/zookeeper目錄,並在其目錄下創建其myid。
3,在對應的節點上啓動服務
[hadoop@hadoop01 zookeeper-3.4.4]$ sh bin/zkServer.sh start
三個節點啓動完之後,查看
[hadoop@hadoop01 zookeeper-3.4.4]$ jps
1320 NameNode
2064 Jps
1549 JobTracker
1467 SecondaryNameNode
1996 QuorumPeerMain
[hadoop@hadoop01 zookeeper-3.4.4]$ sh bin/zkServer.sh status 查看當前節點是否是leader
[hadoop@hadoop01 zookeeper-3.4.4]$ sh bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.4/bin/../conf/zoo.cfg
Mode: follower 表示是跟從
七,安裝hbase
HBase集羣需要依賴於一個Zookeeper ensemble。HBase集羣中的所有節點以及要訪問HBase
的客戶端都需要能夠訪問到該Zookeeper ensemble。HBase自帶了Zookeeper,但爲了方便
其他應用程序使用Zookeeper,最好使用單獨安裝的Zookeeper ensemble。
此外,Zookeeper ensemble一般配置爲奇數個節點,並且Hadoop集羣、Zookeeper ensemble、
HBase集羣是三個互相獨立的集羣,並不需要部署在相同的物理節點上,他們之間是通過網
絡通信的。
一,下載hbase-0.94.1 ,並解壓到/usr/local下,hbase的版本需要與hadoop對應,查看是否對應只需要看hbase-0.94.1/lib/hadoop-core後面的版本號是否與hadoop的版本對應,如果不對應,可以將hadoop下hadoop-core文件複製過來,但是不能保證不會有問題
[hadoop@master hbase-0.94.12]$ vim conf/hbase-env.sh
export JAVA_HOME=/usr/java/jdk
export HBASE_CLASSPATH=/usr/local/hadoop-1.0.4/conf
export HBASE_MANAGES_ZK=false
export HBASE_HEAPSIZE=2048
tips:
其中,HBASE_CLASSPATH指向存放有Hadoop配置文件的目錄,這樣HBase可以找到HDFS
的配置信息,由於本文Hadoop和HBase部署在相同的物理節點,所以就指向了Hadoop安
裝路徑下的conf目錄。HBASE_HEAPSIZE單位爲MB,可以根據需要和實際剩餘內存設置,
默認爲1000。HBASE_MANAGES_ZK=false指示HBase使用已有的Zookeeper而不是自帶的。
[root@hadoop01 ~]# source /etc/profile
在hbase-094.1/src/main/resources/hbasse-default.xml可以將這個文件複製到conf目錄下,進行修改
[hadoop@hadoop01 hbase-0.94.1]$ vim conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop01:9000/hbase</value>
<description>The directory shared by region servers.</description>
</property>
<property>
<name>hbase.hregion.max.filesize</name>
<value>1073741824</value>
<description>
Maximum HStoreFile size. If any one of a column families' HStoreFiles has
grown to exceed this value, the hosting HRegion is split in two.
Default: 256M.
</description>
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
<description>
Memstore will be flushed to disk if size of the memstore
exceeds this number of bytes. Value is checked by a thread that runs
every hbase.server.thread.wakefrequency.
</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>The mode the cluster will be in. Possible values are
false: standalone and pseudo-distributed setups with managed Zookeeper
true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
</description>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
<description>Property from ZooKeeper's config zoo.cfg.
The port at which the clients will connect.
</description>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<property>
<name>hbase.zookeeper.property.tickTime</name>
<value>6000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01,hadoop02,hadoop03</value>
<description>Comma separated list of servers in the ZooKeeper Quorum.
For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
By default this is set to localhost for local and pseudo-distributed modes
of operation. For a fully-distributed setup, this should be set to a full
list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh
this is the list of servers which we will start/stop ZooKeeper on.
</description>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/hadoop/hbase</value>
</property>
</configuration>
註釋:
1,hbase.rootdir:hbase所使用的文件系統爲HDFS,根目錄爲hdfs://node0:9000/hbase,該目錄應該由HBase自動創建,只需要指定到正確的HDFS NameNode上即可。
2,hbase.hregion.max.filesize:設置HStoreFile的大小,當 大於這個數時,就會split 成兩個文件
3,hbase.hregion.memstore.flush.size:設置memstore的大小,當大於這個值時,寫入磁盤
4,hbase.cluster.distributed:指定hbase爲分佈式模式
5,hbase.zookeeper.property.clientPort:指定zk的連接端口
6,zookeeper.session.timeout:RegionServer與Zookeeper間的連接超時時間。當超時時間到後,ReigonServer會被Zookeeper從RS集羣清單中移除,HMaster收到移除通知後,會對這臺server負責的regions重新balance,讓其他存活的RegionServer接管.
7,hbase.zookeeper.property.tickTime:
8,hbase.zookeeper.quorum:默認值是 localhost,列出zookeepr的ensemble servers
9,hbase.regionserver.handler.count:
默認值:10
說明:RegionServer的請求處理IO線程數。
調優:
這個參數的調優與內存息息相關。
較少的IO線程,適用於處理單次請求內存消耗較高的Big PUT場景(大容量單次PUT或設置了較大cache的scan,均屬於Big
PUT)或ReigonServer的內存比較緊張的場景。
較多的IO線程,適用於單次請求內存消耗低,TPS要求非常高的場景。設置該值的時候,以監控內存爲主要參考。
這裏需要注意的是如果server的region數量很少,大量的請求都落在一個region上,因快速充滿memstore觸發flush導致的讀寫鎖會影響全局TPS,不是IO線程數越高越好。
壓測時,開啓Enabling RPC-level logging,可以同時監控每次請求的內存消耗和GC的狀況,最後通過多次壓測結果來合理調節IO線程數。
這裏是一個案例?Hadoop
and HBase Optimization for Read Intensive Search Applications,作者在SSD的機器上設置IO線程數爲100,僅供參考。
10,hbase.tmp.dir:指定HBase將元數據存放路徑
[hadoop@hadoop01 hbase-0.94.1]$ vim conf/regionservers 相當於hadoop的slave
hadoop02
hadoop03
11,啓動所有hbase進程
[hadoop@master hbase-0.94.12]$ bin/start-hbase.sh
12,停止
[hadoop@master hbase-0.94.12]$ bin/stop-hbase.sh
13,連接hbase創建表
[hadoop@master hbase-0.94.12]$ bin/hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.12, r1524863, Fri Sep 20 04:44:41 UTC 2013
hbase(main):001:0>
14,創建一個名爲 small的表,這個表只有一個 column family 爲 cf。可以列出所有的表來檢查創建情況,然後插入些值。
hbase(main):003:0> create 'small', 'cf'
0 row(s) in 1.2200 seconds
hbase(main):003:0> list
small
1 row(s) in 0.0550 seconds
hbase(main):004:0> put 'small', 'row1', 'cf:a', 'value1'
0 row(s) in 0.0560 seconds
hbase(main):005:0> put 'small', 'row2', 'cf:b', 'value2'
0 row(s) in 0.0370 seconds
hbase(main):006:0> put 'small', 'row3', 'cf:c', 'value3'
0 row(s) in 0.0450 seconds
15、檢查插入情況.Scan這個表
hbase(main):005:0> scan 'small'
Get一行,操作如下
hbase(main):008:0> get 'small', 'row1'
disable 再 drop 這張表,可以清除你剛剛的操作
hbase(main):012:0> disable 'small'
0 row(s) in 1.0930 seconds
hbase(main):013:0> drop 'small'
0 row(s) in 0.0770 seconds
16,導出與導入
[hadoop@master hbase-0.94.12]$ bin/hbase org.apache.hadoop.hbase.mapreduce.Driver export small small
導出的表,在hadoop文件系統的當前用戶目錄下,small文件夾中。例如,導出後在hadoop文件系統中的目錄結構:
[hadoop@master hadoop-1.0.4]$ bin/hadoop dfs -ls
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2013-10-22 10:44 /user/hadoop/small
[hadoop@master hadoop-1.0.4]$ bin/hadoop dfs -ls ./small
Found 3 items
-rw-r--r-- 2 hadoop supergroup 0 2013-10-22 10:44 /user/hadoop/small/_SUCCESS
drwxr-xr-x - hadoop supergroup 0 2013-10-22 10:44 /user/hadoop/small/_logs
-rw-r--r-- 2 hadoop supergroup 285 2013-10-22 10:44 /user/hadoop/small/part-m-00000
2.把這個表導入到另外一臺集羣中hbase中時,需要把part-m-00000先put到另外hadoop中,假設put的路徑也是:
/user/hadoop/small/
而且,這個要導入的hbase要已經建有相同第表格。
那麼從hadoop中導入數據到hbase:
#hbase org.apache.hadoop.hbase.mapreduce.Driver import small part-m-00000
這樣,沒有意外的話就能正常把hbase數據導入到另外一個hbase數據庫。
17.Web UI
用於訪問和監控Hadoop系統運行狀態
Daemon |
缺省端口 |
配置參數 |
|
HDFS |
Namenode |
50070 |
dfs.http.address |
Datanodes |
50075 |
dfs.datanode.http.address |
|
Secondarynamenode |
50090 |
dfs.secondary.http.address |
|
Backup/Checkpoint node* |
50105 |
dfs.backup.http.address |
|
MR |
Jobracker |
50030 |
mapred.job.tracker.http.address |
Tasktrackers |
50060 |
mapred.task.tracker.http.address |
|
HBase |
HMaster |
60010 |
hbase.master.info.port |
HRegionServer |
60030 |
hbase.regionserver.info.port |
本文出自 “smalldeng” 博客,請務必保留此出處http://smalldeng.blog.51cto.com/1038075/1329290