實際應用中通常分爲2種java
第一種:硬件服務器node
第二種:雲主機linux
在VM ware12環境下搭建三臺服務器vim
配置ip,主機名,本地映射(/etc/hosts)centos
另外兩臺由原先克隆而來安全
克隆機器後,修改mac地址服務器
使用root:網絡
vim /etc/udev/rules.d/70-persistent-net.rules
(1)刪除eth0架構
(2)將eth1修改成eth0併發
(3)複製mac地址
(4)編輯網卡信息 ,修改ip地址和Mac地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network
(6)修改Hosts文件,配置映射
(7)關閉防火牆
$ sudo chkconfig iptables off
(8)關閉Selinux(安全性過高,解決沒必要要的麻煩)必需要重啓機器才能生效配置
$ sudo vim /etc/sysconfig/selinux 設置值: SELINUX=disabled
(7)重啓網絡
service network restart
(8)經過ifconfig命令查看是否配置成功
(9)重啓虛擬機
注:這裏我三臺虛擬機ip,主機名依次爲
192.168.59.223 bigdata-hpsk02.huadian.com 192.168.59.224 bigdata-hpsk03.huadian.com 192.168.59.225 bigdata-hpsk04.huadian.com
1.不使用批量安裝工具
手動分發,將配置好的第一臺hadoop分發到每臺機器。這裏我使用分發的方式
2.使用批量工具:大數據集羣監控運維管理工具CM
CDH:開源軟件基礎架構Hadoop的服務。
能夠在http://archive.cloudera.com/cdh5/cdh/5/下載穩定的版本
建立用戶
useradd username
給用戶添加密碼
passwd username
建立目錄
在根目錄下建立這四個文件夾,datas放測試數據 softwares放軟件安裝壓縮包 modules軟件安裝目錄 tools開發IDE以及工具 。
linux系統都是用文件來表示的,併發調優時修改句柄數時必須的。設置的是當前用戶準備要運行的程序的限制。
若是單個進程打開的文件句柄數量超過了系統定義的值由於有時候會趕上Socket/File: Can't open so many files的問題
ulimit -a #查看linux相關參數
其中一個方法,是想ulimit修改命令放入/etc/profile裏面,可是這個作法並很差
正確的作法,應該是修改/etc/security/limits.conf
sudo vim /etc/security/limits.conf
在文件末尾添加:
重啓機器,查看句柄數
ulimit -n
單個進程啓動:用於啓動 sbin/hadoop-daemon.sh start namenode sbin/hadoop-daemon.sh start datanode sbin/yarn-daemon.sh start resourcemanager sbin/yarn-daemon.sh start nodemanager 分別啓動yarn和hdfs:用於關閉 sbin/start-dfs.sh -》namenode -》datanode -》secondarynamenode sbin/start-yarn.sh -》resourcemanager -》全部的nodemanager 一次性啓動全部進程 sbin/start-all.sh
(1)每臺機器爲本身建立公私鑰
ssh-keygen -t rsa
![](http://static.javashuo.com/static/loading.gif)
能夠在用戶目錄下的.ssh文件夾中看到生成的id_rsa id_rsa.pub
(2)每臺機器將本身的公鑰發給每臺機器包括本身
ssh-copy-id 本身的主機名 ssh-copy-id 另外第一臺主機名 ssh-copy-id 另外第二臺主機名
驗證是否3臺機器能互相登陸成功(爲了省事就貼一張圖了):
直接使用ntp服務同步外網時間服務器 -》選擇一臺機器做爲中間同步服務A,A與外網進行同步,B,C同步A -》配置A sudo vim /etc/ntp.conf 刪除默認配置: restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 server 0.centos.pool.ntp.org server 1.centos.pool.ntp.org server 2.centos.pool.ntp.org -》添加 配置A容許哪些機器與我同步 restrict 192.168.59.0 mask 255.255.255.0 nomodify notrap 配置A跟誰同步 server 202.112.10.36 配置本地同步 server 127.127.1.0 # local clock 注:127.127.1.0 ntp時間服務器的保留ip地址,做用是使用本機做爲客戶端的時間服務器 fudge 127.127.1.0 stratum 10 -》啓動ntp服務 sudo service ntpd start -》配置B,C同步A sudo vim /etc/ntp.conf server 192.168.59.223 -》手動同步 sudo ntpdate 192.168.59.223 -》開啓ntp服務 sudo service ntpd start
偷懶作法:
三臺機器同時設置時間
sudo date -s "2018-04-27 15:56:00"
(1)上傳壓縮包到softwares目錄下
(2)解壓到指定目錄
tar -zxvf /opt/softwares/jdk-8u91-linux-x64.tar.gz -C /opt/modules/
(3)分發到第二臺,第三臺機器
scp -r jdk1.8.0_91 hpsk@bigdata-hpsk03.hpsk.com:/opt/modules/ scp -r jdk1.8.0_91 hpsk@bigdata-hpsk04.hpsk.com:/opt/modules/
(4)配置環境變量(每臺機器)
vi /etc/profile
進入後在尾部添加
##JAVA_HOME export JAVA_HOME=/opt/modules/jdk1.8.0_91 export PATH=$PATH:$JAVA_HOME/bin
(1)上傳壓縮包到softwares目錄下
(2)解壓到指定目錄
tar -zxvf /opt/softwares/hadoop-2.7.3.tar.gz -C /opt/modules/ z:表示gz壓縮 x:表示解包 v:表示壓縮過程 -C指定解壓地址
(3)節點分佈
機器1 datanode nodemanager namenode(工做)
機器2 datanode nodemanager nn rm(備份)
機器3 datanode nodemanager resourcemanager(工做)
datanode 存儲數據 nodemanager處理數據
本地的Nodemanager優先處理本地的datanode避免了跨網絡傳輸。(Hadoop本身的優化)
namenode resourcenode都是主節點,都須要接收用戶的請求,若是都放在機器1上負載比較高,故將他們分佈到不一樣的機器。
(4)修改配置文件
env.sh:配置環境變量
默認會先去全局變量/etc/profile中找JAVA_HOME 可是爲了避免出現問題在下面三個文件中配置JAVA_HOME環境變量。配置文件在/hadoop2.7.3/etc/hadoop/下hadoop-env mapred-env yarn-env
site-xml:配置用戶自定義需求
core-site.xml:配hadoop全局的一些屬性
先在hadoop目錄下建立臨時存儲目錄,存儲元數據
<configuration> //fs.defaultFS:hdfs的入口 配置第一臺機器的入口 <property> <name>fs.defaultFS</name> <value>hdfs://bigdata-hpsk02.huadian.com:8020</value> </property> //hadoop.tmp.dir hadoop臨時存儲目錄 <property> <name>hadoop.tmp.dir</name> <value>/opt/modules/hadoop-2.7.3/tmpData</value> </property> </configuration>
hdfs-site.xml:配置hdfs的屬性
<configuration> //dfs.replication:文件副本數 <property> <name>dfs.replication</name> <value>3</value> </property> //訪問權限,不是hdfs同屬用戶沒有權限訪問。關閉,讓全部人訪問hdfs。工做中不能這麼配 <property> <name>dfs.permissions.enabled</name> <value>true</value> </property> </configuration>
mapred-site.xml :配置MapReduce
//讓MapReduce運行在Yarn上 <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> //jobhistory </configuration>
yarn-site.xml
<configuration> //指定resourcemanager在哪臺機器上運行 <property> <name>yarn.resourcemanager.hostname</name> <value>bigdata-training03.hpsk.com</value> </property> //指定yarn上運行的程序是什麼類型 <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
slaves:配置全部從節點的地址 (一行一個)
bigdata-hpsk02.huadian.com bigdata-hpsk03.huadian.com bigdata-hpsk04.huadian.com
從第一臺機器將hadoop-2.7.3目錄分發給另一臺機器
scp -r hadoop-2.7.3 hpsk@bigdata-hspk03.huadian.com:/opt/modules/
或者另外一臺機器從第一臺上下載
scp -r hpsk@bigdata-hpsk02.huadian.com:/opt/modules/hadoop-2.7.3 /opt/modules/
注意要改變/opt/modules目錄用戶權限
格式化文件系統,格式化的時候會產生新的元數據,在哪裏啓動namenode就在哪臺機器上進行格式化
bin/hdfs namenode -format
啓動對應進程,用單個進程命令
在第一臺機器上啓動namenode
sbin/hadoop-daemon.sh start namenode
namenode將元數據保存在咱們以前在core-site.xml中配置的臨時存儲目錄。裏面包含fsimage:文件系統快照 edit logs:對文件系統的改動序列。
注意:不能再第一臺機器上執行start-yarn.sh 會默認啓動resourcemanager主節點。咱們要將resourcemanager在第三臺機器上啓動。
啓動三臺機器的datanode
sbin/hadoop-daemon.sh start datanode
在第三臺上機器上啓動yarn
sbin/start-yarn.sh
報錯了..緣由:找不到resourcemanager的主機名。主機名不對。。
yarn-site.xml文件中
改爲第三臺的主機名:
bigdata-hpsk04.huadian.com
最後查看進程:
第一臺機器:
第二臺:
第三臺:
到此分佈式環境搭建完畢~
在HDFS上建立一個Input目錄
新建一個測試文件
內容:
上傳到input目錄下
測試wordcount程序,能夠看到鏈接的是第三臺,第三臺纔有resourcemanager
查看結果
停掉全部進程能夠用統一的執行命令
第一臺機器上執行:
sbin/stop-dfs.sh
關閉全部namenode datanode
第三臺機器上執行:
sbin/stop-yarn.sh
關閉全部resourcemanager nodemanager
補充:能夠在空閒的機器上啓動secondary namenode