最詳細的Hadoop+Hbase+Hive完全分佈式環境搭建教程(一)

一、準備工作

1. 預備安裝包

(我將需要的包全部放到百度盤裏了,可以一次搞定,這個鏈接只管7天,評論留下郵箱私戳):
鏈接: https://pan.baidu.com/s/15dZ9DLPln0uf0K5iVMS9pQ 提取碼: tdfb

hadoop-2.8.5.tar.gz、hbase-2.1.1-bin.tar.gz、apache-hive-2.3.4-bin.tar.gz、jdk-8u102-linux-x64.tar.gz、mysql-community-*.rpm、xshell、xftp、CentOS-7-x86_64-Minimal-1804.ISO、mysql-connector-java-8.0.13.jar

注,mysql不是完全必要,現在的hive都自帶derby了,所以可以不用mysql,而且配置起來其實更簡單。xshell和xftp用來連接虛擬機的,比較方便。虛擬機的話我用的vmware,這裏不上傳安裝包了,自己解決

2. 安裝虛擬機

安裝三個一毛一樣的虛擬機,然後再windows上安裝xshell和xftp。如何安裝自行百度,非常簡單。

靜態地址設置

安裝好虛擬機後,要將虛擬機的地址設定爲靜態地址,否則虛擬機地址定期會變,會造成不必要的麻煩,要想將虛擬機設置爲靜態地址,首先了解虛擬機的網關掩碼啥的。
點擊【編輯】、【虛擬網絡編輯器】,選中nat模式,然後【nat設置】如圖
在這裏插入圖片描述
在這裏插入圖片描述

這裏面有子網ip子網掩碼,網關ip信息,用它們來設置靜態ip。
root用戶下,做下面這些事情:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

然後將其修改如下:

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none" # 這裏是修改過的地方
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="006888a8-6385-4dda-b8e8-9d6f89b07a4f"
DEVICE="ens33"
ONBOOT="yes"
# 下面四個是新添加的,ipaddr就是我們爲虛擬機設置的靜態ip,每個主機要設置不同的靜態
# ip,並且前只有ip的後面那個8位可以變,就分別設成129,130,131吧
IPADDR=192.168.208.129 
GATEWAY=192.168.208.2
NETMASK=255.255.255.0
DNS1=192.168.208.2

然後重啓網絡服務

service network restart

可以用ip addr命令查看本機ip如下:

[fay@master ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:96:b6:0a brd ff:ff:ff:ff:ff:ff
    inet 192.168.208.129/24 brd 192.168.208.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::5914:336a:4dde:d580/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

可以看到192.168.208.129就是配置好的靜態ip
然後就用xshell連接三臺主機了,利用xftp將預先下載好的安裝包上傳到其中一個虛擬機上,選中其爲master,其它兩作爲小弟slave1和slave2,這裏配置下每臺主機的 /etc/hosts文件如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.208.129 master
192.168.208.130 slave1
192.168.208.131 slave2

然後每個主機都創建一個用戶fay,然後將/opt這個目錄的權限給這個用戶:chown fay -R /opt,切換到這個用戶。創建用戶的過程在虛擬機安裝的時候就可以設置了(如果是vmware的話),跟着步驟走就好,實在不想搞直接用root也行。後面所有東西都往/opt裝。

關閉防火牆

systemctl stop firewalld
systemctl disable firewalld

時間同步

三臺虛擬機的時間可能不是同步的,這會影響HBASE的使用,所以,建議將三個虛擬機的時間同步,這裏有兩種方法,可以兼用。
第一種:設置虛擬機
設置虛擬機,找到【選項】==> 【vmwaretools】 ==> 【點擊將客戶端時間與主機同步】 ==> 【確定】

在這裏插入圖片描述

在這裏插入圖片描述

第二種:在虛擬機上安裝ntp服務

yum install -y ntpdate
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate -u ntp.api.bz

這裏推薦第二種,如果經常掛起虛擬機的話,第一種好像作用不大,第二種的話就可以恢復後來一次

後面操作用 fay 用戶

安裝java

java是必須的

su fay
tar -zxvf jdk-8u102-linux-x64.tar.gz -C /opt

配置環境變量

vi ~/.bashrc
export JAVA_HOME=/opt/jdk1.8.0_102
export PATH=$PATH:$JAVA_HOME/bin

# 退出來
source ~/.bashrc 
# 測試java是否安裝成功
java -version

二、Hadoop

免祕鑰ssh登錄

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

然後嘗試下能不能免祕鑰 ssh localhost ,如果可以,再將自己的公鑰給兩個slave

ssh-copy-id fay@slave1
ssh-copy-id fay@slave2

對於其它兩個slave,也執行同樣的命令,然後將公鑰分別交給另外兩臺機器,至此三臺虛擬機間就可以相互無祕鑰切換了。

然後解壓hadoop,然後進入etc/hadoop文件夾下修改配置文件

tar -zxvf hadoop-2.8.5.tar.gz -C /opt
cd /opt/hadoop-2.8.5/etc/hadoop/

修改core-site.xml,這些xml文件,有些有,有些是帶template或者default字段,將其copy成我說的文件即可

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
	<property>
		<name>hadoop.tmp.dir</name>
	<value>/home/fay/tmp</value>
	</property>
</configuration>

修改hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
<property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
</property>
<property>

        <name>dfs.datanode.max.xcievers</name>

        <value>4096</value>

      <dedication> Datanode 有一個同時處理文件的上限,至少要有4096</dedication>
</property>
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
</property>
<property>  <!--設置爲true,可以在瀏覽器中IP+port查看-->

        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
</property>
</configuration>

修改mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
 <property>
    <name>mapreduce.jobhistory.address</name>
    <!--配置實際的主機名和端口-->
    <value>master:10020</value>
  </property>
 
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value>
  </property>
</configuration>

修改yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
 <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>

<!--日誌保存時間 默認保存3-7-->	
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property> <!--ResourceManager 對客戶端暴露的地址--> 
<name>yarn.resourcemanager.address</name> 
<value>master:8032</value> 
	</property> 
	<property> <!--ResourceManager 對ApplicationMaster暴露的地址-->  
		<name>yarn.resourcemanager.scheduler.address</name> 
		<value>master:8030</value> 
	</property> 
	<property> <!--ResourceManager 對NodeManager暴露的地址--> 
		<name>yarn.resourcemanager.resource-tracker.address</name>  
		<value>master:8031</value> 
		</property> 	
	<property> <!--ResourceManager 對管理員暴露的地址--> 
		<name>yarn.resourcemanager.admin.address</name>   
		<value>master:8033</value> 
	</property> 
	<property> <!--ResourceManager 對外web暴露的地址,可在瀏覽器查看-->   
		<name>yarn.resourcemanager.webapp.address</name> 
		<value>master:8088</value> 
	</property>
</configuration>

修改yarn-env.shhadoop-env.sh

#將這句話放到帶有java_home的位置,主要是有時候它就是不認你配置的java_home環境變量
export JAVA_HOME=/opt/jdk1.8.0_102

修改slaves文件

#刪掉localhost
slave1
slave2

將hadoop添加到環境變量,修改~/.bashrc

export JAVA_HOME=/opt/jdk1.8.0_102
export HADOOP_HOME=/opt/hadoop-2.8.5
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

然後 source ~/.bashrc

另外兩臺機器就簡單了,直接copy過去就好

scp -r /opt fay@slave1:/
scp -r /opt fay@slave2:/

理論上這一步沒問題,但是你之前/opt權限沒配置好就權限不足,那就弄好權限。
然後把環境變量文件也直接copy過去

scp ~/.bashrc fay@slave1:/home/fay/
scp ~/.bashrc fay@slave2:/home/fay/

兩臺機器上分別 source ~/.bashrc
然後在master節點上 初始化namenode:

hdfs namenode -format

然後啓動hadoop

start-dfs.sh
start-yarn.sh

master節點上輸入jps,看到如下顯示:

[fay@master hadoop-2.8.5]$ jps
35184 SecondaryNameNode
34962 NameNode
35371 ResourceManager
35707 Jps

兩個slave節點:

[fay@slave1 ~]$ jps
16289 Jps
16035 DataNode
16152 NodeManager

到這裏hadoop基本已經安裝好了,當然你可能沒那麼順利,可能會有報錯,那就根據錯誤網上找解決方案,如果一次成功只能說明我寫的太好了還有你很認真。
測試一下hadoop
在windows瀏覽器上輸入192.168.208.129:8088出現一下界面說明yarn應該問題不大了
在這裏插入圖片描述
當然還是要跑下hadoop 自帶的mapreduce 用例

$ cd /opt/hadoop-2.8.5
$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/fay
$ hdfs dfs -put etc/hadoop input
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar grep input output 'dfs[a-z.]+'
# 沒有報java錯誤,那就ok,在output目錄查看下輸出結果:
$ hdfs dfs -cat output/*

好了以上你都沒問題,hadoop本身應該就沒問題了。後面繼續更新hbase和hive的安裝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章