測試環境與版本:
Debian 7.8.0 amd64 (虛擬機運行)
JDK 1.7.0_80 64bit
Hadoop 2.7.2
HBase 1.1.3
一. 基礎準備:
創建三臺或更多虛擬機。(由於要在每臺機器上都操作一遍下面的步驟,不少步驟是可以統一進行的,故可在安裝完jdk、hadoop後,再複製虛擬機)
Hadoop 依賴JDK和ssh,首要做的就是安裝相應的軟件。
1.1. 安裝JDK,設置環境變量 (必要)
把jdk安裝包上傳到linux中,並使用tar命令解壓jdk:
tar zxvf jdk-7u80-linux-x64.tar.gz
這裏解壓到: /home/common/jdk1.7.0_80 目錄中
編輯/etc/profile文件:
sudo vi /etc/profile
在結尾加上:
export JAVA_HOME=/home/common/jdk1.7.0_80
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
其中JAVA_HOME部分按照自己實際情況修改
1.2. 安裝ssh(必要)
不少linux發行版已安裝好ssh,使用以下命令可以查看是否已經安裝了ssh:
ps -e | grep sshd
若運行完後沒有任何結果,則可以運行下面的命令進行安裝。
deb系列的linux使用命令:
apt-get install ssh
apt-get install rsync
rmp系列的linux使用命令:
yum install ssh
yum install rsync
1.3. 創建程序使用的用戶 (非必要)
# 增加hadoop用戶組
sudo groupadd hadoop
# 增加hadoop用戶
sudo useradd –d /home/hadoop –m hadoop –g hadoop -s /bin/bash
# 給hadoop用戶設置密碼
sudo passwd hadoop
1.4. 修改主機名 (建議)
由於是複製出來的虛擬機,各系統的主機名是一致的。爲方便識別各臺機器,把每臺機器的主機名進行修改。
使用以下命令進行修改:
sudo vi /etc/hostname
hostname中的字符串就是主機名,把原來的值刪除,輸入自己需要的值。
這裏的例子中,三個系統分別命名爲: master, slave1, slave2
1.5. 修改hosts文件 (建議)
修改hosts文件,把ip與主機名進行對應匹配:
sudo vi /etc/hosts
增加下列三行(ip和主機名根據實際情況填寫):
192.168.3.250 master
192.168.3.251 slave1
192.168.3.252 slave2
1.6. 配置Master無密碼ssh登錄所有Salve (必要)
Master(NameNode )需要通過ssh啓動和停止 Salve(DataNode )上的各種守護進程。若沒有設置無須密碼訪問,則在啓動和停止時,每一個操作Slave的步驟都需要手動輸入密碼,非常不方便。Master(NameNode)設置密鑰對, 並分享公鑰, 可以使NameNode能夠ssh無密碼登錄訪問DataNode節點,簡化操作流程。
1.6.1. 生成密鑰對
使用命令:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
#或者
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
運行後如果有密鑰圖形輸出,則表示生成成功。
運行完成後,會在~/.ssh目錄下生成兩個文件:
私鑰文件:id_rsa
公鑰文件:id_rsa.pub
1.6.2. 分發公鑰
將公鑰文件id_rsa.pub分發到各dataNode節點,使用命令如下:
scp ~/.ssh/id_rsa.pub 遠程用戶名@遠程服務器IP或主機名:~/
例如:
scp ~/.ssh/id_rsa.pub hadoop@slave1:~/
scp ~/.ssh/id_rsa.pub hadoop@slave2:~/
拷貝的時候,需要輸入密碼。等配置完成後,slave(dataNode) 節點已經有了master的公鑰,則後續再使用ssh連接到slave時,不再需要密碼。
在master和各個slave上,將公鑰文件id_rsa.pub內容追加到authorized_keys文件中: (在master上,也會有使用ssh登錄自己的情況,所以master上也需要將公鑰放到自己的authorized_keys中)
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
說明:有的教程會要求在slave上也進行同樣的操作:生成密鑰對並且分發公鑰到各個節點。但在實際測試中,只有master去連接並控制slave的情況,還沒遇到過slave主動去ssh連接master或者其他slave的情況。故只分發master的公鑰即可。
1.6.3. 測試連接
使用ssh命令進行測試連接,如:
ssh slave1
若沒有要求輸入密碼,則配置成功。
注意:以上測試時,第一次需要輸入yes確認,此後就不需要再輸入任何內容了。
二. 安裝Hadoop
2.1 解壓Hadoop文件
使用tar命令解壓hadoop:
tar zxvf hadoop-2.7.2.tar.gz
這裏解壓到:/home/common /hadoop-2.7.2 目錄中
增加環境變量HADOOP_HOME (非必須,經測試未設置該變量也沒有引起任何異常。)
編輯/etc/profile文件:
sudo vi /etc/profile
在結尾加上:
export HADOOP_HOME=/home/common/hadoop-2.7.2
2.2 配置Hadoop
hadoop大部分的設置都可以用默認的,一般要修改的文件爲${HADOOP_HOME}/etc/hadoop/目錄下的:
hadoop-env.sh # 環境變量設置
slaves # slave節點列表
core-site.xml # 核心設置
hdfs-site.xml # dfs文件系統,NameNode和DataNode 相關設置
yarn-site.xml # yarn。 ResourceManager和NodeManager 相關設置
mapred-site.xml # MapReduce 相關設置
2.2.1 配置 hadoop-env.sh文件 (必須)
修改hadoop安裝目錄下的etc/hadoop/hadoop-env.sh文件,
編輯JAVA_HOME變量:
(不能直接用默認的$JAVA_HOME,下同)
# The java implementation to use.
export JAVA_HOME=/home/common/jdk1.7.0_80
2.2.2 配置 slaves文件 (必須)
修改hadoop安裝目錄下的etc/hadoop/slaves文件,
填寫slave節點列表,每一個節點單獨一行,可以是主機名或者IP地址,如下:
slave1
slave2
2.2.3 配置 core-site.xml文件 (建議)
修改hadoop安裝目錄下的etc/hadoop/core-site.xml文件,建議配置。
編輯hadoop核心配置,示例如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<!-- 必須設置此屬性,不要用默認值,默認在/tmp目錄中,重啓後會被刪除 -->
<name>hadoop.tmp.dir</name>
<value>/home/common/hadoop-2.7.2/tmp</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
參數說明:
名稱 | 說明 |
---|---|
fs.defaultFS | NameNode URI, 文件系統的host和port |
io.file.buffer.size | Size of read/write buffer used in SequenceFiles. |
hadoop.tmp.dir | 需要手動建立該文件夾。默認值爲/tmp/hadoop-${user.name}。 系統默認的臨時目錄放在/tmp路徑下。而這個目錄很有可能在每次重啓後都會被幹掉,造成某些後續定稿的基礎數據會丟失(如hdfs格式化之後寫入的數據)。 |
更多選項及選項的默認值,可以參見以下官網說明:
http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/core-default.xml
2.2.4 配置 hdfs-site.xml文件 (可選)
修改hadoop安裝目錄下的etc/hadoop/hdfs-site.xml文件,可選配置,可以使用默認設置。
編輯NameNode和DataNode 相關設置,示例如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<!-- 可選。hdfs格式化時,namenode需要往此路徑寫基礎數據 -->
<name>dfs.namenode.name.dir</name>
<value>file:/home/common/hadoop-2.7.2/tmp/dfs/name</value>
</property>
<property>
<!-- 可選。hdfs格式化時,datanode需要往此路徑寫基礎數據 -->
<name>dfs.datanode.data.dir</name>
<value>file:/home/common/hadoop-2.7.2/tmp/dfs/data</value>
</property>
</configuration>
參數說明:
名稱 | 說明 |
---|---|
dfs.replication | replication 是數據副本數量,默認爲3。 |
dfs.namenode.name.dir | 可選,默認值爲:file://${hadoop.tmp.dir}/dfs/name。 hdfs格式化時,namenode需要往此路徑寫基礎數據。 |
dfs.datanode.data.dir | 可選,默認值爲:file://${hadoop.tmp.dir}/dfs/data 。 hdfs格式化時,datanode需要往此路徑寫基礎數據。 |
更多實用配置:
名稱 | 說明 |
---|---|
dfs.http.address | hadoop網頁管理端訪問地址。默認爲master的50070端口。 示例:<value>master:50070</value> |
dfs.namenode.secondary.http-address | 第二個(備份的)NameNode節點的http地址。 示例:<value>master2:50070</value> |
更多選項及選項的默認值,可以參見以下官網說明:
http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
2.2.5 配置 yarn-site.xml文件(可選)
修改hadoop安裝目錄下的etc/hadoop/yarn-site.xml文件,可選配置,可以使用默認設置。
編輯ResourceManager和NodeManager 相關設置,示例如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
參數說明:
名稱 | 說明 |
---|---|
yarn.resourcemanager.address | ResourceManager host:port for clients to submit jobs. client提交job的地址。參數格式:host:port. 默認端口爲8032 |
yarn.resourcemanager.scheduler.address | ResourceManager host:port for ApplicationMasters to talk to Scheduler to obtain resources. Scheduler獲取資源地址。參數格式:host:port。 默認端口爲8030 |
yarn.resourcemanager.resource-tracker.address | ResourceManager host:port for NodeManagers. 默認端口爲8031 |
yarn.resourcemanager.admin.address | ResourceManager host:port for administrative commands. 管理命令通訊地址。默認端口爲8033 |
yarn.resourcemanager.webapp.address | ResourceManager web-ui host:port. 網頁地址。默認端口爲8088 |
更多選項及選項的默認值,可以參見以下官網說明:
http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
2.2.6 配置 mapred-site.xml文件 (必須)
修改hadoop安裝目錄下的etc/hadoop/mapred-site.xml文件。
如果是單機模式,配置mapred-site.xml是可選的。
如果是分佈式模式,那麼最少要設置mapreduce.framework.name 參數,默認值爲local,我們需要把它設置成yarn。否則mapreduce的job只在master上運行,不會分配下去。
編輯MapReduce配置,示例如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
參數說明:
名稱 | 說明 |
---|---|
mapreduce.framework.name | 執行框架名稱,默認值爲local。 |
mapreduce.jobhistory.address | MapReduce JobHistory Server host:port Default port is 10020. 任務歷史服務器地址,格式爲:host:port。 默認端口爲10020。 |
mapreduce.jobhistory.webapp.address | MapReduce JobHistory Server Web UI host:port Default port is 19888. 任務歷史服務器WEB地址,格式爲:host:port。 默認端口爲19888。 |
更多選項及選項的默認值,可以參見以下官網說明:
http://hadoop.apache.org/docs/r2.7.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml
2.3 拷貝Hadoop配置到其他節點上
單個節點完成hadoop的配置後,把這些配置拷貝到其他節點上。
可以把整個hadoop目錄打包拷貝,也可以使用命令:
scp -r 需要拷貝的文件夾 遠程用戶名@遠程服務器ip:目標目錄
把整個hadoop目錄拷貝到其他節點上。
2.4 啓動及驗證Hadoop
2.4.1 格式化HDFS文件系統
就像一般的文件系統,使用前需要先格式化一次。只需格式化一次,後續啓動無須再格式化。
在Master機器上切換到Hadoop安裝目錄,運行以下命令:(命令中的namenode是固定參數,不是host名稱)
./bin/hdfs namenode –format
若這裏格式化報URI has an authority component 錯誤, 則很有可能是hdfs-site.xml中dfs.namenode.name.dir 和 dfs.datanode.data.dir 屬性未正常配置。
2.4.2 啓動Hadoop
在Master機器上切換到Hadoop安裝目錄,運行:
./sbin/start-all.sh
或者分別執行:
./sbin/start-dfs.sh
./sbin/start-yarn.sh
兩者等效。
通過日誌可以看出啓動過程爲:
1、start-dfs:首先啓動namenode 接着啓動datanode1,datanode2,…,然後啓動secondary namenode。
2、start-yarn:啓動resource manager,然後啓動各個slave的nodemanager。
2.4.3 停止Hadoop
在Master機器上切換到Hadoop安裝目錄,運行:
./sbin/stop-all.sh
或者分別執行:
./sbin/stop-dfs.sh
./sbin/stop-yarn.sh
兩者等效。
停止過程與啓動過程類似。
2.4.4 驗證
啓動Hadoop。
驗證方式一:用”jps”命令查看java進程
jps(Java Virtual Machine Process Status Tool)是JDK提供的一個顯示當前所有java進程pid的命令。
在Master上運行jps查看進程,示例如下:
hadoop@master:/home/common/hadoop-2.7.2$ jps
20165 NameNode
20772 Jps
20356 SecondaryNameNode
20507 ResourceManager
在Slave上運行jps查看進程,示例如下:
hadoop@slave1:/home/common/hadoop-2.7.2$ jps
9593 DataNode
9702 NodeManager
9826 Jps
驗證方式二:用”hadoop dfsadmin -report” 查看Hadoop集羣的狀態
在Master中切換到Hadoop安裝目錄,運行命令:
./bin/hadoop dfsadmin –report
查看Hadoop集羣的狀態。裏面會列出各個dataNode的狀態。
2.4.5 通過網頁查看集羣信息
啓動Hadoop。
通過http://master:50070 查看hdfs的NameNode信息。 (該地址在hdfs-site.xml中定義)
通過http://master:8088 查看ResourceManager信息。 (該地址在yarn-site.xml中定義)
三. 安裝HBase
3.1 解壓HBase文件
使用tar命令解壓hbase:
tar zxvf hbase-1.1.3-bin.tar.gz
這裏解壓到:/home/common /hbase-1.1.3 目錄中
3.2 配置HBase
一般要修改的文件爲conf目錄下的:
hbase-env.sh # 環境變量設置
regionservers # slave節點列表
hbase-site.xml # hbase和zookeeper設置
3.2.1 配置hbase-env.sh (必須)
修改hbase安裝目錄下的conf/hbase-env.sh文件,
編輯JAVA_HOME變量:
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/home/common/jdk1.7.0_80
編輯HBASE_MANAGES_ZK。 hbase在分佈式模式運行時,需要依賴zookeeper集羣。此參數定義是否使用hbase內置的zookeeper,true爲是,fase爲否,註釋掉該參數時默認爲true。
# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=true
3.2.2 配置hbase-site.xml (必須)
修改hbase安裝目錄下的conf/hbase-site.xml文件。
配置hbase和zookeeper設置。示例如下:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
</configuration>
參數說明:
名稱 | 說明 |
---|---|
hbase.rootdir | 數據庫文件存儲路徑。 非集羣下使用本地文件系統,參數值格式爲:file:///path; 集羣環境下可以使用hdfs文件系統,值格式爲:hdfs://host:port/path; 在hdfs中,不需要事先創建好該文件夾,hbase會自動創建。 |
hbase.cluster.distributed | 定義hbase是否運行在分佈式模式。false爲單機模式,true爲分佈式模式。 |
hbase.zookeeper.quorum | zookeeper集羣節點,以英文逗號分割。 |
3.2.3 配置regionservers (必須)
修改hbase安裝目錄下的conf/regionservers文件,需要跑region server的節點列表,每行一個, 示例如下:
slave1
slave2
3.2.4 替換hadoop依賴包 (未驗證)
(說明:有的教程有替換jar包的步驟,有的教程沒有此步驟。此次實驗已經替換了jar包,故當前尚未確定該步驟是否必須。)
由於 HBase 依賴 Hadoop,所以HBase的lib目錄中配套發佈了一份Hadoop的jar包。該套裝jar僅用於獨立模式。在分佈式模式下,Hadoop版本必須和HBase下的版本一致。用你運行的分佈式Hadoop版本jar文件替換HBase lib目錄下的Hadoop jar文件,以避免版本不匹配問題。Hadoop版本不匹配問題有不同表現,但看起來都像掛掉了。
步驟:
1. 刪除hbase安裝目錄的lib目錄下、以hadoop開頭的jar包。
2. 在 hadoop安裝目錄的share/hadoop目錄下,從common、hdfs、mapreduce、yarn這幾個子目錄中,找出hadoop開頭的jar包,拷貝到hbase安裝目錄的lib目錄下。
3.3 拷貝到其他集羣節點上
使用命令:
scp -r 需要拷貝的文件夾 遠程用戶名@遠程服務器ip:目標目錄
3.4 啓動hbase
3.4.1 啓動hbase
先啓動hadoop。在Master機器上切換到hbase安裝目錄,運行:
./bin/start-hbase.sh
啓動過程:
1. 啓動zookeeper
2. 啓動master
3. 啓動region server
3.4.2 停止hbase
在Master機器上切換到hbase安裝目錄,運行:
./bin/stop-hbase.sh
3.4.3 通過網頁查看HBase信息
啓動HBase。
通過http://master:16010 查看Hbase 的狀態信息。
(該端口可以在hbase-site.xml文件中自定義,屬性名爲hbase.master.info.port, 默認值爲16010)
3.4.4 啓動hbase shell
啓動HBase。
運行下列命令啓動hbase的shell程序:
./bin/hbase shell
關於hbase shell的常用命令,參考另一篇文檔《HBase基本概念和常用shell命令》(待發布)