前言html
本人嘔心瀝血所寫,通過好一段時間反覆錘鍊和整理修改。感謝所參考的博友們!同時,歡迎前來查閱賞臉的博友們收藏和轉載,附上本人的連接http://www.cnblogs.com/zlslch/p/5851166.html java
關於幾個疑問和幾處心得!node
a.用NAT,仍是橋接,仍是only-host模式?linux
b.用static的ip,仍是dhcp的?shell
答:static編程
c.別認爲快照和克隆不重要,小技巧,比別人靈活用,會很節省時間和大大減小錯誤。微信
d.重用起來腳本語言的編程,如paython或shell編程。網絡
對於用scp -r命令或deploy.conf(配置文件),deploy.sh(實現文件複製的shell腳本文件),runRemoteCdm.sh(在遠程節點上執行命令的shell腳本文件)。架構
e.重要Vmare Tools加強工具,或者,rz上傳、sz下載。app
f.大多數人經常使用
用到的所需:
一、VMware-workstation-full-11.1.2.61471.1437365244.exe
二、CentOS-6.5-x86_64-bin-DVD1.iso
三、jdk-7u69-linux-x64.tar.gz
四、hadoop-2.6.0.tar.gz
機器規劃:
192.168.80.31 ---------------- master
192.168.80.32 ---------------- slave1
192.168.80.33 ---------------- slave1
目錄規劃:
全部namenode節點產生的日誌 /data/dfs/name
全部datanode節點產生的日誌 /data/dfs/data
第一步:安裝VMware-workstation虛擬機,我這裏是VMware-workstation11版本。
詳細見 ->
第二步:安裝CentOS系統,我這裏是6.6版本。推薦(生產環境中經常使用)
詳細見 ->
第三步:VMware Tools加強工具安裝
詳細見 ->
第四步:準備小修改(學會用快照和克隆,根據自身要求狀況,合理位置快照)
詳細見 ->
第一步:搭建一個3節點的hadoop分佈式小集羣--預備工做(master、slave一、slave2的網絡鏈接、ip地址靜態、拍照、遠程)
master
slave1
Slave2
對master而言,
即,成功由原來的192.168.80.140(是動態獲取的)成功地,改變成了192.168.80.31(靜態的)
以上是master 的 192.168.80.31
對slave1而言,
即,成功由原來的192.168.80.141(是動態獲取的)成功地,改變成了192.168.80.32(靜態的)
以上是slave1 的 192.168.80.32
對slave2而言,
即,成功由原來的192.168.80.142(是動態獲取的)成功地,改變成了192.168.80.33(靜態的)
以上是slave2 的 192.168.80.33
打開,C:\Windows\System32\drivers\etc
ssh master
ssh slave1
ssh slave2
第二步:搭建一個3節點的hadoop分佈式小集羣--預備工做(master、slave一、slave2的用戶規劃、目錄規劃)
依次,對master、slave一、slave2進行用戶規劃,hadoop用戶組,hadoop用戶。
先新建用戶組,再來新建用戶 。
[root@master ~]# groupadd hadoop [root@master ~]# useradd -g hadoop hadoop (通常推薦用 useradd -g -m hadoop hadoop ) [root@master ~]# passwd hadoop [root@master ~]# cd /home/ [root@master home]# ls -al [root@master home]# su hadoop [hadoop@master home]$ cd [hadoop@master ~]$ pwd [hadoop@master ~]$ ls [hadoop@master ~]$
[root@slave1 ~]# groupadd hadoop [root@slave1 ~]# useradd -g hadoop hadoop [root@slave1 ~]# passwd hadoop [root@slave1 ~]# cd /home/ [root@slave1 home]# ls -al [root@slave1 home]# su hadoop [hadoop@slave1 home]$ cd [hadoop@slave1 ~]$ pwd [hadoop@slave1 ~]$ ls [hadoop@slave1 ~]$
[root@slave2 ~]# groupadd hadoop [root@slave2 ~]# useradd -g hadoop hadoop [root@slave2 ~]# passwd hadoop [root@slave2 ~]# cd /home/ [root@slave2 home]# ls -al [root@slave2 home]# su hadoop [hadoop@slave2 home]$ cd [hadoop@slave2 ~]$ pwd [hadoop@slave2 ~]$ ls [hadoop@slave2 ~]$
依次,對master、slave一、slave2進行目錄規劃,
名稱 路徑
全部集羣安裝的軟件目錄 /home/hadoop/app/
全部臨時目錄 /tmp
這個是,系統會默認的臨時目錄是在/tmp下,而這個目錄在每次重啓後都會被刪掉,必須從新執行format才行,不然會出錯。
若是這裏,咱們像下面這樣的話,
那麼得,事先在配置以前就要用root用戶建立/data/tmp。
暫時沒弄下面的
全部namenode節點產生的日誌 /data/dfs/name
全部datanode節點產生的日誌 /data/dfs/data
[hadoop@master ~]$ mkdir app
[hadoop@slave1 ~]$ mkdir app
[hadoop@slave2 ~]$ mkdir app
下面爲這三臺機器分配IP地址及相應的角色
192.168.80.31-----master,namenode,jobtracker
192.168.80.32-----slave1,datanode,tasktracker
192.168.80.33----- slave2,datanode,tasktracker
第三步:搭建一個3節點的hadoop分佈式小集羣--預備工做(master、slave一、slave2的環境檢查)
集羣安裝前的環境檢查
在集羣安裝以前,咱們須要一個對其環境的一個檢查
時鐘同步
3.1 master
[root@master hadoop]# date [root@master hadoop]# cd /usr/share/zoneinfo/ [root@master zoneinfo]# ls [root@master zoneinfo]# cd Asia/ [root@master Asia]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp:是否覆蓋"/etc/localtime"? y [root@master Asia]#
咱們須要ntp命令,來實現時間的同步。
[root@master Asia]# pwd
[root@master Asia]# yum -y install ntp
[root@master Asia]# ntpdate pool.ntp.org
3.2 slave1
[root@slave1 hadoop]# date [root@slave1 hadoop]# cd /usr/share/zoneinfo/Asia/ [root@slave1 Asia]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp:是否覆蓋"/etc/localtime"? y [root@slave1 Asia]# pwd /usr/share/zoneinfo/Asia [root@slave1 Asia]# yum -y install ntp
[root@slave1 Asia]# ntpdate pool.ntp.org
3.3 slave2
[root@slave2 hadoop]# date [root@slave2 hadoop]# cd /usr/share/zoneinfo/Asia/ [root@slave2 Asia]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cp:是否覆蓋"/etc/localtime"? y [root@slave2 Asia]# pwd /usr/share/zoneinfo/Asia [root@slave2 Asia]# yum -y install ntp
[root@slave2 Asia]# ntpdate pool.ntp.org
hosts文件檢查
依次對master,slave1,slave2
master
[root@master Asia]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.31 master
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.31 master 192.168.80.32 slave1 192.168.80.33 slave2
slave1
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.32 slave1
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.32 slave1 192.168.80.31 master 192.168.80.33 slave2
slave2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.33 slave2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.33 slave2 192.168.80.31 master 192.168.80.32 slave1
禁用防火牆
依次對master,slave1,slave2
在這裏哈,參考了不少,也諮詢了一些人。直接永久關閉吧。
http://www.cnblogs.com/baiboy/p/4639474.html
master
[root@master Asia]# chkconfig iptables off
[root@master Asia]# service iptables status
slave1
[root@slave1 Asia]# chkconfig iptables off
[root@slave1 Asia]# service iptables status
slave2
[root@slave2 Asia]# chkconfig iptables off
[root@slave2 Asia]# service iptables status
第四步:搭建一個3節點的hadoop分佈式小集羣--預備工做(master、slave一、slave2的SSH免密碼通訊的配置)
SSH免密碼通訊的配置
一、每臺機器的各自自己的無密碼訪問
master
[root@master Asia]# su hadoop [hadoop@master Asia]$ cd [hadoop@master ~]$ cd .ssh [hadoop@master ~]$ mkdir .ssh [hadoop@master ~]$ ssh-keygen -t rsa (/home/hadoop/.ssh/id_rsa): (Enter鍵) Enter passphrase (empty for no passphrase): (Enter鍵) Enter same passphrase again: (Enter鍵)
[hadoop@master ~]$ pwd [hadoop@master ~]$ cd .ssh [hadoop@master .ssh]$ ls [hadoop@master .ssh]$ cat id_rsa.pub >> authorized_keys [hadoop@master .ssh]$ ls [hadoop@master .ssh]$ cat authorized_keys ssh-rsa [hadoop@master .ssh]$ cd .. [hadoop@master ~]$ chmod 700 .ssh [hadoop@master ~]$ chmod 600 .ssh/* [hadoop@master ~]$ ls -al
[hadoop@master ~]$ ssh master [hadoop@master ~]$ su root 密碼: [root@master hadoop]# yum -y install openssh-clients
[root@master hadoop]# su hadoop [hadoop@master ~]$ ssh master Are you sure you want to continue connecting (yes/no)? yes [hadoop@master ~]$ ssh master
slave1
[root@slave1 Asia]# su hadoop [hadoop@slave1 Asia]$ cd [hadoop@slave1 ~]$ cd .ssh [hadoop@slave1 ~]$ mkdir .ssh [hadoop@slave1 ~]$ ssh-keygen -t rsa (/home/hadoop/.ssh/id_rsa): (Enter鍵) Enter passphrase (empty for no passphrase): (Enter鍵) Enter same passphrase again: (Enter鍵)
[hadoop@slave1 ~]$ pwd [hadoop@slave1 ~]$ cd .ssh [hadoop@slave1 .ssh]$ ls [hadoop@slave1 .ssh]$ cat id_rsa.pub >> authorized_keys [hadoop@slave1 .ssh]$ ls [hadoop@slave1 .ssh]$ cat authorized_keys ssh-rsa [hadoop@slave1 .ssh]$ cd .. [hadoop@slave1 ~]$ chmod 700 .ssh [hadoop@slave1 ~]$ chmod 600 .ssh/* [hadoop@slave1 ~]$ ls -al
[hadoop@slave1 ~]$ ssh slave1 [hadoop@slave1 ~]$ su root [root@slave1 hadoop]# yum -y install openssh-clients
[root@slave1 hadoop]# su hadoop [hadoop@slave1 ~]$ ssh slave1 Are you sure you want to continue connecting (yes/no)? yes [hadoop@slave1 ~]$ ssh slave1
slave2
[root@slave2 Asia]# su hadoop [hadoop@slave2 Asia]$ cd [hadoop@slave2 ~]$ cd .ssh [hadoop@slave2 ~]$ mkdir .ssh [hadoop@slave2 ~]$ ssh-keygen -t rsa (/home/hadoop/.ssh/id_rsa): (Enter鍵) Enter passphrase (empty for no passphrase): (Enter鍵) Enter same passphrase again: (Enter鍵)
[hadoop@slave2 ~]$ pwd [hadoop@slave2 ~]$ cd .ssh [hadoop@slave2 .ssh]$ ls [hadoop@slave2 .ssh]$ cat id_rsa.pub >> authorized_keys [hadoop@slave2 .ssh]$ ls [hadoop@slave2 .ssh]$ cat authorized_keys ssh-rsa [hadoop@slave2 .ssh]$ cd .. [hadoop@slave2 ~]$ chmod 700 .ssh [hadoop@slave2 ~]$ chmod 600 .ssh/* [hadoop@slave2 ~]$ ls -al
[hadoop@slave2 ~]$ ssh slave2 [hadoop@slave2 ~]$ su root [root@slave2 hadoop]# yum -y install openssh-clients
[root@slave2 hadoop]# su hadoop [hadoop@slave2 ~]$ ssh slave2 Are you sure you want to continue connecting (yes/no)? yes [hadoop@slave2 ~]$ ssh slave2
到此,爲止。每臺機器的各自自己的無密碼訪問已經成功設置好了
二、 每臺機器之間的無密碼訪問的設置
2.1鏈接master
完成slave1與master,slave2與msater
2.1.1完成slave1與master
[hadoop@slave1 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@master 'cat >> ~/.ssh/authorized_keys' Are you sure you want to continue connecting (yes/no)? yes hadoop@master's password:(是master的密碼)
[hadoop@master ~]$ cd .ssh
[hadoop@master .ssh]$ ls
[hadoop@master .ssh]$ cat authorized_keys
2.1.2完成slave2與master
[hadoop@slave2 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@master 'cat >> ~/.ssh/authorized_keys'
將master的authorized_keys,分發給slave1
[hadoop@master .ssh]$ scp -r authorized_keys hadoop@slave1:~/.ssh/ Are you sure you want to continue connecting (yes/no)? yes hadoop@slave1's password:(密碼是hadoop)
查看
[hadoop@slave1 ~]$ cd .ssh
[hadoop@slave1 .ssh]$ ls
[hadoop@slave1 .ssh]$ cat authorized_keys
將master的authorized_keys,分發給slave2
[hadoop@master .ssh]$ scp -r authorized_keys hadoop@slave2:~/.ssh/ Are you sure you want to continue connecting (yes/no)? yes hadoop@slave2's password:(密碼是hadoop)
至此,完成slave1與master,slave2與msater
如今,咱們來互相測試下。
從master出發,
[hadoop@master .ssh]$ ssh slave1
[hadoop@master .ssh]$ ssh slave2
[hadoop@slave1 .ssh]$ ssh master [hadoop@master ~]$ exit [hadoop@slave1 .ssh]$ ssh slave2 Are you sure you want to continue connecting (yes/no)? yes [hadoop@slave2 ~]$ exit [hadoop@slave1 .ssh]$ ssh slave2 [hadoop@slave2 ~]$ exit [hadoop@slave1 .ssh]$
[hadoop@slave2 .ssh]$ ssh master [hadoop@master ~]$ exit [hadoop@slave2 .ssh]$ ssh slave1 Are you sure you want to continue connecting (yes/no)? yes [hadoop@slave1 ~]$ exit [hadoop@slave2 .ssh]$ ssh slave1 [hadoop@slave1 ~]$ exit
至此,3節點的master、slave一、slave2的SSH免密碼通訊的配置,已經完成。
分:
第一步,各機器的各自自己間的免密碼通訊。
第二步,各機器的之間的免密碼通訊。
第五步:搭建一個3節點的hadoop分佈式小集羣--預備工做(master、slave一、slave2的JDK安裝與配置)
master
[hadoop@master ~]$ ls [hadoop@master ~]$ cd app/ [hadoop@master app]$ ls [hadoop@master app]$ rz [hadoop@master app]$ su root [root@master app]# yum -y install lrzsz
[hadoop@djt11 app]$pwd
[hadoop@djt11 app]$ tar -zxvf jdk-7u79-linux-x64.tar.gz
[hadoop@master app]$ ls [hadoop@master app]$ rm jdk-7u79-linux-x64.tar.gz [hadoop@master app]$ ls [hadoop@master app]$ su root [root@master app]# vi /etc/profile
JAVA_HOME=/home/hadoop/app/jdk1.7.0_79 CLASSPATH=$JAVA_HOME/lib:$CLASSPATH PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH
[root@master app]# source /etc/profile
[root@master app]# java -version
slave1
[hadoop@slave1 ~]$ ls [hadoop@slave1 ~]$ cd app/ [hadoop@slave1 app]$ ls [hadoop@slave1 app]$ rz [hadoop@slave1 app]$ su root [root@slave1 app]# yum -y install lrzsz
[root@master app]# su hadoop
[hadoop@master app]$ ls
[hadoop@master app]$ scp -r ./jdk1.7.0_79 slave1:/home/hadoop/app/
[hadoop@master app]$ ls
[hadoop@master app]$ scp -r ./jdk1.7.0_79 slave2:/home/hadoop/app/
分發完以後,slave1和slave2單獨進行/etc/profile配置
[hadoop@slave1 app]$ su root
[root@slave1 app]# vi /etc/profile
JAVA_HOME=/home/hadoop/app/jdk1.7.0_79 CLASSPATH=$JAVA_HOME/lib:$CLASSPATH PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH
[root@slave2 app]# vi /etc/profile
JAVA_HOME=/home/hadoop/app/jdk1.7.0_79 CLASSPATH=$JAVA_HOME/lib:$CLASSPATH PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH
[root@slave1 app]# source /etc/profile [root@slave1 app]# su hadoop [hadoop@slave1 app]$ ls jdk1.7.0_79 [hadoop@slave1 app]$ java -version
[root@slave2 app]# source /etc/profile [root@slave2 app]# su hadoop [hadoop@slave2 app]$ ls jdk1.7.0_79 [hadoop@slave2 app]$ java -version
第六步:搭建一個3節點的hadoop分佈式小集羣--預備工做(master、slave一、slave2的hadoop壓縮包的配置)
http://www.cnblogs.com/lanxuezaipiao/p/3525554.html
master
[hadoop@master app]$ tar -zxvf hadoop-2.6.0.tar.gz
[hadoop@master app]$ ls [hadoop@master app]$ rm hadoop-2.6.0.tar.gz [hadoop@master app]$ ls
[hadoop@master app]$ su root
[root@master app]# vi /etc/profile
JAVA_HOME=/home/hadoop/app/jdk1.7.0_79 HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0 CLASSPATH=$JAVA_HOME/lib:$CLASSPATH PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH export JAVA_HOME HADOOP_HOME CLASSPATH PATH
[root@master app]# source /etc/profile
查看hadoop的版本
[root@master app]# hadoop version
[root@master app]# su hadoop [hadoop@master hadoop-2.6.0]$ cd etc/hadoop [hadoop@master hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79
[hadoop@master hadoop]$ vi core-site.xml
<property> <name>fs.default.name</name> <value>hdfs://master:9000</value> <description>The name of the default file system, using 9000 port.</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/tmp</value> <description>A base for other temporary directories.</description> </property>
注意,是hdfs,圖片上有錯誤!
[hadoop@master hadoop]$ vi hdfs-site.xml
<property> <name>dfs.namenode.rpc-address</name> <value>master:9000</value> </property> <property> <name>dfs.replication</name> <value>2</value> <description>Set to 1 for pseudo-distributed mode,Set to 2 for distributed mode,Set to 3 for distributed mode.</description> </property>
[hadoop@master hadoop]$ cp mapred-site.xml.template mapred-site.xml
[hadoop@master hadoop]$ vi mapred-site.xml
<property> <name>mapred.job.tracker</name> <value>master:9001</value> </property> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
[hadoop@master hadoop]$ vi masters
[hadoop@master hadoop]$ vi slaves
slave1
slave2
至此,master的hadoop壓縮包的配置已經完成。
向slave一、slave2分發hadoop壓縮包及配置
[hadoop@master hadoop]$ cd /home/hadoop/app/
[hadoop@master app]$ ls
[hadoop@master app]$ scp -r ./hadoop-2.6.0 slave1:/home/hadoop/app/
[hadoop@master app]$ scp -r ./hadoop-2.6.0 slave2:/home/hadoop/app/
至此,master,slave1,slave2的hadoop壓縮包的配置所有完成。
而後,在/etc/profile配置hadoop路徑
[hadoop@slave1 app]$ su root
[root@slave1 app]# vi /etc/profile
JAVA_HOME=/home/hadoop/app/jdk1.7.0_79
HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0
CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export JAVA_HOME HADOOP_HOME CLASSPATH PATH
[root@slave1 app]# source /etc/profile
[root@slave1 app]# hadoop version
JAVA_HOME=/home/hadoop/app/jdk1.7.0_79
HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0
CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export JAVA_HOME HADOOP_HOME CLASSPATH PATH
[root@slave2 app]# source /etc/profile
[root@slave2 app]# hadoop version
至此,3節點的hadoop壓縮包的安裝與配置均完成。
第七步:搭建一個3節點的hadoop分佈式小集羣--預備工做(master、slave一、slave2的hadoop壓縮包的格式化和啓動進程)
初次格式化前的進程查看
對master節點,進行格式化,即在 namenode 上啓動格式化
[hadoop@master bin]$ pwd /home/hadoop/app/hadoop-2.6.0/bin [hadoop@master bin]$ ./hadoop namenode -format
或者,以下,
[hadoop@master hadoop-2.6.0]$ bin/hadoop namenode -format
在 namenode 上啓動 hadoop 集羣
[hadoop@master bin]$ ./start-all.sh
或者以下
[hadoop@master hadoop-2.6.0]$ sbin/start-all.sh Are you sure you want to continue connecting (yes/no)? yes [hadoop@master hadoop-2.6.0]$ jps 1659 NameNode 1964 ResourceManager 2027 Jps 1830 SecondaryNameNode [hadoop@master hadoop-2.6.0]$
第八步:搭建一個3節點的hadoop分佈式小集羣--預備工做(master、slave一、slave2的集羣狀態)
出現這樣的狀況啊,是由於,
或者,,
master
<property> <name>dfs.namenode.http-address</name> <value>master:50070</value> </property>
slave1
<property> <name>dfs.namenode.http-address</name> <value>master:50070</value> </property>
slave2
想說的是,新的yarn架構默認是8088了,hadoop-2.*以後。
hadoop2.*有50030嗎?沒有。沒有jobtracker和tasktracker了。
已經沒有jobtracker和tasktracker了,
而是ResourceManager和NodeManager了。
成功!zhouls祝你好運!
同時,你們能夠關注個人我的博客:
http://www.cnblogs.com/zlslch/ 和 http://www.cnblogs.com/lchzls/ http://www.cnblogs.com/sunnyDream/
詳情請見:http://www.cnblogs.com/zlslch/p/7473861.html
人生苦短,我願分享。本公衆號將秉持活到老學到老學習無休止的交流分享開源精神,匯聚於互聯網和我的學習工做的精華乾貨知識,一切來於互聯網,反饋回互聯網。
目前研究領域:大數據、機器學習、深度學習、人工智能、數據挖掘、數據分析。 語言涉及:Java、Scala、Python、Shell、Linux等 。同時還涉及日常所使用的手機、電腦和互聯網上的使用技巧、問題和實用軟件。 只要你一直關注和呆在羣裏,天天必須有收穫
對應本平臺的討論和答疑QQ羣:大數據和人工智能躺過的坑(總羣)(161156071)