Hadoop筆記之六——Hadoop2.x 完全分散式搭建
1、準備伺服器,並規劃伺服器角色
3臺 虛擬機器Linux s-hadoop01.lele.com 4G 記憶體 40G (機子配置較差 1G) NameNode ResourceManager DataNode NodeManager s-hadoop02.lele.com 2G 記憶體 40G (1G) DataNode SecondaryNameNode NodeManager s-hadoop03.lele.com 2G 記憶體 40G (1G) DataNode NodeManager
生產環境:NameNode 單獨一臺伺服器 ResourceManager與NameNode一般在同一臺伺服器 SecondaryNameNode與NameNode一定要部署在不同的伺服器上 SecondaryNameNode的配置(記憶體)需要與NameNode保持一致 DataNode與NodeManager同一臺伺服器
2、安裝環境準備
網路準備使用: (1)、檢查受網路管理器管理的網路介面: nmcli dev status或者nmcli connection show (2)、解除安裝虛擬機器自帶網絡卡(也可以不解除安裝): 開啟 vi /etc/sysconfig/network-scripts/ifcfg-eth33(每個機子都可能不一樣,但格式會是“ifcfg-eth數字”), 把ONBOOT=no,改為ONBOOT=yes 修改/etc/yum/pluginconf.d/fastestmirror.conf中的enable,設定為0 sudo yum groupremove "Virtualization" sudo yum remove libvirt (3)、自定義靜態ip: vim /etc/sysconfig/network-scripts/ifcfg-ens33 內容模版: TYPE="Ethernet" BOOTPROTO="static" IPADDR=192.168.1.126 GATEWAY=192.168.1.1 NETMASK=255.255.255.0 DNS1=192.168.1.1 NM_CONTROLLED=no DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" //這個不能改UUID=66c93861-628b-48ca-a3cb-e50e7cddce0b DEVICE=ens33 ONBOOT="yes" (4)、重啟網路服務 sudo systemctl restart network.service (5)、修改dns: nmcli con mod UUID ipv4.dns "114.114.114.114 8.8.8.8"(將UUID改成自己的mac地址) (6)、dns重生效: nmcli con up UUID(UUID改稱自己的mac地址) IP,主機名以及主機名與IP的對映關係 $ ping s-hadoop01.lele.com JDK與JAVA_HOME環境變數 javac -version 查詢自帶的openjdk有哪些 rpm -qa | grep java 然後使用rpm -e --nodeps jdk名稱來解除安裝 配置環境變數:vim /etc/profile export JAVA_HOME=/opt/modules/jdk1.7.0_67 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
3)時間同步(重點)切換到root使用者 a.先選擇其中一臺作為ntp時間伺服器 s-hadoop01.lele.com 安裝ntpd服務 # yum -y install ntp 開啟ntpd服務 # service ntpd start # chkconfig ntpd on # chkconfig ntpd --list | grep ntpd 修改/etc/ntp.conf配置檔案 1) 去掉restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap註釋,同時修改IP與你的主機IP在同一網段 2)註釋掉外部ntp時間伺服器 ##server 0.centos.pool.ntp.org iburst ##server 1.centos.pool.ntp.org iburst ##server 2.centos.pool.ntp.org iburst ##server 3.centos.pool.ntp.org iburst 3) 新增一下兩行內容 server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10
# service ntpd restart 驗證: 在其他伺服器上通過ntpdate命令來進行時間同步 ntpdate -u ip/主機名 同步時,看下防火牆設定 關閉ntp伺服器的防火牆 # systemctl stop firewalld.service 禁止防火牆開機啟動 systemctl disable firewalld.service 在另外一臺上進行同步時間 # ntpdate -u s-hadoop01.lele.com 29 May 09:48:18 ntpdate[1377]: adjust time server 192.168.199.144 offset 0.000066 sec 讓BIOS時鐘時間與系統時間進行同步(所有伺服器上) # hwclock --localtime # hwclock --localtime -w 修改配置檔案 # vim /etc/sysconfig/ntpd 在首行新增————設定是否允許BIOS與系統時間進行同步。 SYNC_HWCLOCK=yes b.其他伺服器與這臺ntp時間伺服器進行時間同步 通過crontab定時任務進行 每10分鐘進行時間同步 0-59/10 * * * * /usr/sbin/ntpdate -u s-hadoop01.lele.com 4)防火牆關閉 systemctl stop firewalld.service # systemctl disable httpd.service # systemctl list-units --type=service | grep firewalld
3、hadoop完全分散式安裝
將hadoop資料夾改成普通使用者: sudo chown -R brifeng:lele hadoop
先在其中一臺伺服器上進行解壓安裝,並修改好配置,然後通過scp分發到其他伺服器上 前提:要求所有伺服器上的使用者名稱、密碼,以及目錄保持一致 /opt/modules/hadoop 安裝目錄 解壓安裝 修改配置檔案 http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/ClusterSetup.html 1) hadoop-env.sh export JAVA_HOME=/opt/modules/jdk1.7.0_67
export HADOOP_CONF_DIR=/opt/modules/hadoop-2.5.0-cdh5.3.6/etc/hadoop
2)core-site.xml //@前面是使用者名稱,後面是ip地址或者主機名 //修改的時候要注意ip地址和主機名都要註明,否則連線的就是root使用者。。 //以上純屬扯淡 <property> <name>fs.defaultFS</name> <value>hdfs://hadoop.lele.org:8020</value> <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem.</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/modules/hadoop-2.5.0-cdh5.3.6/tmp/data/</value> <description>A base for other temporary directories.</description> </property> 3)hdfs-site.xml secondaryNamenode http https <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop.lele.org03:50090</value> <description> The secondary namenode http server address and port. </description> </property>
<property> <name>dfs.namenode.secondary.https-address</name> <value>hadoop.lele.org03:50091</value> <description> The secondary namenode HTTPS server address and port. </description> </property>
4) mapred-site.xml <property> <name>mapreduce.framework.name</name> <value>yarn</value> <description>The runtime framework for executing MapReduce jobs. Can be one of local, classic or yarn. </description> </property>
5) yarn-site.xml <property> <description>The hostname of the RM.</description> <name>yarn.resourcemanager.hostname</name> <value>hadoop.lele.org02</value> </property> <property> <description>the valid service name should only contain a-zA-Z0-9_ and can not start with numbers</description> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> 6)slaves masters $ vim slaves 配置datanode [email protected] [email protected] [email protected] $ vim masters 配置secondaryNamenode [email protected]
7)scp分發 $ rm -rf doc/ $ scp -r hadoop-2.5.0/ [email protected]:/opt/modules/hadoop/ $ scp -r hadoop-2.5.0/ [email protected]:/opt/modules/hadoop/ 8)ssh免密碼登入設定(針對具體使用者起作用) 1) 在各伺服器生成公鑰、私鑰檔案 2)分發公鑰檔案給對方 1)$ ssh-keygen 在使用者的home的.ssh目錄下生成公鑰、私鑰檔案 id_rsa id_rsa.pub 2)把公鑰檔案傳給對方,並且在對方機器上將公鑰檔案追寫到authorized_keys 免密碼登入到本機 $ ssh-copy-id -i localhost $ssh localhost $ exit ssh 免密碼登入到其他伺服器 $ ssh-copy-id -i s-hadoop01.lele.com $ ssh-copy-id -i s-hadoop02.lele.com $ ssh-copy-id -i s-hadoop03.lele.com 9)啟動叢集 格式化NameNode
$ bin/hdfs namenode -format
Storage directory /opt/modules/hadoop/hadoop-2.5.0/tmp/data/dfs/name has been successfully formatted.(namenode元資料存放目錄) 啟動叢集 1)啟動hdfs 在NameNode所在的節點上執行 sbin/start-dfs.sh NameNode ---> DataNode ---> SecondaryNameNode 2)啟動YARN 在ResourceManager所在的節點上執行 sbin/start-yarn.sh ResourceManager ---> NodeManager 停止: 1)停止HDFS 在NameNode所在的節點上執行 $ sbin/stop-dfs.sh 2)停止YARN 在ResourceManager節點上執行 $ ./stop-yarn.sh
4、通過web頁面訪問
知識點補充: 1、檢視埠:sudo lsof -i:50070 -P 會輸出內容,找到PID,然後根據PID殺掉程序 kill掉埠:sudo kill -9 PID