Hadoop+Hbase+Zookeeper分布式存儲構建


目錄:

 

Hadoop+Hbase+zookeeper分布式存儲構建

前言* HadoopApache開源組織的一個分布式計算開源框架,在很多大型網站上都已經得到了應用,如亞馬遜、FacebookYahoo等等。對於我來說,最近的一個使用點就是服務集成平台的日志分析。服務集成平台的日志量將會很大,而這也正好符合了分布式計算的適用場景(日志分析和索引建立就是兩大應用場景)。

今天我們來實際搭建一下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  (充當namenodesecondary namenodeResourceManager角色)
192.168.172.88   datanode1  (充當datanodenodemanager角色)
192.168.172.89   datanode2  (充當datanodenodemanager角色)

二、軟件准備

1Hadoop可以從Apache官方網站直接下載最新版本Hadoop2.2。官方目前是提供了linux32位系統可執行文件,所以如果需要在64位系統上部署則需要單獨下載src 源碼自行編譯。(如果是真實線上環境,請下載64hadoop版本,這樣可以避免很多問題,這里我實驗采用的是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

(注我們需要在namenodedatanode三台服務器上都配置hosts解析)

第二步:從namenode上無密碼登陸各台datanode服務器,需要做如下配置:

namenode 128上執行ssh-keygen,一路Enter回車即可。
然后把公鑰/root/.ssh/id_rsa.pub拷貝到datanode服務器即可,拷貝方法如下:
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.172.88
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.172.89

三、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)

(注我們需要在namenodedatanode三台服務器上都安裝Java JDK版本)

  • Hadoop版本安裝

官方下載的hadoop2.2.0版本,不用編譯直接解壓安裝就可以使用了,如下:

第一步解壓:

tar  -xzvf  hadoop-2.2.0.tar.gz &&mv hadoop-2.2.0  /data/hadoop/
(注* 先在namenode服務器上都安裝hadoop版本即可,datanode先不用安裝,待會修改完配置后統一安裝datanode

第二步配置變量:

/etc/profile末尾繼續添加如下代碼,並執行source /etc/profile生效。
export HADOOP_HOME=/data/hadoop/
export PATH=$PATH:$HADOOP_HOME/bin/
export JAVA_LIBRARY_PATH=/data/hadoop/lib/native/
(注* 我們需要在namenodedatanode三台服務器上都配置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/  root@192.168.172.$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 -xzf zookeeper-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整個程序同步到另外兩台node2node3

執行如下腳本:

for  i  in  `seq 88 89` ; do rsync -aP --delete  /export/servers/zookeeper-3.4.6/  root@192.168.172.$i:/export/servers/zookeeper-3.4.6/  rsync -av  /export/zookeeper/  root@192.168.172.$i:/export/; done

然后分別修改node2node3myid23,命令如下:

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,然后執行如下命令:

tar xf 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內容如下:

export JAVA_HOME=/export/servers/jdk1.6.0_25/

export HBASE_OPTS="-XX:+UseConcMarkSweepGC"

export HBASE_MANAGES_ZK=false

export HADOOP_HOME=/export/hadoop/

 

vim regionservers內容如下:

node2

node3

 

然后將node1 habse配置同步至node2node3

for  i  in  `seq 88 89` ; do rsync -av  /export/hbase/  root@192.168.172.$i:/export/  ; done

最好在node1啟動整個集群hbase即可:

cd /export/hbase/;sh bin/start-hbase.sh

查看node1 JAVA進程信息如下:

 

最好查看hbase日志如下:

 

通過web查看hbase截圖如下:

 

NODE2狀態:

---------------------------------------------------------------------------

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM