Hadoop和HBase安裝設置入門篇

測試環境與版本:

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命令》(待發布)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章