大數(shù)據(jù)Hadoop2.7+zookeeper+Hbase+Hive完全分布式搭建

最近在新電腦上配置大數(shù)據(jù)開發(fā)環(huán)境赶掖,踩了不少坑,更具網(wǎng)上的一些方法整理了一套比較簡單的hadoop+zookeeper+hbase+hive環(huán)境的搭建(由于虛擬機環(huán)境均以root用戶操作);

  • 除了zookeeper的myid佃扼,其他設(shè)置所有虛擬機上都一樣,所以可以一臺虛擬機全部安裝配置完以后直接完全克隆幾個,再配置單獨的靜態(tài)ip汗盘,hostname和myid即可;
  • 當(dāng)然最穩(wěn)妥的是配置完ssh后直接克隆忆畅,每配置完一個工具以后scp到各個節(jié)點下衡未,每裝完一個工具后都測試運行一下,確保無誤家凯;
  • 要養(yǎng)成每次成功安裝完一個工具后都快照的習(xí)慣缓醋,無數(shù)突發(fā)情況帶來的教訓(xùn)啊绊诲;

所需環(huán)境和工具

  • VMware虛擬機
  • CentOS7并配置好各個節(jié)點的靜態(tài)ip(先裝一臺CentOS送粱,最后再克隆多臺
  • JDK1.8
  • mysql5.7
  • Xshell或FinalShell

HostName及HOST配置

由于分布式環(huán)境需要連接各個節(jié)點的linux系統(tǒng),為了方便我們需要配置了HostName主機名和hosts文件掂之;

1. 設(shè)置hostname

hostnamectl set-hostname susur1 #susur1為1號節(jié)點名

2. 查看hostname

[root@susur1 ~]# hostname
susur1

顯示出你配置的hostname就算成功了抗俄;

3. 配置hosts文件(地址/etc/hosts)

vim /etc/hosts

將這個追加的hosts文件最下面(格式為:節(jié)點ip + 節(jié)點hostname)脆丁;

192.168.160.129 susur1
192.168.160.130 susur2
192.168.160.131 susur3

你也可以將這段hosts代碼加到主機的hosts文件,這樣就可以方便的通過hostname訪問虛擬機上的linux系統(tǒng)动雹;

======MacOS的地址和Linux的一樣====槽卫,Windows的地址為C:\Windows\System32\drivers\etc;==

配置成功以后測試一些可不可以ping通胰蝠;

hekaideMacBook-Pro:~ hekai$ ping susur1
PING susur1 (192.168.160.129): 56 data bytes
64 bytes from 192.168.160.129: icmp_seq=0 ttl=64 time=0.260 ms
64 bytes from 192.168.160.129: icmp_seq=1 ttl=64 time=0.222 ms
64 bytes from 192.168.160.129: icmp_seq=2 ttl=64 time=0.182 ms

配置ssh免密鑰登陸

為了保證分布式環(huán)境下各個節(jié)點直接可以無障礙相互訪問歼培,我們需要配置ssh密鑰保證各個節(jié)點可以相互免密鑰登陸;

1. 查看ssh是否啟動

systemctl status sshd.service

如果報命令不存在的話需要安裝ssh

2. yum安裝ssh(ubuntu是apt)

yum install -y openssl openssh-server

3. 修改配置文件

ssh連接時如果報權(quán)限錯誤茸塞,我們需要修改sshd配置文件躲庄,打開權(quán)限;

# 輸入指令
vim /etc/ssh/sshd_config
# 將 PermitRootLogin, RSAAuthentication, PubkeyAuthentication 設(shè)置為 yes

4.啟動ssh服務(wù)

#開啟ssh服務(wù)
systemctl start sshd.service
#設(shè)置開機運行
systemctl enable sshd.service
#重啟ssh服務(wù)
systemctl restart sshd.service

5.生成ssh公鑰私鑰

####一路回車即可
[root@susur1 ~]]#  ssh-keygen -t rsa

6.設(shè)置.ssh文件訪問權(quán)限

#在root目錄下
cd ~
chmod 700 .ssh
chmod 600 .ssh/*
ls -la .ssh

7.拷貝公鑰

在生成完公鑰和私鑰之后.ssh文件目錄下為:

-rw-------. 1 root root 1679 Sep 24 20:15 id_rsa
-rw-r--r--. 1 root root  393 Sep 24 20:15 id_rsa.pub
-rw-r--r--. 1 root root  552 Sep 25 11:33 known_hosts

我們將id_rsa.pub復(fù)制為authorized_keys

cp id_rsa.pub authorized_keys

#這里解釋一下:在別的教程中的方式是將公鑰文件復(fù)制到別的節(jié)點下的.ssh文件中的钾虐,這樣確實是規(guī)范的噪窘;
#ssh免密鑰登陸的原理是通過私鑰驗證對應(yīng)的公鑰完成免密鑰登陸;
#由于我們最后再直接克隆系統(tǒng)所有信息都是一樣效扫,所以只需要在一臺機器上配置即可倔监,無需傳輸公鑰文件;

8.驗證ssh免密鑰(克隆系統(tǒng)以后驗證)

ssh susur2 #hostname

ZooKeeper安裝及配置

  • 首先從官網(wǎng)上下載合適的zookeeper版本 我下載的是3.4.14(3.5的版本我之前測試的時候不穩(wěn)定)

<html>
https://www.apache.org/dyn/closer.cgi/zookeeper/
</html>

將下載的tar包上傳到Linux系統(tǒng)
  • 解壓tar包
mkdir /usr/local/zookeeper #新建zookeeper目錄

tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/zookeeper/ #解壓到zookeeper目錄
  • 進(jìn)入到conf目錄下配置配置文件
cd /usr/local/zookeeper/zookeeper-3.4.14/conf
cp zoo_sample.cfg zoo.cfg#默認(rèn)是沒有zoo.cfg的所有要將zoo_sample.cfg改名
vim zoo.cfg#配置zoo.cfg
    • 需要修改的部分
#修改data文件目錄
dataDir=/usr/local/zookeeper/zookeeper-3.4.14/data

#zookeeper集群的節(jié)點菌仁,添加到末尾
server.1=susur1:2888:3888
server.2=susur2:2888:3888
server.3=susur3:2888:3888
  • 創(chuàng)建data文件目錄
mkdir -p /usr/local/zookeeper/zookeeper-3.4.14/data
  • 設(shè)置當(dāng)前zookeeper的權(quán)值(1號節(jié)點為1丐枉,2號節(jié)點為2,3號節(jié)點為3...)
echo 1 > /usr/local/zookeeper/zookeeper-3.4.14/data/myid
  • 配置環(huán)境變量
vim /etc/profile

#zookeeper
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.14
export PATH=$ZOOKEEPER_HOME/bin:$PATH
  • 啟動zookeeper集群(每個節(jié)點都要啟動)
zkServer.sh start
zkServer.sh status
zkServer.sh stop

搭建hadooper*

http://hadoop.apache.org/releases.html 同上官網(wǎng)下載tar包(下載bin版本)我用的是版本是2.7.7

  • 上傳Linux 解壓
mkdir /usr/local/hadoop

tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local/hadoop/
  • 修改配置文件(hadoop的配置文件所有節(jié)點都一樣即可掘托,最后克隆完即可運行)
cd /usr/local/hadoop/hadoop-2.7.7/etc/hadoop
  • 配置JAVA_HOME
    • hadoop-env.sh
    • mapred-env.sh
    • yarn-env.sh

將這個三個文件中的JAMA_HOME路徑改為系統(tǒng)上的jdk路徑

export JAVA_HOME=/usr/local/java/jdk1.8.0_221/
  • core-site.xml
  <property>
  <name>fs.defaultFS</name>
  <value>hdfs://susur</value>
  </property>
  <property>
  <name>ha.zookeeper.quorum</name>
  <value>susur1:2181,susur2:2181,susur3:2181</value>
  </property>
<!-- 指定hadoop運行時產(chǎn)生文件的存儲目錄 -->
  <property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/local/hadoop/hadoop-2.7.7/tmp</value>
  </property>
  • hdfs-site.xml
 <property>
        <name>dfs.nameservices</name>
        <value>susur</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.susur</name>
        <value>nn1,nn2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.susur.nn1</name>
        <value>susur1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.susur.nn2</name>
        <value>susur2:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.susur.nn1</name>
        <value>susur1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.susur.nn2</name>
        <value>susur2:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://susur1:8485;susur2:8485;susur3:8485/susur</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/var/tmp/hadoop/ha/jn</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.susur</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
        <value>shell(true)</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_dsa</value>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
   
   <!--訪問免驗證-->
   <property>
        <name>dfs.permissions</name>
        <value>false</value>
        <description>
            If "true", enable permission checking in HDFS.
            If "false", permission checking is turned off,
            but all other behavior is unchanged.
            Switching from one parameter value to the other does not change the mode,
            owner or group of files or directories.
        </description>
    </property>
  • mapred-site.xml
<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
</property>

<property>
   <name>mapreduce.jobhistory.address</name>
   <value>susur1:10020</value>
</property>
<property>
   <name>mapreduce.jobhistory.webapp.address</name>
   <value>susur1:19888</value>
</property>
  • yarn-sit.xml

  <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
  </property>
  
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>mr_susur</value>
  </property>
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>susur3</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>susur1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>susur1:2181,susur2:2181,susur3:2181</value>
  </property>
  • 修改slaves(hadoop3.0以上是workers)
susur1
susur2
susur3
  • 配置環(huán)境變量
    • vim /etc/profile
#hadoope
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
  • 啟動hadoop(啟動前所有節(jié)點都需先啟動zookeeper瘦锹,status確認(rèn)狀態(tài))
    • [susur123]啟動JournalNode
      • [susur123] hadoop-daemon.sh start journalnode
    • 格式化NameNode[a,s]
      • [susur1] hdfs namenode -format
      • [susur1] hadoop-daemon.sh start namenode
      • [susur2] hdfs namenode -bootstrapStandby
    • 格式化ZKFC
      • [susur1] hdfs zkfc -formatZK
    • 啟動集群(只需1號節(jié)點啟動)
start-dfs.sh
  • JPS查看狀態(tài)
#如主節(jié)點上的jps如下
[root@susur1 ~]# jps
49536 JournalNode
45713 QuorumPeerMain
50130 NodeManager
49253 DataNode
50469 Jps
49080 NameNode
49944 ResourceManager
49773 DFSZKFailoverController

訪問網(wǎng)頁 susur1:50070(要訪問主節(jié)點,status查看zookeeper的主節(jié)點是哪個)

Hbase安裝與配置

https://hbase.apache.org/downloads.html
官網(wǎng)下載合適的版本闪盔,我下的是1.3.5弯院,上傳到Linux 解壓tar包(下載bin包);

mkdir /usr/local/hbase

tar -zxvf hbase-1.3.5-bin.tar.gz -C /usr/local/hbase
  • 修改配置文件

    • cd /usr/local/hbase/hbase-1.3.5/conf/
    • 配置 RegionServer
    • vim regionservers
      
      susur1
      susur2
      susur3
      
    • 配置備用節(jié)點 backup-masters(沒有就新建)
    • vim backup-masters
      
      susur1
      
    • 配置Hbase核心配置文件
    • vim hbase-site.xml
      
      <property>
      <name>hbase.rootdir</name>
      <value>hdfs://susur/hbase</value>
      </property>
      <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
      </property>
      <property>
      <name>hbase.zookeeper.quorum</name>
      <value>susur1:2181,susur2:2181,susur3:2181</value>
      </property>
      
    • 拷貝hbfs-site.xml到hbase的conf目錄下
    • cp /usr/local/hadoop/hadoop-2.7.7/etc/hadoop/hdfs-site.xml /usr/local/hbase/hbase-1.3.5/conf
      
    • 配置環(huán)境變量
    • vim /etc/profile
      
      #hbase
      export HBASE_HOME=/usr/local/hbase/hbase-1.3.5
      export PATH=$HBASE_HOME/bin:$PATH
      
    • 克隆完后啟動
  • 啟動集群

zkServer.sh start
start-all.sh
[3] yarn-daemon.sh start resourcemanager

-啟動HBase

[1] start-hbase.sh
  • 訪問網(wǎng)址 susur1:16010

安裝配置Hive

  • mysql新建hive數(shù)據(jù)庫
#由于hive是基于mysql存儲的所以需要一個對應(yīng)的庫

create database hive;
mkdir /usr/local/hive

tar -zxvf apache-hive-2.3.6-bin.tar.gz -C /usr/local/hive
  • 修改配置文件hive-site.xml
cp hive-default.xml.template hive-site.xml
vim hive-site.xml

<!--設(shè)置庫名-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive</value>
</property>
<!--配置RDBMS本地存儲-->
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<!--配置mysql連接,如果沒有hive庫則新建-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>

<!--配置jdbc驅(qū)動-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--mysql用戶名root-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!--配置mysql密碼-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
cp /usr/local/hive/apache-hive-2.3.6-bin/lib/jine-2.12.jar /usr/local/hadoop/hadoop-2.7.7/share/hadoop/yarn/lib
  • 配置環(huán)境變量
vim /etc/profile

#hive
export HIVE_HOME=/usr/local/hive/apache-hive-2.3.6-bin
export PATH=$HIVE_HOME/bin:$PATH

  • 啟動Hive
hive

注意事項以及一些可能會遇到的問題

  • 這套分布式環(huán)境是基于zookeeper做節(jié)點的管理的,hbase和hive都是為依賴與hadoop環(huán)境的趟妥,所以啟動順序為zookeeper -> hadoop -> hbase -> hive
  • 環(huán)境變量配置完記得 source /etc/profile !!!!!!!
  • 如果在hql處理中特別慢受神,優(yōu)先適當(dāng)增加主節(jié)點分配的內(nèi)存和cpu核心;
  • 如果遇到zookeeper啟動完status顯示not running 可能是防火墻問題
#關(guān)閉防火墻
systemctl stop firewalld.service
#禁止開機啟動
systemctl disable firewalld.service 
  • ssh登陸默認(rèn)是同用戶名躺盛,所以要保證每臺虛擬機上的用戶名相同,如果主機ssh虛擬機請設(shè)置登陸用戶
  • 格式化namenode報錯,先檢查各個節(jié)點上的JournalNode是否啟動,然后刪除生成的數(shù)據(jù)和日志文件鼠证,我這里設(shè)置的是Hadoop目錄下的tmp目錄,吧tmp刪除后重新hdfs namenode -format
  • mysql設(shè)置密碼報密碼太簡單靠抑,請修改密碼限制
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
  • mysql連接時報錯量九,設(shè)置mysql權(quán)限
grant all privileges on *.* to 'root'@'%' identified by '123456';

如果主機navicat連接虛擬機上的mysql,設(shè)置ssh連接

  • eclipse(idea)連接hadoop時報權(quán)限錯誤,或者沒有找著文件目錄荠列,都是權(quán)限問題修改hdfs-site.xml文件类浪,關(guān)閉權(quán)限驗證,這里我已經(jīng)給你們關(guān)了

      <!--訪問免驗證-->
       <property>
            <name>dfs.permissions</name>
            <value>false</value>
            <description>
                If "true", enable permission checking in HDFS.
                If "false", permission checking is turned off,
                but all other behavior is unchanged.
                Switching from one parameter value to the other does not change the mode,
                owner or group of files or directories.
            </description>
        </property>
    
    //Java代碼中設(shè)置hadoop登陸用戶"root"
    Properties properties = System.getProperties();
    properties.setProperty("HADOOP_USER_NAME", "root");
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肌似,一起剝皮案震驚了整個濱河市费就,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌川队,老刑警劉巖受楼,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呼寸,居然都是意外死亡,警方通過查閱死者的電腦和手機猴贰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門对雪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人米绕,你說我怎么就攤上這事瑟捣。” “怎么了栅干?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵迈套,是天一觀的道長。 經(jīng)常有香客問我碱鳞,道長桑李,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任窿给,我火速辦了婚禮贵白,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崩泡。我一直安慰自己禁荒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布角撞。 她就那樣靜靜地躺著呛伴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谒所。 梳的紋絲不亂的頭發(fā)上热康,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音劣领,去河邊找鬼褐隆。 笑死,一個胖子當(dāng)著我的面吹牛剖踊,可吹牛的內(nèi)容都是我干的庶弃。 我是一名探鬼主播衫贬,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼歇攻!你這毒婦竟也來了固惯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缴守,失蹤者是張志新(化名)和其女友劉穎葬毫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屡穗,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡贴捡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了村砂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烂斋。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖础废,靈堂內(nèi)的尸體忽然破棺而出汛骂,到底是詐尸還是另有隱情,我是刑警寧澤评腺,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布帘瞭,位于F島的核電站,受9級特大地震影響蒿讥,放射性物質(zhì)發(fā)生泄漏蝶念。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一芋绸、第九天 我趴在偏房一處隱蔽的房頂上張望祸轮。 院中可真熱鬧,春花似錦侥钳、人聲如沸适袜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苦酱。三九已至,卻和暖如春给猾,著一層夾襖步出監(jiān)牢的瞬間疫萤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工敢伸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扯饶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像尾序,于是被迫代替她去往敵國和親钓丰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容