前言* Hadoop是Apache開源組織的一個分佈式計算開源框架,在很多大型網站上都已經得到了應用,如亞馬遜、Facebook和Yahoo等等。對於我來說,最近的一個使用點就是服務集成平臺的日誌分析。服務集成平臺的日誌量將會很大,而這也正好符合了分佈式計算的適用場景(日誌分析和索引建立就是兩大應用場景)。
今天我們來實際搭建一下Hadoop 2.2.0版,實戰環境爲目前主流服務器操作系統CentOS 6.5系統。
一、實戰環境
系統版本:CentOS 6.5 x86_64 JAVA版本:JDK-1.7.0_25 Hadoop版本:hadoop-2.2.0 192.168.172.59 namenode (充當namenode、secondary namenode和ResourceManager角色) 192.168.172.88 datanode1 (充當datanode、nodemanager角色) 192.168.172.89 datanode2 (充當datanode、nodemanager角色)
二、系統準備
1)Hadoop可以從Apache官方網站直接下載最新版本Hadoop2.2。官方目前是提供了linux32位系統可執行文件,所以如果需要在64位系統上部署則需要單獨下載src 源碼自行編譯。(如果是真實線上環境,請下載64位hadoop版本,這樣可以避免很多問題,這裏我實驗採用的是32位版本)
Hadoop下載地址 http://apache.claz.org/hadoop/common/hadoop-2.2.0/ Java 下載下載 http://www.oracle.com/technetwork/java/javase/downloads/index.html
2)我們這裏採用三臺CnetOS服務器來搭建Hadoop集羣,分別的角色如上已經註明。
第一步:我們需要在三臺服務器的/etc/hosts裏面設置對應的主機名如下(真實環境可以使用內網DNS解析)
[root@node1 hadoop]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.172.59 node1 192.168.172.88 node2 192.168.172.89 node3(注* 我們需要在namenode、datanode三臺服務器上都配置hosts解析)
3)從namenode上無密碼登陸各臺datanode服務器,需要做如下配置:
在namenode 128上執行ssh-keygen,一路Enter回車即可。 然後把公鑰/root/.ssh/id_rsa.pub拷貝到datanode服務器即可,拷貝方法如下: ssh-copy-id -i .ssh/id_rsa.pub [email protected] ssh-copy-id -i .ssh/id_rsa.pub [email protected]
三、Java安裝配置
tar -xvzf jdk-7u25-linux-x64.tar.gz &&mkdir -p /usr/java/ ; mv /jdk1.7.0_25 /usr/java/ 即可。 安裝完畢並配置java環境變量,在/etc/profile末尾添加如下代碼: export JAVA_HOME=/usr/java/jdk1.7.0_25/ export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVE_HOME/lib/dt.jar:$JAVE_HOME/lib/tools.jar:./
保存退出即可,然後執行source /etc/profile 生效。在命令行執行java -version 如下代表JAVA安裝成功。
[root@node1 ~]# java -version java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
(注* 我們需要在namenode、datanode三臺服務器上都安裝Java JDK版本)
四、Hadoop版本安裝
官方下載的hadoop2.2.0版本,不用編譯直接解壓安裝就可以使用了,如下:
1)解壓:
tar -xzvf hadoop-2.2.0.tar.gz &&mv hadoop-2.2.0 /data/hadoop/ (注* 先在namenode服務器上都安裝hadoop版本即可,datanode先不用安裝,待會修改完配置後統一安裝datanode)
2)配置變量:
在/etc/profile末尾繼續添加如下代碼,並執行source /etc/profile生效。 export HADOOP_HOME=/data/hadoop/ export PATH=$PATH:$HADOOP_HOME/bin/ export JAVA_LIBRARY_PATH=/data/hadoop/lib/native/ (注* 我們需要在namenode、datanode三臺服務器上都配置Hadoop相關變量)
五、配置Hadoop
在namenode上配置,我們需要修改如下幾個地方:
1)修改vi/data/hadoop/etc/hadoop/core-site.xml 內容爲如下:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://node1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop-${user.name}</value> <description>A base for other temporary directories.</description> </property> </configuration>
2)修改vi/data/hadoop/etc/hadoop/mapred-site.xml內容爲如下:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapred.job.tracker</name> <value>node1:9001</value> </property> </configuration>
3)修改vi/data/hadoop/etc/hadoop/hdfs-site.xml內容爲如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.name.dir</name> <value>/data/hadoop/data_name1,/data/hadoop/data_name2</value> </property> <property> <name>dfs.data.dir</name> <value>/data/hadoop/data_1,/data/hadoop/data_2</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
4)在/data/hadoop/etc/hadoop/hadoop-env.sh文件末尾追加JAV_HOME變量:
echo "export JAVA_HOME=/usr/java/jdk1.7.0_25/" >> /data/hadoop/etc/hadoop/hadoop-env.sh
5)修改 vi /data/hadoop/etc/hadoop/masters文件內容爲如下:
node1
6)修改vi/data/hadoop/etc/hadoop/slaves文件內容爲如下:
node2 node3
如上配置完畢,以上的配置具體含義在這裏就不做過多的解釋了,搭建的時候不明白,可以查看一下相關的官方文檔。
如上namenode就基本搭建完畢,接下來我們需要部署datanode,部署datanode相對簡單,執行如下操作即可。
for i in `seq 88 89 ` ; do scp -r /data/hadoop/ [email protected].$i:/data/ ; done
自此整個集羣基本搭建完畢,接下來就是啓動hadoop集羣了。
六、啓動hadoop並測試
在啓動hadoop之前,我們需要做一步非常關鍵的步驟,需要在namenode上執行如下命令初始化name目錄和數據目錄。
cd /data/hadoop/ ; ./bin/hadoop namenode -format
那如何算初始化成功呢,如下截圖成功創建name目錄即正常:
然後啓動hadoop所有服務,如下命令:
[root@node1 hadoop]# ./sbin/start-all.sh
我們還可以查看相應的端口是否啓動:netstat -ntpl
訪問如下地址:http://192.168.172.59:50070/
訪問地址:http://192.168.172.59:8088/
搭建完成後,我們簡單的實際操作一下,如下圖:
自此hadoop基本搭建完畢。
七、部署ZooKeeper服務
在node1上配置:
下載zookeeper3.4.6版本:
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz tar -xzfzookeeper-3.4.6.tar.gz -C /export/servers/
#vim /export/servers/ zookeeper-3.4.6/conf/zoo.cfg寫入如下內容:
# 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. dataDir=/export/zookeeper # the port at which the clients will connect clientPort=2181 initLimit=5 syncLimit=2 dataLogDir=/export/zookeeper/logs server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888
注意:zk裏面的node節點名稱要一一對應哦,然後創建zk數據目錄和日誌路徑:
mkdir -p /export/zookeeper/logs echo 1 >/export/zookeeper/myid
如上在node1上配置好zk後,把zk整個程序同步到另外兩臺node2、node3。
執行如下腳本:
for i in `seq 88 89` ; do rsync -aP--delete /export/servers/zookeeper-3.4.6/ [email protected].$i:/export/servers/zookeeper-3.4.6/ ;rsync-av /export/zookeeper/ [email protected].$i:/export/; done
然後分別修改node2、node3的myid爲2和3,命令如下:
在node2上執行:
echo 2 >/export/zookeeper/myid
在node3上執行:
echo 3 >/export/zookeeper/myid
執行完後,分別啓動三臺服務器的zk服務:
cd/export/servers/zookeeper-3.4.6/ ;./bin/zkServer.sh start
如上配置,zookeeper配置完畢。
八、部署Hbase服務
在node1上配置:
下載軟件:hbase-0.96.2-hadoop2.tar.gz,然後執行如下命令: tarxf hbase-0.96.2-hadoop2.tar.gz ;mv hbase-0.96.2-hadoop2 /export/hbase 然後進入hbase配置文件目錄,如下圖: cd/export/hbase/conf/
vim hbase-site.xml內容如下:
<configuration> <property> <name>hbase.tmp.dir</name> <value>/export/hbase/tmp</value> </property> <property> <name>zookeeper.session.timeout</name> <value>3600000</value> </property> <property> <name>hbase.zookeeper.property.tickTime</name> <value>180000</value> </property> <property> <name>hbase.rootdir</name> <value>hdfs://node1:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>node1,node2,node3</value> </property> <!--禁止magor compaction--> <property> <name>hbase.hregion.majorcompaction</name> <value>0</value> </property> <!--禁止split--> <property> <name>hbase.hregion.max.filesize</name> <value>536870912000</value> </property> <!----> <property> <name>hbase.hstore.blockingStoreFiles</name> <value>2100000000</value> </property> <property> <name>hbase.regionserver.handler.count</name> <value>100</value> </property> </configuration>
vim hbase-env.sh內容如下:
exportJAVA_HOME=/export/servers/jdk1.6.0_25/ exportHBASE_OPTS="-XX:+UseConcMarkSweepGC" exportHBASE_MANAGES_ZK=false exportHADOOP_HOME=/export/hadoop/
vim regionservers內容如下:
node2 node3
然後將node1 habse配置同步至node2、node3:
for i in `seq 88 89` ; do rsync -av /export/hbase/ [email protected].$i:/export/ ; done
最好在node1啓動整個集羣hbase即可:
cd /export/hbase/;shbin/start-hbase.sh
查看node1 JAVA進程信息如下:
最好查看hbase日誌如下:
通過web查看hbase截圖如下:
NODE2狀態:
-----------------------------------------------------------
你若覺得作者的文章寫得不錯,請獎勵作者幾錠銀子,讓作者感受到來自你滿滿的鼓勵和繼續創作的動力!我們支持原創!鼓勵原創!
打賞之後,文章底部顯示參與打賞者的記錄,可以直接通過微信掃描打賞喲,直接按打賞根據提示操作。
自定義打賞金額,友情提示打賞金額不要超過50元哦,土豪可以隨意哦,51CTO謝謝您對作者的支持!謝謝你的慷慨大方!