大資料2-Hadoop偽分散式+ZK+HDFS

項羽齊發表於2018-04-01

目錄:

  1、hadoop介紹

  2、虛擬機器配置

       3、zookeeper

  4、hdfs搭建

大資料解決四大核心問題:

  1. 資料的儲存(Big Data Storage),海量資料需要處理和分析,但前提是要進行有效的儲存。Hadoop的誕生突破了傳統資料檔案系統的單機模式。HDFS使得資料可以跨越不同的機器與裝置,並且用一個路徑去管理不同平臺上的資料。

  2. 資料的計算(Data Calculation),在資料有效儲存的基礎上,對資料的統計和分析本質上就是資料的計算。在大資料領域常見的計算工具有MapReduceSpark等。

  3. 資料的查詢(Consensus Data),對大資料進行有效管理的核心指標是資料查詢技術。其中NoSQL (Not Only SQL)應用較為廣泛,能較有效解決資料的隨機查詢,其中就主要包括Hbase等。從本質而言,依舊是Hadoop模式下的資料查詢。

  4. 資料的挖掘(Data mining),Hive資料倉儲為資料的挖掘提供了基礎,通過分類、預測、相關性分析來建立模型進行模式識別、機器學習從而構建專家系統。

 

Hadoop之父

 

    大牛,他是LuceneNutch Hadoop等專案的發起人。是他,把高深莫測的搜尋技術形成產品,貢獻給普通大眾;還是他,打造了在雲端計算和大資料領域裡如日中天的Hadoop。他是某種意義上的盜火者(普羅米修斯盜火造福人類),他就是Doug Cutting

 

    Hadoop是專案的總稱。主要是由HDFSMapReduce組成。HDFSGoogle File SystemGFS)的開源實現。MapReduceGoogle MapReduce的開源實現。

    Hadoop的誕生突破了傳統資料檔案系統的單機模式。使得資料可以跨越不同的機器與裝置,並且用一個路徑去管理不同平臺上的資料。

    MapReduce的計算模型分為MapReduce兩個過程。在日常經驗裡,我們統計資料需要分類,分類越細、參與統計的人數越多,計算的時間就越短,這就是Map的形象比喻,在大資料計算中,成百上千臺機器同時讀取目標檔案的各個部分,然後對每個部分的統計量進行計算,Map就是負責這一工作的;而Reduce就是對分類計數之後的合計,是大資料計算的第二階段。可見,資料的計算過程就是在HDFS基礎上進行分類彙總。

 

    HDFS把節點分成兩類:NameNodeDataNodeNameNode是唯一的,程式與之通訊,然後從DataNode上存取檔案。這些操作是透明的,與普通的檔案系統API沒有區別。

    MapReduce則是JobTracker節點為主,分配工作以及負責和使用者程式通訊。

    HDFSMapReduce實現是完全分離的,並不是沒有HDFS就不能MapReduce運算。

    Hadoop也跟其他雲端計算專案有共同點和目標:實現海量資料的計算。而進行海量計算需要一個穩定的,安全的資料容器,才有了Hadoop分散式檔案系統(HDFSHadoop Distributed File System)。

    HDFS通訊部分使用org.apache.hadoop.ipc,可以很快使用RPC.Server.start()構造一個節點,具體業務功能還需自己實現。針對HDFS的業務則為資料流的讀寫,NameNode/DataNode的通訊等。

    MapReduce主要在org.apache.hadoop.mapred,實現提供的介面類,並完成節點通訊(可以不是hadoop通訊介面),就能進行MapReduce運算。

 

叢集規劃:

  

主機名

IP

程式(jps)

hadoop01

192.168.163.129

ZooKeeper(QuorumPeerMain)

Hadoop

HDFS

Flume

Hive

hadoop02

192.168.163.130

ZooKeeper(QuorumPeerMain)

hadoop03

192.168.163.131

ZooKeeper(QuorumPeerMain)

          

          

 

  子專案

      Hadoop Common: 0.20及以前的版本中,包含HDFSMapReduce和其他專案公共內容,從0.21開始HDFSMapReduce被分離為獨立的子專案,其餘內容為Hadoop Common

      HDFS: Hadoop分散式檔案系統(Distributed File System) HDFS (Hadoop Distributed File System)

      MapReduce:平行計算框架,0.20前使用 org.apache.hadoop.mapred 舊介面,0.20版本開始引入org.apache.hadoop.mapreduce的新API

      HBase: 類似Google BigTable的分散式NoSQL列資料庫。(HBaseAvro已經於20105月成為頂級 Apache 專案)

      Hive:資料倉儲工具,由Facebook貢獻。

      Zookeeper:分散式鎖設施,提供類似Google Chubby的功能,由Facebook貢獻。

      Avro:新的資料序列化格式與傳輸工具,將逐步取代Hadoop原有的序列化機制。

      Pig: 大資料分析平臺,為使用者提供多種介面。

      AmbariHadoop管理工具,可以快捷的監控、部署、管理叢集。

      Sqoop:於在HADOOP與傳統的資料庫間進行資料的傳遞。

 

 

 配置虛擬機器

    HDFS由java編寫,需要jdk支援

     docker官方文件要求必須執行在Linux kernel 3.8以上,所以需要安裝在Centos7或者Ubantu系統上。

      yum install lrzsz      #安裝上傳下載元件

      uname –a       #檢查當前Linux核心版本

        查詢結果:Linux tdocker 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

 

     配置IP地址

       修改配置檔案

        cd /etc/sysconfig/network-scripts #進入網路配置目錄

        dir ifcfg* #找到網路卡配置檔案

        ifcfg-eno16777736  ifcfg-lo

        vi ifcfg-eno16777736

       配置檔案內容

        TYPE=Ethernet

        BOOTPROTO=static #改成static,針對NAT

        NAME=eno16777736

        UUID=4cc9c89b-cf9e-4847-b9ea-ac713baf4cc8 

        DEVICE=eno16777736 

        ONBOOT=yes #開機啟動此網路卡 

        IPADDR=192.168.163.30 #固定IP地址 

        NETMASK=255.255.255.0 #子網掩碼 

        GATEWAY=192.168.163.2 #閘道器和NAT自動配置的相同,不同則無法登入 

        DNS1=192.168.163.2 #和閘道器相同 

       測試 

        centos7 命令發生巨大變化 

        ip addr #檢視IP地址 ip add 

        service network restart #重啟網路 

        systemctl restart network.service #重啟網路centos7 

        vi /etc/hosts #127.0.0.1 dredis 

        hostname dreids #注意必須修改機器名hostname 

        ping www.baidu.com #如果出現baiduip地址則表示網路連通 

 

    配置域名解析

      1、windows配置

        C:\Windows\System32\drivers\etc\hosts 

          192.168.163.129 hadoop01 

          192.168.163.130 hadoop02 

          192.168.163.131 hadoop03 

      2、linux虛擬機器配置hosts

        vi /etc/hosts 

          192.168.163.129 hadoop01 

          192.168.163.130 hadoop02 

          192.168.163.131 hadoop03 

         hostname hadoop01 #修改每臺伺服器的機器名,必須 

      3、重啟網路

        /etc/init.d/network restart 

        或者 

        service network restart 

      4、ssh免登陸

        在虛擬機器中Terminal中執行下面語句 

          ssh-keygen #三次回車即可 

          ssh-copy-id -i .ssh/id_rsa.pub root@192.168.163.130 #複製金鑰 

          ssh 192.168.163.130 

      5、安裝jdk配置環境變數

zk首先需要安裝jdk環境。
mkdir /usr/local/src/java        #按習慣使用者自己安裝的軟體存放到/usr/local/src目錄下
上傳jdk tar包                    #利用SSH工具軟體上傳檔案
tar -xvf jdk-7u51-linux-x64.tar.gz    #解壓壓縮包
配置環境變數
1)vi /etc/profile
2)在尾行新增
#set java environment
JAVA_HOME=/usr/local/src/java/jdk1.7.0_51
JAVA_BIN=/usr/local/src/java/jdk1.7.0_51/bin
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
儲存退出
3)source /etc/profile 使更改的配置立即生效
4)java -version 檢視JDK版本資訊。如顯示1.7.0證明成功。
jdk及環境配置

 

      6、關閉防火牆

systemctl stop firewalld.service            #關閉防火牆服務
systemctl disable firewalld.service        #禁止防火牆開啟啟動
或者
systemctl restart iptables.service        #重啟防火牆使配置生效
systemctl enable iptables.service         #設定防火牆開機啟動
檢查防火牆狀態
[root@hadoop01 ~]# firewall-cmd --state        #檢查防火牆狀態
not running                                    #返回值,未執行

 

 

 

    Zookeeper安裝配置 

        在Zookeeper叢集環境下只要一半以上的機器正常啟動了,那麼Zookeeper服務將是可用的。因此,叢集上部署Zookeeper最好使用奇數臺機器,這樣如果有5臺機器,只要3臺正常工作則服務將正常使用。 

      ZooKeeper介紹 

        ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是GoogleChubby一個開源的實現,是HadoopHbase的重要元件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

 

官網:http://www.apache.org/dist/zookeeper/
cd /usr/local/src                #安裝檔案根目錄
mkdir zk                        #安裝路徑
tar -xvf zookeeper-3.4.8.tar.gz    #解壓
cd zookeeper-3.4.8                #進入目錄
mkdir log                        #建立日誌檔案路徑
mkdir data                        #建立資料檔案路徑,預設/tmp/zookeeper下
cd data                            #進入資料目錄
vi myid                            #建立myid檔案,內容1對應zoo.cfg中配置的server.1範圍:1~255之間的整數,在叢集中必須唯一
cd ..                            #退到上級目錄
cd conf                            #進入配置目錄
cp zoo_sample.cfg zoo.cfg        #複製模板檔案
安裝zookeeper
tickTime=2000                            #tickTime心跳時間,
clientPort=2181                        #訪問埠
dataDir=/usr/local/src/zk/zookeeper-3.4.8/data        #設定日誌路徑
dataLogDir=/usr/local/src/zk/zookeeper-3.4.8/log    #增加設定日誌路徑
server.1=hadoop01:2888:3888        #叢集最少3個節點,可按機器名
server.2=hadoop02:2888:3888        #2888指follower連leader埠 
server.3=hadoop03:2888:3888        #3888指定選舉的埠
配置zoo.cfg
Centos6.5
/sbin/iptables -I INPUT -p tcp --dport 2181 -j ACCEPT     #開啟埠
/etc/rc.d/init.d/iptables save                            #修改生效
/etc/init.d/iptables status                                #檢視配置
Centos7
firewall-cmd --zone=public --add-port=2181/tcp --permanent #開埠
firewall-cmd --zone=public --add-port=2888/tcp --permanent #開埠
firewall-cmd --zone=public --add-port=3888/tcp --permanent #開埠
firewall-cmd --reload                                        #執行
firewall-cmd --zone=public --list-ports                    #檢視開啟埠
注:關閉防火牆更徹底,要開啟埠則所有的遠端訪問埠都類似上面必須開啟
開啟2181、2888、3888埠
sh bin/zkServer.sh start                #啟動ZK服務
sh bin/zkServer.sh stop                #停止ZK服務
sh bin/zkServer.sh restart            #重啟ZK服務
啟動、停止、重啟服務
[root@localhost conf]# jps
5863 Jps
2416 QuorumPeerMain        #QuorumPeerMain是zookeeper程式,啟動正常
檢查服務
sh bin/zkServer.sh status                #檢視ZK狀態
檢視結果:叢集中只有一個leader,其他都是follower
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zk/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: leader
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/src/zk/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower
常見錯誤:
Error contacting service. It is probably not running.
如果出現上面提示,請檢查配置檔案或者防火牆是否放行2181/2888/3888埠
[root@localhost bin]# ./zkServer.sh stop
[root@localhost bin]# ./zkServer.sh start-foreground    日誌啟動方式
注意,如果啟動時拒絕訪問,檢查是否防火牆埠都開啟,如果開啟則都先啟動,再看。某個節點沒啟動,當然訪問是被拒絕。
檢視叢集狀態
[root@localhost bin]# ./zkCli.sh -server hadoop01:2181
客戶端訪問

[zk: localhost:2181(CONNECTED) 1] ls /
[dubbo, zookeeper]
客戶端檢視服務

 

 

安裝HDFS

cd /usr/local/src                                    #進入目錄
mkdir hadoop                                        #建立目錄
tar -xvf hadoop-2.7.1.tar.gz                         #上傳檔案
上傳檔案及安裝
vi etc/hadoop/hadoop-env.sh
#JDK安裝目錄,雖然系統配置了JAVA_HOME,但有時無法正確識別,最後進行配置
export JAVA_HOME=/usr/local/src/java/jdk1.7.0_51/    
#指定hadoop的配置檔案目錄,不執行hadoop可以不指定
export HADOOP_CONF_DIR=/usr/local/src/hadoop/hadoop-2.7.1/etc/hadoop
編輯hadoop-env.sh
vi etc/hadoop/core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.163.129:9000</value>
    </property>

<!--注意:用來指定臨時存放目錄,否則預設的系統的臨時目錄當重啟hadoop時會被刪除,影響HDFS下的檔案 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/src/hadoop/hadoop-2.7.1/tmp</value>
    </property>

<!--執行zookeeper地址-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
    </property>
</configuration>
編輯core-site.xml
vi etc/hadoop/hdfs-site.xml
<configuration>
    <property>
      <name>dfs.namenode.rpc-address</name>
      <value>hadoop01:9000</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
編輯hdfs-site.xml
vi etc/hadoop/hdfs-site.xml
<configuration>
    <property>
      <name>dfs.namenode.rpc-address</name>
      <value>hadoop01:9000</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
編輯mapred-site.xml
將mapred-site.xml.template複製一份並將名稱修改為mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
編輯mapred-site.xml
<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop01</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>
編輯yarn-site.xml
vi slaves
hadoop01        #將localhost改為hostname名
編輯slaves檔案
配置hadoop的環境變數:
#set hadoop env
HADOOP_HOME=/usr/local/src/hadoop/hadoop-2.7.1/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile
在/etc/profile中進行配置
bin/hdfs namenode –format
格式化檔案系統

看到上面的successfully格式化成功,檔案在/tmp/hadoop-root/dfs/name下
注意:可能失敗,jps檢查不到namenode,再次格式化,如果還不行檢查配置檔案。

 

 

sbin/start-dfs.sh            
#停止服務stop-dfs.sh
啟動HDFS服務

 

也可以執行sbin/start-all.sh啟動hadoop,其中就包括hdfs。它會多啟動兩個服務:nodeManagerResourceManager。執行jps就應該顯示6個服務,就代表啟動成功。

  檢查服務是否正常:

      1、可以通過瀏覽器直接訪問:http://192.168.163.129:50070/

      2、如下圖

      

 

1、可以用jps檢視後臺java程式,確保hdfs的程式都正常啟動
由於重新格式化系統可能出現某些程式不能啟動,解決方法是先停止服務,刪除rm -fr /tmp/hadoop-root 下name,data等節點資料,重新啟動服務
2、localhost: ssh: Could not resolve hostname localhost: Name or service not ……
在/etc/profile中進行配置
 #set hadoop env
HADOOP_HOME=/usr/local/src/hadoop/hadoop-2.7.1/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3、namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
[root@hadoop01 hadoop-2.7.1]# vim etc/hadoop/hdfs-site.xml
<property>
  <name>dfs.namenode.rpc-address</name>
  <value>192.168.163.129:9000</value>
</property>
3、put: Cannot create file/test/letter.txt._COPYING_. Name node is in safe mode.
執行下面的命令
bin/hadoop dfsadmin -safemode leave
常見問題
http://192.168.163.129:50070/
執行命令很慢,執行時稍等片刻
bin/hdfs dfs -mkdir /user                        #建立user目錄
bin/hdfs dfs -put /root/install.log /use    r    #上傳檔案
bin/hdfs dfs –ls /                                #檢視根目錄
bin/hdfs dfs -ls /user                        #列目錄
建立新的資料夾,新增檔案

      

http://192.168.163.129:50070/
注意:埠50070或者要關閉防火牆
檢查,可以直接通過瀏覽器瀏覽

 

相關文章