本文記錄zookeeper+hadoop+hbase+kafka+storm集羣的搭建過程。
準備工作
硬件環境
3臺物理主機
192.168.0.191 – dc01
192.168.0.192 – dc02
192.168.0.193 – dc03
系統全部爲centos6.8.軟件環境
1) jdk1.8.0_121
2) zookeeper-3.4.10
3) hadoop-2.6.5
4) hbase-1.2.6
5) kafka_2.11-0.10.2.0
6) apache-storm-1.1.0jdk的安裝在此不做贅述,有疑問可自行百度。
設置主機名
三臺機器都需設置,後面所有操作都通過主機名連接。vim /etc/sysconfig/network
ip爲192.168.0.191的機器修改爲如下內容:
NETWORKING=yes HOSTNAME=dc01
其他兩臺機器分別設置爲dc02和dc03。
修改host文件
vim /etc/hosts
在末尾追加如下內容:
192.168.0.191 dc01 192.168.0.192 dc02 192.168.0.193 dc03
三臺機器做相同操作。
設置ssh免密碼登錄
以dc01爲例,執行以下命令ssh-keygen -t rsa # 連續三次回車,即在本地生成了公鑰和私鑰,不設置密碼 ssh-copy-id root@dc01 # 按提示輸入dc01的密碼 ssh-copy-id root@dc02 # 按提示輸入dc02的密碼 ssh-copy-id root@dc03 # 按提示輸入dc03的密碼
如果端口不是默認的22則參照此處設置。
dc02和dc03重複dc01的操作,設置完成後任意兩臺機器之間不需要密碼可直接登錄,例如從dc01登錄到dc03,只需在dc01輸入”ssh dc03”即可。
開始安裝
所有軟件安裝目錄爲/usr/local/
安裝zookeeper
下載zookeeper安裝文件zookeeper-3.4.10.tar.gz到/usr/local/下
執行以下命令:
#解壓文件
tar -zxvf zookeeper-3.4.10.tar.gz
#修改文件夾名稱
mv zookeeper-3.4.10 zookeeper
cd zookeeper/
#zookeeper配置文件名爲zoo.cfg
cp conf/zoo_sample.cfg conf/zoo.cfg
編輯zoo.cfg
vim 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.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# 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
server.1=dc01:2888:3888
server.2=dc02:2888:3888
server.3=dc03:2888:3888
在zookeeper下新建data目錄
mkdir data
新增myid文件,該文件內容與zoo.cfg最後三行內容有關,server.x=host:port1:port2,myid中寫入的就是x對應的值,不同主機文件內容不同。
echo '1' > data/myid
使用scp命令將dc01上已配置好的zookeeper文件複製到其他兩臺機器
scp -r /usr/local/zookeeper root@dc02:/usr/local/zookeeper
scp -r /usr/local/zookeeper root@dc03:/usr/local/zookeeper
操作完成後將dc02上的myid文件內容改爲2,dc03中的myid內容改爲3。
啓動zookeeper
$zookeeper_home/bin/zkServer.sh start
三個節點做同樣操作,啓動完成後可使用”zkServer.sh status”查看運行狀態。
還有一個地方需要修改,默認情況下啓動zookeeper後會在當前路徑下生成一個zookeeper.out的日誌文件,如果我們需要指定輸出到固定路徑,那麼可以修改bin下的zkEnv.sh文件,找到ZOO_LOG_DIR並修改爲指定路徑即可。
安裝hadoop
hbase基於hdfs存儲,所以安裝hbase前必須先安裝hadoop,不同版本hbase對應的hadoop版本不同,安裝前請確認兼容性。
下面開始安裝:
在/usr/local/下新建hadoop目錄,hadoop下再創建hdfs目錄。
cd /usr/local/
mkdir -p hadoop/hdfs
下載hadoop安裝文件hadoop-2.6.5.tar.gz,放入hadoop目錄下
tar -zxvf hadoop-2.6.5.tar.gz
修改配置文件
cd hadoop-2.6.5/etc/hadoop/
需要修改的配置文件有四個,hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves,因爲暫時不使用map-reduce所以不用配置yarn相關文件。
1、修改hadoop-env.sh
vim hadoop-env.sh
修改JAVA_HOME爲jdk安裝路徑(如果沒有則添加一行)
export JAVA_HOME=/usr/local/java/jdk1.8.0_121
# 如果機器端口不是默認的22,還需要添加下面這一行指定端口號
# export HADOOP_SSH_OPTS="-p 1122"
# 1122爲端口號,如果不添加執行./sbin/start-dfs.sh時會報如下錯誤:
# ssh: connect to host .. port 22: Connection refused
2、修改 core-site.xml
vim core-site.xml
修改後內容如下:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://dc01:9000</value>
<description>HDFS的URI,文件系統://namenode標識:端口號</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
<description>namenode上本地的hadoop臨時文件夾,目錄無需預先創建,會自動創建</description>
</property>
</configuration>
3、修改hdfs-site.xml
vim hdfs-site.xml
修改後內容如下:
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
<description>namenode上存儲hdfs名字空間元數據,目錄無需預先創建,會自動創建 </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
<description>datanode上數據塊的物理存儲位置,目錄無需預先創建,會自動創建</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>副本個數,配置默認是3,應小於datanode機器數量</description>
</property>
</configuration>
4、修改slaves
vim slaves
將原來的localhost改成如下內容:
dc02
dc03
修改完成後將安裝目錄copy到其他兩臺機器上:
scp -r /usr/local/hadoop root@dc02:/usr/local/hadoop
scp -r /usr/local/hadoop root@dc03:/usr/local/hadoop
啓動集羣(只需在dc01操作)
第一次啓動時需要先格式化,以後無需進行此操作。
cd /usr/local/hadoop/hadoop-2.6.5
#格式化
./bin/hdfs namenode -format
#啓動集羣
./sbin/start-dfs.sh
啓動成功後可使用jps命令查看,dc01有NameNode和SecondaryNameNode進程,dc02和dc03有DataNode進程則集羣啓動成功。
安裝hbase
集羣機器劃分:dc01作爲NameNode節點,dc02和dc03作爲DataNode節點。
下載hbase安裝文件並放入/usr/local/目錄下
1、解壓並修改文件夾名稱:
tar -zxvf hbase-1.2.6-bin.tar.gz
mv hbase-1.2.6 hbase
2、修改配置文件,配置hbase集羣需要修改三個配置文件,分別爲hbase-env.sh、hbase-site.xml、regionservers。
cd hbase/conf/
1)修改hbase-env.sh
vim hbase-env.sh
需要修改兩行內容
修改JAVA_HOME的值爲jdk的安裝目錄,修改後如下:
export JAVA_HOME=/usr/local/java/jdk1.8.0_121
修改HBASE_MANAGES_ZK,該行默認被註釋掉了,默認使用hbase自帶的zookeeper協調集羣,我們需要把註釋去掉並修改值爲false,表示使用自己安裝的zookeeper。修改如下:
export HBASE_MANAGES_ZK=false
2)修改hbase-site.xml
vim hbase-site.xml
在 中添加如下內容:
<property>
<name>hbase.rootdir</name>
<!-- 數據存儲位置,需要和hadoop配置文件core-site.xml中的fs.default.name值一致 -->
<value>hdfs://dc01:9000/hbase</value>
</property>
<property>
<!-- 設置是否分佈式環境,false表示單機,默認爲false -->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<!-- 此處配置主機名 -->
<value>dc01,dc02,dc03</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hbase/data/zookeeper</value>
</property>
3)修改regionservers
vim regionservers
該文件配置數據存儲在哪個節點,即DataNode節點的位置。默認爲localhost,表示數據存儲在本機,需要修改爲兩個DataNode節點的主機名,修改後內容如下:
dc02
dc03
上述操作完成後使用scp命令將hbase所有文件複製到dc02和dc03。
scp -r /usr/local/hbase root@dc02:/usr/local/hbase
scp -r /usr/local/hbase root@dc03:/usr/local/hbase
3、啓動hbase
#啓動
./bin/start-hbase.sh
啓動完成後可通過jps命令查看,dc01有HMaster進程,dc02和dc03有HRegionServer進程則表示集羣啓動成功。如果任一節點沒有對應的進程則表示集羣啓動失敗,可查看日誌查找失敗原因。此處需要注意一點,三臺機器的系統時間相差不能太大,否則會出現啓動失敗的情況,同步系統時間後重試即可。
4、連接hbase
hbase提供了shell操作接口,使用一些命令連接hbase
./bin/hbase shell
連接後可通過相應的shell命令操作hbase,hbase的操作此處不做討論,請自行google。
hbase還可以通過第三方插件apache-phoenix進行連接,該插件支持以sql的方式操作hbase。下載和hbase版本對應的phoenix安裝包,解壓後將phoenix-[phoenix版本]-HBase-[hbase版本]-server.jar(本例中使用的爲phoenix-4.10.0-HBase-1.2-server.jar)複製到hbase的lib目錄下重啓hbase即可(每個節點都需要進行此操作),phoenix操作方法請自行搜索資料學習。
安裝kafka
下載kafka安裝文件並放入/usr/local/目錄下,解壓
tar -zxvf kafka_2.11-0.10.2.0.tgz
mv kafka_2.11-0.10.2.0 kafka
kafka的配置比較簡單,只需修改config/下的server.properties文件即可,需要修改三處位置。
vim ./config/server.properties
1)修改broker.id
該值在各個節點中不能重複,推薦使用機器ip地址最後一位,如dc01上該值爲1,dc02上爲2,dc03上爲3。
2)修改log.dirs
該值表示日誌文件存儲位置,默認爲/tmp/kafka-logs,使用該配置時機器重啓後文件會被清空,需要修改爲其他位置,建議修改爲:
log.dirs=/usr/local/kafka/kafka-logs
3)修改zookeeper.connect
這一項比較重要,表示kafka數據在zookeeper中的存儲位置,以後連接kafka時會使用該值。本例中修改爲:
zookeeper.connect=dc01:2181,dc02:2181,dc03:2181/kafka
4)配置topic是否可刪除,默認該項是被註釋的,如需要支持topic刪除請放開該註釋
delete.topic.enable=true
5)配置是否自動創建topic,默認情況下Producer往一個不存在的Topic發送message時會自動創建這個Topic
auto.create.topics.enable=false
注:修改完成後將整個kafka目錄複製到dc02和dc03中即完成集羣配置(不要忘記修改broker.id,不同機器不能重複)。
啓動kafka
nohup ./bin/kafka-server-start.sh ./config/server.properties &
停止kafka
./bin/kafka-server-stop.sh &
注:kafka的啓動和停止需要分別在每個節點操作。
安裝storm
下載storm安裝文件放入/usr/local/目錄,解壓
tar -zxvf apache-storm-1.1.0.tar.gz
mv apache-storm-1.1.0 storm
storm配置比較簡單,只需修改storm.yaml
cd storm/conf/
vim storm.yaml
添加以下內容:
# 注意:嚴格遵守ymal格式,相同層級關係必須左對齊
storm.zookeeper.servers:
- "dc01"
- "dc02"
- "dc03"
nimbus.seeds: ["dc01"]
drpc.servers:
- "dc01"
storm.local.dir: "/usr/local/storm/local-dir"
上述配置storm.zookeeper.servers表示zookeeper節點,nimbus.seeds表示nimbus服務在dc01節點,drpc.servers表示drpc服務在dc01節點,storm.local.dir表示日誌文件位置。
配置完成後將storm安裝目錄複製到dc02和dc03上。
scp -r /usr/local/storm/ root@dc02:/usr/local/storm/
scp -r /usr/local/storm/ root@dc03:/usr/local/storm/
啓動storm集羣
在dc01上執行以下命令
cd /usr/local/storm
./bin/storm nimbus > /dev/null 2>&1 &
./bin/storm ui > /dev/null 2>&1 &
./bin/storm drpc > /dev/null 2>&1 &
在dc02和dc03上執行以下命令:
./bin/storm supervisor > /dev/null 2>&1 &
等待啓動完成後可通過瀏覽器訪問http://dc01:8080查看集羣運行狀態。
啓動成功界面:
總結
由於hbase需要基於zookeeper和hadoop運行,kafka和storm需要基於zookeeper運行。所以啓動順序應該爲zookeeper->hadoop->hbase->kafka->storm,停止順序相反。
本文內容比較粗略,有錯誤或遺漏的地方歡迎各位指正。