安裝環境:html
1. 2臺 namenode 10臺 datanodejava
3. 安裝目錄:opt/softwarenode
jdk hadoop hbase zookeeperlinux
4.. zookeeper 3臺就能夠了shell
jdk rpm -ivh jdk-8u91-linux-x64.rpmapache
1. 修改hostname -> http://www.cnblogs.com/dkblog/archive/2011/11/02/2233123.htmlvim
須要修改兩處:一處是 ,另外一處是/etc/hosts,只修改任一處會致使系統啓動異常。首先切換到root用戶。服務器
用任一款你喜好的編輯器打開該文件,裏面有一行 HOSTNAME=localhost.localdomain (若是是默認的話),修改 localhost.localdomain 爲你的主機名。併發
注: etc/hosts 這個文件是負責dns 解析的 將hostname 和 ip對應起來的 好比ping slave1 機器會知道對應的ipdom
在文件末尾加上 192.168.150.20 20-master1
reboot
!!!!!!!以root身份直接在/etc/ssh/sshd_config中找到#PermitRootLogin = yes ,將其去掉重啓就能夠了。
!!!!!!!發現winscp 調用putty很差用 直接啓動putty就能夠登錄
將192.168.150.23 -> slave11 ping 測試鏈接 master 和 slave 互ping hostname 若是通了 證實能夠連通了
注: 部分例子中hadoop用戶自動忽略成root用戶
具體來說就是 兩步 : 1. 生成公鑰私鑰 2. 想免密碼登錄誰就將公鑰加到誰的author..keys中
Master(NameNode | JobTracker)做爲客戶端,要實現無密碼公鑰認證,鏈接到服務器Salve(DataNode | Tasktracker)上時,須要在Master上生成一個密鑰對,包括一個公鑰和一個私鑰,然後將公鑰複製到全部的Slave上。當Master經過SSH鏈接Salve時,Salve就會生成一個隨機數並用Master的公鑰對隨機數進行加密,併發送給Master。Master收到加密數以後再用私鑰解密,並將解密數回傳給Slave,Slave確認解密數無誤以後就容許Master進行鏈接了。這就是一個公鑰認證過程,其間不須要用戶手工輸入密碼。重要過程是將客戶端Master複製到Slave上。
總的來講就是用master的公鑰在slave上加密,而後傳回mater後用master本身的私鑰解密創建鏈接 記住永遠是要用本身的私鑰解密
在Master節點上執行如下命令
ssh-keygen –t rsa –P ''
這條命是生成其無密碼密鑰對,詢問其保存路徑時直接回車採用默認路徑。生成的密鑰對:id_rsa和id_rsa.pub,默認存儲在"/root/.ssh"目錄下。
查看"/home/hadoop/"下是否有".ssh"文件夾,且".ssh"文件下是否有兩個剛生產的無密碼密鑰對。
接着在Master節點上作以下配置,把id_rsa.pub追加到受權的key裏面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
用root用戶登陸服務器修改SSH配置文件"/etc/ssh/sshd_config"的下列內容。
RSAAuthentication yes # 啓用 RSA 認證
PubkeyAuthentication yes # 啓用公鑰私鑰配對認證方式
AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑(和上面生成的文件同)
設置完以後記得重啓SSH服務,才能使剛纔設置有效。
service sshd restart
退出root登陸,使用普通用戶驗證是否成功。
ssh localhost
從上圖中得知無密碼登陸本級已經設置完畢,接下來的事兒是
scp ~/.ssh/id_rsa.pub 23-slave11:~/
由於我以前能ping通 第一臺slave機器 192.168.150.23 在hosts中命名爲23-slave11
因此我直接用scp將公鑰進行復制:
1)查看slave11 中是否有這個公鑰
由於還沒配置好,登錄的時候仍是須要密碼的
能夠看到公鑰已經存進去了 id_rsa.pub
2)在/root/下面建立.ssh文件夾
mkdir ~/.ssh
而後是修改文件夾".ssh"的用戶權限,把他的權限修改成"700",用下面命令執行:
chmod 700 ~/.ssh
3)追加到受權文件"authorized_keys"
到目前爲止Master的公鑰也有了,文件夾".ssh"也有了,且權限也修改了。這一步就是把Master的公鑰追加到Slave11的受權文件"authorized_keys"中去。使用下面命令進行追加並修改"authorized_keys"文件權限:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
4)用root用戶修改"/etc/ssh/sshd_config"
具體步驟參考前面Master的"設置SSH配置",具體分爲兩步:第1是修改配置文件;第2是重啓SSH服務。
修改配置文件:
用root用戶登陸服務器修改SSH配置文件"/etc/ssh/sshd_config"的下列內容。
RSAAuthentication yes # 啓用 RSA 認證
PubkeyAuthentication yes # 啓用公鑰私鑰配對認證方式
AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑(和上面生成的文件同)
service sshd restart
和Master無密碼登陸全部Slave原理同樣,就是把Slave的公鑰追加到Master的".ssh"文件夾下的"authorized_keys"中,記得是追加(>>)。
以slave11 登錄 master1 爲例
建立"Slave1.Hadoop"本身的公鑰和私鑰,並把本身的公鑰追加到"authorized_keys"文件中。
1. 生成公鑰私鑰 鑰匙對
ssh-keygen -t rsa -P ''
2 並把本身的公鑰追加到"authorized_keys"文件中。用到的命令以下:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. 並追加到"Master.Hadoop"的"authorized_keys"中:
scp ~/.ssh/id_rsa.pub 20-master1:~/
2)在"Master.Hadoop"服務器的操做
用到的命令以下:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
至此一個master slave對能夠互相訪問了
注: 本例中全部的軟件都安裝在/opt/software/下面
下載jdk 1.8 本例中有機器上面有jdk的rpm包
我直接scp過來了
scp jdk-8u91-linux-x64.rpm 60.12.160.158:~
切到20-master1 直接 rpm –ivh jdk-8u91-linux-x64.rpm
jdk 1.8 會安裝到/usr/java下面
編輯"/etc/profile"文件,在後面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"內容。
1)編輯"/etc/profile"文件
vim /etc/profile
2)添加Java環境變量
在"/etc/profile"文件的尾部添加如下內容:
# set java environment
export JAVA_HOME=/usr/java/jdk1.8.0_91
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
3)使配置生效
保存並退出,執行下面命令使其配置當即生效。
source /etc/profile
4)使配置生效
java –version 發現jdk 仍是 1.7 的
緣由是原來機器上安裝了openjdk 1.7 因此咱們要先卸載openjdk
直接用 rpm -qa | grep java
查找安裝過的java 包
而後用命令:
yum -y remove 卸載
好比:
卸載完成後發現 java –version 已經無論用了
此後再安裝 jdk 1.8
rpm –ivh jdk-8u91-linux-x64.rpm 就能夠了
全部的機器上都要安裝hadoop,如今就先在Master服務器安裝,而後其餘服務器按照步驟重複進行便可。安裝和配置hadoop須要以"root"的身份進行。
安裝hadoop到 /opt/software下
解壓 hadoop.gz
tar -zxvf hadoop-2.5.2.tar.gz
給hadoop-2.5.2建立軟連接
ln -s hadoop-2.5.2 hadoop
效果以下:
把Hadoop的安裝路徑添加到"/etc/profile"中,修改"/etc/profile"文件(配置java環境變量的文件),將如下語句添加到末尾,並使其有效:
# set hadoop path
export HADOOP_HOME=/opt/software/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
重啓配置文件
Source /etc/profile
該"hadoop-env.sh"文件位於"/opt/software/hadoop/etc/hadoop"目錄下。
在文件的末尾添加下面內容 JAVA_HOME
# set java environment
export JAVA_HOME=/usr/java/jdk1.8.0_91
yarn-env.sh:
也是配置JAVA_HOME
Hadoop配置文件在conf目錄下,以前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。因爲Hadoop發展迅速,代碼量急劇增長,代碼開發分爲了core,hdfs和map/reduce三部分,配置文件也被分紅了三個core-site.xml、hdfs-site.xml、mapred-site.xml。core-site.xml和hdfs-site.xml是站在HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。
修改Hadoop核心配置文件core-site.xml,這裏配置的是HDFS的地址和端口號。
首先在hadoop根目錄下建立一個tmp文件 備用
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/software/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://20-master1:9000</value>
</property>
</configuration>
備註:如沒有配置hadoop.tmp.dir參數,此時系統默認的臨時目錄爲:/tmp/hadoo-hadoop。而這個目錄在每次重啓後都會被幹掉,必須從新執行format才行,不然會出錯。
在master的命令行終端執行以下命令建立hadoop的數據文件保存目錄及元數據保存目錄:
1. mkdir /opt/software/hadoop/hadoopdata
2. mkdir /opt/software/hadoop/hadoopname
Vi hdfs-site.xml:
在文件的<configuration></configuration>加入以下內容,保存退出
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/software/hadoop/hadoopdata/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/software/hadoop/hadoopdata/datanode</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>21-master2:9001</value>
</property>
</configuration>
修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
<configuration>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>240</value>
<final>true</final>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>48</value>
<final>true</final>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>6000</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>8000</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx5900m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx7900m</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
效果以下:
<configuration>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>4096</value>
</property>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>20-master1:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>20-master1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>20-master1:8040</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/opt/software/hadoop/logs/userlogs</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
<description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
<description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
</property>
</configuration>
23-slave11
24-slave12
25-slave13
slave4
slave5
slave6
slave7
slave8
slave9
slave10
注:本來是以ip地址的最後一組數字+slave編號命名的slave,可是發現名字太長了,因此該爲直接slave+num了
bin/hdfs namenode -format
注意:這裏的格式化文件系統並非硬盤格式化,只是針對主服務器hdfs-site.xml的dfs.namenode.name.dir和dfs.datanode.data.dir目錄作相應的清理工做。
sbin/start-all.sh
sbin/stop-all.sh
jps 查看進程
hadoop dfsadmin –report 查看hadoop狀態
也能夠進入 下面的namenod 和slave 查看進程起來了沒有
6.2.進入zookeeper的配置目錄,首先把zoo_sample.cfg重命名一下,能夠從新複製一遍,使用命令:
分別在datanode1,datanode2,datanode3的myid中寫入對應的server.n中的n,即分別是1,2,3.
6.開啓zookeeper服務,在三臺datanode機器的zookeeper安裝目錄下使用命令:
bin/zkServer.sh start
Hbase 須要裝在1個master上 和剩下的datanode上面
1. tar -zxvf hbase-0.94.2.tar.gz
7.2進入hbase的配置目錄,在hbase-env.sh文件裏面加入java環境變量.即:
1. JAVA_HOME=/usr/java/jdk1.7.0_09/
加入變量:
1. export HBASE_MANAGES_ZK=false
1. <property>
2. <name>hbase.rootdir</name>
3. <value>hdfs://namenode:9000/hbase</value>
4. </property>
5. <property>
6. <name>hbase.cluster.distributed</name>
7. <value>true</value>
8. </property>
9. <property>
10. <name>hbase.zookeeper.quorum</name>
11. <value>datanode1,datanode2,datanode3</value>
12. </property>
13. <property>
14. <name>hbase.zookeeper.property.dataDir</name>
15. <value>/home/cloud/project/tmp/zookeeper/data</value>
16. </property>
1. vim.tiny regionservers
加入以下內容:
1. datanode1
2. datanode2
3. datandoe3
1. scp -r hbase-0.94.2 datanode1:/home/cloud/project
2. scp -r hbase-0.94.2 datanode2:/home/cloud/project
3. scp -r hbase-0.94.2 datanode3:/home/cloud/project
1. bin/start-hbase.sh
可使用bin/hbaseshell 進入hbase自帶的shell環境,而後使用命令version等,進行查看hbase信息及創建表等操做。