Hadoop搭建完全分布式集群
- 搭建準備
- 配置ssh和撰寫一個分發shell腳本
- java和hadoop
- 運行測驗
最近公司事情不是很多,趁此機會,學習一下大資料的內容,正好公司之后也要使用大資料方面的技術進行資料分析,所以提前學習一下,也好做個準備.以防忘記,寫下博客來記錄一下學習程序.
搭建準備
首先我們需要建三臺新的虛擬機:
- 使用VMware搭建新建一臺虛擬機,我這里使用的是centos系統.(說起這個,比較吐血,我最開始一直是使用的Ubuntu,然后再學習es,rocketmq…之類的時候,去網上找的教程全是centos的,每次折騰虛擬機都要耗費不少時間,很是蛋疼.決定學習hadoop之后,畢竟是一個新的領域,所以準備重新開始,所以改用centos.結果,現在網上找點教程,全變成Ubuntu了,心累,感覺受到了針對,朋友);
- 將虛擬機配置一下靜態ip(必須的啊,不然鬼找得到你主機在哪);
// 修改靜態ip(每個機器的網卡檔案名稱不一樣,)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改如下:
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
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="a7239cff-3e26-4d23-bab6-176ba0b88895"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.50.103"
GATEWAY="192.168.50.1"
NETMASK="255.255.255.0"
DNS1="8.8.8.8"
主要是修改幾個 BOOTPROTO改為static,ONBOOT改為yes ,IPADDR,GATEWAY,NETMASK,DNS1(可選)
三臺機器都要改,并且修改的ip要在同一網段內.
- 修改一下主機名,方便區分和聯合 ;
//hostnamectl 永久主機名 是對/etc/hostname檔案的內容進行修改
hostnamectl hadoop103
//或者 vim /etc/hostname 性質是一樣的
修改完后可以再次使用hostnamectl查看一下是否修改成功.
5. 然后還要修改一下主機(),要把其他機器的主機名和ip映射關聯起來?;
vim /etc/hosts
增加幾行
192.168.50.101 hadoop101
192.168.50.102 hadoop102
192.168.50.103 hadoop103
192.168.50.104 hadoop104
192.168.50.105 hadoop105
這個呢,根據我的理解,應該算是給同網段下的ip和主機名進行一個映射,這樣就可以通過主機名對ip所在主機進行訪問了吧?有大佬看到可以幫忙指點一下嗎.
其他虛擬機也做相同配置.這邊想偷個懶的話 就先配置一臺機器,然后用VMware克隆n臺出來.這樣可以減少一點作業量.
配置ssh和撰寫一個分發shell腳本
1. 撰寫一個shell腳本用于分發檔案
??這個是因為我們要搭建集群,所以對于hadoop的配置需要每臺機器都做相同配置,目前我們只做三臺機器的配置,還可以做到手動分發,但是實際使用時,不一定是三臺,如果有100臺機器集群,手動分發肯定是不現實的.所以接下來就撰寫一個shell腳本,用于檔案分發.
遠程分發,linux中有兩個命令,rsync和scp.都可以做到遠程復制.那么兩者的區別是什么呢.
??1. scp的效率比rsync的效率會高.因為scp非常不占用資源,rsync比scp快一點,但是如果小檔案眾多的話,占用I/O非常多,影響系統使用.
??2. rsync會對比檔案差異,只傳輸差異部分,適合做增量或全量備份,而scp只能做全量備份
??3. rsync是非加密傳輸,scp是加密傳輸.
??4. rsync復制可以附帶軟/硬鏈接.

我們這里選擇使用rsync來進行分發,下來來撰寫一個xsync.sh
vim xsync.sh
?內容如下:
#!/bin/bash
#1 獲取輸入引數個數,如果沒有引數,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 獲取檔案名稱
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 獲取上級目錄到絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 獲取當前用戶名稱
user=`whoami`
#5 回圈
for((host=103; host<106; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
為了方便使用,我們把腳本放到 /bin, 這樣就可以在任意目錄呼叫此腳本了.
chmod +x xsync
sudo cp xsync /bin
sudo xsync /bin/xsync
2. 配置ssh無密登錄
一般虛擬機會自帶ssh,如果沒有的話,就用apt-get install .呸 用 yum 安裝一下.
進入.ssh cd ~/.ssh/
使用
ssh-keygen -t rsa
生成密鑰對.
然后使用我們的分發腳本,將整個.ssh發送到各臺機器上.
xsync ~/atguigu/.ssh
試一下配置是否成功,
ssh hadoop104 //第一次需要輸入密碼. exit退出登錄,再重新登錄一次.不需要密碼則成功配置了ssh無密登錄
??至此,虛擬機的準備算是弄好了.
java和hadoop
1. 安裝java和hadoop以及環境變數配置
??將準備好的java的tar包和hadoop的tar包copy到一臺主機上. 并且解壓. tar -zxvf
??然后配置環境變數
sudo vim /etc/profile
?在該檔案末尾追加幾行
#JAVA_HOME
#java解壓后的tar包位置
export JAVA_HOME=/opt/module/jdk1.8.0_231
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
#hadoop解壓后的tar包位置
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
然后執行命令使環境變數立即生效
source /etc/profile
然后使用 java -version, hadoop version 查看是否配置成功
2. 配置hadoop運行的xx-env.sh
??先配置幾個env,進入解壓后的hadoop檔案夾下.然后
//這里是進入hadoop檔案夾下的etc,而不是linux的.之前碰到這個問題,
//怎么也找不到檔案.
cd etc/hadoop/
使用vim命令將 hadoop-env.sh,yarn-env.sh,mapred-env.sh這幾個檔案,進行追加一下依賴jdk環境.
export JAVA_HOME=/opt/module/jdk1.8.0_231
3. 配置core-site.xml
將下面這段xml配置直接復制到hadoop-2.7.2/etc/hadoop/core-site.xml的
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop103:9000</value>
</property>
<!-- 指定Hadoop運行時產生檔案的存盤目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
</configuration>
4. 配置hdfs-site.xml
<configuration>
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>
dfs.namenode.secondary.http-address
</name>
<value>hadoop103:50090 </value>
</property>
</configuration>
5. 配置yarn-site.xml
<configuration>
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>
dfs.namenode.secondary.http-address
</name>
<value>hadoop103:50090 </value>
</property>
</configuration>
6. 配置mapred-site.xml
<configuration>
<!--指定MR運行的地方 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 歷史服務器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop105:10020</value>
</property>
<!-- 歷史服務器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop105:19888</value>
</property>
</configuration>
7. 配置slaves
vim etc/hadoop/slaves
追加以下內容
hadoop103
hadoop104
hadoop105
保存退出.
8. 分發配置
使用之前撰寫的分發腳本 xsync 將配置分發到其他幾臺虛擬機上.
xsync /opt/module/hadoop-2.7.2/etc
然后格式化namenode,在hadoop103上進行格式化
hdfs namenode -format
至此,hadoop完全分布式集群搭建完畢.
運行測驗
在hadoop103上運行
hadoop-daemon.sh start namenode/datanode/secondarynamenode
在hadoop104上運行
yarn-daemon.sh start resourcemanager/nodemanager
然后使用jps命令查看行程是否啟動.
如果未啟動,在使用腳本啟動時,會產生一個路徑進行日志輸出, 查看啟動日志 log.
至此 hadoop完全分布式集群搭建成功!并且順利運行.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/171984.html
標籤:其他
