1. 程式人生 > >Linux下基於Hadoop的大資料環境搭建步驟詳解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安裝與配置)

Linux下基於Hadoop的大資料環境搭建步驟詳解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安裝與配置)

Linux下基於Hadoop的大資料環境搭建步驟詳解(Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等安裝與配置)

前言:本篇文章是以Hadoop為基礎,搭建各種可能會用到的環境的基本步驟,包括:Hadoop,Hive,Zookeeper,Kafka,Flume,Hbase,Spark等。在實際應用中可能未必需要用到所有的這些,請讀者們按需取捨。另外,搭建時注意按順序,因為存在環境依賴,比如說搭建第八步Spark前,五.1的scala一定要配置好了;搭建第七步Hbase前,第四步的Zookeeper必須已經配置好了。一定要注意哦!
在這裡插入圖片描述


另外,本人為了給廣大讀者提供方便,不需要每次都自己去找相關安裝包下載,我已將本篇文章搭建時涉及的安裝包都下載好放入百度雲(連結:https://pan.baidu.com/s/1gjQuTECI2LliFc5qDdqTIg 提取碼:l5p3 ),大家直接一次性下載下來到你的主機就行了,到時候後直接上傳到你們自己的虛擬機器系統裡就可以了(上傳主機檔案到虛擬機器裡可以用WinSCP軟體)

系統說明

  • 系統:CentOS 7.6
  • 節點資訊:
節點 ip
master 192.168.185.150
slave1 192.168.185.151
slave2 192.168.185.152

搭建步驟詳述

一、節點基礎配置

1、配置各節點網路

# 注意:centos自從7版本以後網絡卡名變成ens33而不是我這裡的eth0了,我是習慣eth0了所以在安裝的時候修改了網絡卡名,如果你的centos網絡卡名是ens33不要緊,就把我這裡eth0的地方都換成你的ens33,對後面沒影響。

[root@master ~]# vim /etc/sysconfig/network-scripts/
ifcfg-eth0 TYPE="Ethernet" BOOTPROTO="static" NAME="eth0" DEVICE="eth0" ONBOOT="yes" IPADDR=192.168.185.150 NETMASK=255.255.255.0 GATEWAY=192.168.185.2 [root@master ~]# vim /etc/resolv.conf nameserver 192.168.185.2 # 對其他兩個slave節點也同樣做上述操作,只不過在IPADDR值不一樣,分別填其節點對應的ip

2、修改每個節點主機名,新增各節點對映

# 在其他兩個子節點的hostname處分別填slave1和slave2
[root@master ~]# vim /etc/hostname
master

[root@master ~]# vim /etc/hosts
192.168.185.150 master
192.168.185.151 slave1
192.168.185.152 slave2

3、關閉防火牆

# 三個節點都要做

# 把SELINUX那值設為disabled
[root@master ~]# vim /etc/selinux/config
SELINUX=disabled

[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
[root@master ~]# systemctl status firewalld

4、都重啟以生效

[root@master ~]# reboot
[root@master ~]# ping www.baidu.com

# 注意下,重啟後若ping百度不通,可能是因為namesever那重啟後自動被改了,所以導致ping百度不通,如果這樣的話就再重新寫下上面的resolv.conf
[root@master ~]# vim /etc/resolv.conf
nameserver 192.168.185.2

# 這下應該就通了,ping下百度試試看
[root@master ~]# ping www.baidu.com
PING www.a.shifen.com (119.75.217.109) 56(84) bytes of data.
64 bytes from 119.75.217.109: icmp_seq=1 ttl=128 time=30.6 ms
64 bytes from 119.75.217.109: icmp_seq=2 ttl=128 time=30.9 ms
64 bytes from 119.75.217.109: icmp_seq=3 ttl=128 time=30.9 ms

5、配置節點間ssh免密登陸

[root@master ~]# ssh-keygen -t rsa
# 上面這條命令,遇到什麼都別管,一路回車鍵敲下去

# 拷貝本金鑰到三個節點上
[root@master ~]# ssh-copy-id master
[root@master ~]# ssh-copy-id slave1
[root@master ~]# ssh-copy-id slave2

# master節點上做完後,再在其他兩個節點上重複上述操作

都做完後,用ssh命令節點間相互測試下:

[root@master ~]# ssh slave1
# 就會發現在master節點上免密登陸到了slave1,再敲logout就退出slave1了

在這裡插入圖片描述

6、安裝java

# 之後我們所有的環境配置包都放到/usr/local/下

# 新建java目錄,把下載好的jdk的二進位制包拷到下面(你可以直接在centos裡下載,或者在你主機下載好,上傳到虛擬機器的centos上)
[root@master ~]# cd /usr/local
[root@master local]# mkdir java
[root@master local]# cd java
[root@master java]# tar -zxvf jdk-8u191-linux-x64.tar.gz 

# 配置環境變數,在profile檔案最後新增java的環境變數
[root@master ~]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

[root@master ~]# source /etc/profile
[root@master ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

# 在其他兩個節點上重複上述操作

到此為止,基本配置就結束了。

二、Hadoop安裝和配置

– 介紹:
Hadoop是一個由Apache基金會所開發的分散式系統基礎架構。Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的資料提供了儲存,而MapReduce則為海量的資料提供了計算。
HDFS,Hadoop Distributed File System,是一個分散式檔案系統,用來儲存 Hadoop 叢集中所有儲存節點上的檔案,包含一個 NameNode 和大量 DataNode。NameNode,它在 HDFS 內部提供元資料服務,負責管理檔案系統名稱空間和控制外部客戶機的訪問,決定是否將檔案對映到 DataNode 上。DataNode,它為 HDFS 提供儲存塊,響應來自 HDFS 客戶機的讀寫請求。
MapReduce是一種程式設計模型,用於大規模資料集的並行運算。概念"Map(對映)“和"Reduce(歸約)”,是它們的主要思想,即指定一個Map(對映)函式,用來把一組鍵值對對映成一組新的鍵值對,指定併發的Reduce(歸約)函式,用來保證所有對映的鍵值對中的每一個共享相同的鍵組。

1、下載解壓

# 在/usr/local下建立hadoop資料夾,將下載好的hadoop-2.7.7壓縮包上傳進去解壓
[root@master ~]# cd /usr/local
[root@master local]# mkdir hadoop
[root@master local]# cd hadoop
[root@master hadoop]# tar -zxvf hadoop-2.7.7.tar

2、配置環境變數

[root@master hadoop]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

[root@master hadoop]# source /etc/profile

3、 配置core-site.xml

# 配置檔案主要在hadoop-2.7.7/etc/hadoop下面
[root@master hadoop]# cd hadoop-2.7.7/etc/hadoop

# 把該檔案<configuration>那塊按如下修改
[root@master hadoop]# vim core-site.xml
<configuration>
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://master:9000</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/local/data</value>
</property>
</configuration>

# 配置檔案中的/usr/local/data是用來儲存臨時檔案的,所以該資料夾需要手動建立
[root@master hadoop]# mkdir /usr/local/data

4、配置hdfs-site.xml

[root@master hadoop]# vim hdfs-site.xml
<configuration>
<property>
  <name>dfs.name.dir</name>
  <value>/usr/local/data/namenode</value>
</property>
<property>
  <name>dfs.data.dir</name>
  <value>/usr/local/data/datanode</value>
</property>
<property>
  <name>dfs.replication</name>
  <value>2</value>
</property>
</configuration>

5、配置mapred-site.xml

# 先修改檔名字
[root@master hadoop]# mv mapred-site.xml.template mapred-site.xml

[root@master hadoop]# vim mapred-site.xml
<configuration>
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
</configuration>

6、配置yarn-site.xml

[root@master hadoop]# vim yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>master</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services</name>              
  <value>mapreduce_shuffle</value>     
</property>
</configuration>

7、修改slaves

[root@master hadoop]# vim slaves
slave1
slave2

8、修改hadoop-env.sh檔案

# 在“export JAVA_HOME=”那一行把java環境修改成自己的路徑
[root@master hadoop]# vim hadoop-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_191

9、直接把配置好的hadoop包傳到剩下兩個子節點同樣的位置下

[root@master hadoop]# cd /usr/local
[root@master local]# scp -r hadoop root@192.168.185.151:/usr/local/
[root@master local]# scp -r hadoop root@192.168.185.152:/usr/local/

10、在其他兩個子節點別漏掉的操作

# 別忘了!在兩個子節點/usr/local/下也要建立好data目錄。

# 別忘了!在兩個子節點重複下步驟2, 配置好hadoop環境變數。

11、測試是否成功

# 只要在主節點上啟動,執行過程可能稍慢,耐心等待

# 先格式化
[root@master ~]# hdfs namenode -format

# 啟動hdfs
[root@master ~]# cd /usr/local/hadoop/hadoop-2.7.7/
[root@master hadoop-2.7.7]# sbin/start-dfs.sh

# 啟動yarn
[root@master hadoop-2.7.7]# sbin/start-yarn.sh

在主節點上輸入jps命令檢視,以下就對了:
在這裡插入圖片描述
在子節點上輸入jps命令檢視,以下就對了:
在這裡插入圖片描述
在瀏覽器上訪問視覺化頁面:http://192.168.185.150:50070
在這裡插入圖片描述
到此為止,hadoop配置就結束了。

三、Hive安裝和配置

– 介紹:

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。 其優點是學習成本低,可以通過和SQL類似的HiveQL語言快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉庫的統計分析。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 無法完成的複雜的分析工作。
Hive 沒有專門的資料格式。所有Hive 的資料都儲存在Hadoop相容的檔案系統(例如HDFS)中。Hive 在載入資料過程中不會對資料進行任何的修改,只是將資料移動到HDFS中Hive 設定的目錄下,因此,Hive 不支援對資料的改寫和新增,所有的資料都是在載入的時候確定的。

1、環境配置

# 注意:Hive只需要在master節點上安裝配置

[root@master ~]# cd /usr/local
[root@master local]# mkdir hive
[root@master local]# cd hive
[root@master hive]# tar -zxvf apache-hive-2.3.4-bin.tar.gz 
[root@master hive]# mv apache-hive-2.3.4-bin hive-2.3.4

# 新增Hive環境變數
[root@master hive]# vim /etc/profile               
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/usr/local/hive/hive-2.3.4
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

[root@master hive]# source /etc/profile

2、修改 hive-site.xml

[root@master hive]# cd hive-2.3.4/conf
[root@master conf]# mv hive-default.xml.template   hive-site.xml

# 在hive-site.xml中找到下面的幾個對應name的property,然後把value值更改
# 這裡提醒一下,因為hive-site.xml幾千多行,根據name找property的話不太方便,有兩種建議:
# 1、把這個xml檔案弄到你自己的主機上,用軟體(比如notepad++)修改好,在上傳回centos上相應位置
# 2、在之前給你的百度雲連結裡,我也上傳了修改好的hive-site.xml檔案,如果你版本跟我用的一樣,可以直接拿去用

[root@master conf]# vim hive-site.xml 

 <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://master:3306/hive_metadata?createDatabaseIfNotExist=true</value>
    <description>
      JDBC connect string for a JDBC metastore.
      To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
      For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
    </description>
 </property>
 
 <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
 </property>
  
 <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>Username to use against metastore database</description>
 </property>
    
 <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
    <description>password to use against metastore database</description>
 </property>

 <property>
    <name>hive.querylog.location</name>
    <value>/usr/local/hive/hive-2.3.4/tmp/hadoop</value>
    <description>Location of Hive run time structured log file</description>
  </property>
 
  <property>
    <name>hive.server2.logging.operation.log.location</name>
    <value>/usr/local/hive/hive-2.3.4/tmp/hadoop/operation_logs</value>
    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>
  </property>
  
  <property>
    <name>hive.exec.local.scratchdir</name>
    <value>/usr/local/hive/hive-2.3.4/tmp/hadoop</value>
    <description>Local scratch space for Hive jobs</description>
  </property>
  
  <property>
    <name>hive.downloaded.resources.dir</name>
    <value>/usr/local/hive/hive-2.3.4/tmp/${hive.session.id}_resources</value>
    <description>Temporary local directory for added resources in the remote file system.</description>
  </property>
  
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
    <description>
      Enforce metastore schema version consistency.
      True: Verify that version information stored in is compatible with one from Hive jars.  Also disable automatic
            schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
            proper metastore schema migration. (Default)
      False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
    </description>
  </property>

3、修改hive-env.sh檔案

[root@master conf]# mv hive-env.sh.template hive-env.sh

# 找到下面的位置,做對應修改
[root@master conf]# vim hive-env.sh 

# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.7

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/hive/hive-2.3.4/conf

# Folder containing extra libraries required for hive compilation/execution can be controlled by:
# export HIVE_AUX_JARS_PATH=
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export HIVE_HOME=/usr/local/hive/hive-2.3.4

4、把下載好的mysql-connector-java.jar這個jar包拷到/usr/local/hive/hive-2.3.4/lib/下面,在給你們的百度雲連結裡都有

5、安裝並配置mysql(因為hive的元資料是儲存在mysql裡的)

[root@localhost ~]# cd /usr/local/s