https://blog.csdn.net/pucao_cug/article/details/71698903node
1下载hadoopweb
2安装3个虚拟机并实现ssh免密码登陆apache
2.1安装3个机器ubuntu
2.2检查机器名称vim
2.3修改/etc/hosts文件centos
2.5 在hserver1上建立authorized_keys文件app
2.6将authorized_keys文件复制到其余机器ssh
2.7 测试使用ssh进行无密码登陆webapp
关键字:Linux CentOS Hadoop Java
版本: CentOS7 Hadoop2.8.0 JDK1.8
说明:Hadoop从版本2开始加入了Yarn这个资源管理器,Yarn并不须要单独安装。只要在机器上安装了JDK就能够直接安装Hadoop,单纯安装Hadoop并不依赖Zookeeper之类的其余东西。
本博文使用的hadoop是2.8.0
打开下载地址选择页面:
http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
如图:
我使用的地址是:
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
这里用的Linux系统是CentOS7(其实Ubuntu也很好,可是这里用的是CentOS7演示),安装方法就很少说了,若有须要请参考该博文:
http://blog.csdn.net/pucao_cug/article/details/71229416
安装3个机器,机器名称分别叫hserver一、hserver二、hserver3(说明机器名不这么叫能够,待会用hostname命令修改也行)。
如图:
说明:为了免去后面一系列受权的麻烦,这里直接使用root帐户登陆和操做了。
使用ifconfig命令,查看这3个机器的IP。个人机器名和ip的对应关系是:
192.168.119.128 hserver1
192.168.119.129 hserver2
192.168.119.130 hserver3
为了后续操做方便,确保机器的hostname是咱们想要的。拿192.168.119.128这台机器为例,用root帐户登陆,而后使用hostname命令查看机器名称
如图:
发现,这个机器名称不是咱们想要的。不过这个好办, 我给它改个名称,命令是:
hostname hserver1
如图:
执行完成后,在检查看,是否修改了,敲入hostname命令:
如图:
相似的,将其余两个机器,分别更名为hserver2和hserver3。
修改这3台机器的/etc/hosts文件,在文件中添加如下内容:
如图:
说明:IP地址不必和个人同样,这里只是作一个映射,只要映射是对的就能够,至于修改方法,能够用vim命令,也能够在你的本地机器上把hosts文件内容写好后,拿到Linux机器上去覆盖。
配置完成后使用ping命令检查这3个机器是否相互ping得通,以hserver1为例,在什么执行命令:
ping -c 3 hserver2
如图:
执行命令:
ping -c 3 hserver3
如图:
ping得通,说明机器是互联的,并且hosts配置也正确。
以hserve1为例,执行命令,生成空字符串的秘钥(后面要使用公钥),命令是:
ssh-keygen -t rsa -P ''
(我安装博文这个命令执行最后没法root用户免密码登陆成功,我改为了ssh-keygen而后屡次回车生成)
如图:
由于我如今用的是root帐户,因此秘钥文件保存到了/root/.ssh/目录内,可使用命令查看,命令是:
ls /root/.ssh/
如图:
使用一样的方法为hserver2和hserver3生成秘钥(命令彻底相同,不用作如何修改)。
接下来要作的事情是在3台机器的/root/.ssh/目录下都存入一个内容相同的文件,文件名称叫authorized_keys,文件内容是咱们刚才为3台机器生成的公钥。为了方便,我下面的步骤是如今hserver1上生成authorized_keys文件,而后把3台机器刚才生成的公钥加入到这个hserver1的authorized_keys文件里,而后在将这个authorized_keys文件复制到hserver2和hserver3上面。
首先使用命令,在hserver1的/root/.ssh/目录中生成一个名为authorized_keys的文件,命令是:
touch /root/.ssh/authorized_keys
如图:
可使用命令看,是否生成成功,命令是:
ls /root/.ssh/
如图:
其次将hserver1上的/root/.ssh/id_rsa.pub文件内容,hserver2上的/root/.ssh/id_rsa.pub文件内容,hserver3上的/root/.ssh/id_rsa.pub文件内容复制到这个authorized_keys文件中,复制的方法不少了,能够用cat命令和vim命令结合来弄,也能够直接把这3台机器上的/root/.ssh/id_rsa.pub文件下载到本地,在本地将authorized_keys文件编辑好在上载到这3台机器上。
hserver1机器上个人/root/.ssh/id_rsa.pub内容是:
hserver2机器上个人/root/.ssh/id_rsa.pub内容是:
hserver2机器上个人/root/.ssh/id_rsa.pub内容是:
合并以后,个人hserver1机器上的/root/.ssh/authorized_keys文件内容是:
如图:
hserver1机器的/root/.ssh/目录下已经有authorized_keys这个文件了,该文件的内容也已经OK了,接下来要将该文件复制到hserver2的/root/.ssh/和hserver3的/root/.ssh/。
复制的方法有不少,最简单的就是用SecureFX可视化工具操做吧。
复制完成后,能够看到三台机器的/root/.ssh目录下都有了这样的文件
如图:
上图已经说得很清楚了,三台机器的/root/.ssh都有同名的文件,可是只有authorized_keys文件的内容是相同的。
输入命令:
ssh hserver2
如图:
输入命令:
exit回车
如图:
输入命令:
ssh hserver3
如图:
输入命令:
exit回车
如图:
方法相似2.7.1,只不过命令变成了ssh hserver1和ssh hserver3,可是必定要注意的是,每次ssh完成后,都要执行exit,不然你的后续命令是在另一台机器上执行的。
方法相似2.7.1,只不过命令变成了ssh hserver1和ssh hserver2,可是必定要注意的是,每次ssh完成后,都要执行exit,不然你的后续命令是在另一台机器上执行的。
我按照上面方法配置root免密码不成功,后来百度了一下发现还有如下问题须要注意:
我安装博文这个命令执行最后没法root用户免密码登陆成功,我改为了ssh-keygen而后屡次回车生成
authorized_keys:存放远程免密登陆的公钥,主要经过这个文件记录多台机器的公钥
id_rsa : 生成的私钥文件
id_rsa.pub : 生成的公钥文件
know_hosts : 已知的主机公钥清单
若是但愿ssh公钥生效需知足至少下面两个条件:
1) .ssh目录的权限必须是700
2) .ssh/authorized_keys文件权限必须是600
[root@master ~]# chmod 700 /root/.ssh [root@master ~]# chmod 600 /root/.ssh/*
还须要检查每台机器的~/.ssh/known_hosts文件是否含有四个主机的信息,以下图所示:
若是没有的话,好比master没有,则须要在该机器上从新执行一下ssh master命令,让其生成以上信息便可。
查看/etc/ssh/sshd_config文件[vi /etc/ssh/sshd_config],开启ssh证书登陆,即找到注释配置[#PubkeyAuthentication yes],把前面的“#"号去掉,如:
PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 # but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys
说明,为了省去一系列获取管理员权限,受权等繁琐操做,精简教程,这里都是使用root帐户登陆而且使用root权限进行操做。
安装jdk在这里不在细数,若是有须要能够参考该博文(虽然那篇博文用的是ubuntu,可是jdk安装在CentOS下也同样):
http://blog.csdn.net/pucao_cug/article/details/68948639
注意: 3台机器上都须要重复下面所讲的步骤。
在opt目录下新建一个名为hadoop的目录,并将下载获得的hadoop-2.8.0.tar上载到该目录下,如图:
进入到该目录,执行命令:
cd /opt/hadoop
执行解压命令:
tar -xvf hadoop-2.8.3.tar.gz
先在hserver1上把后续的各个配置文件配置好了,而后打包传到hserver2和hserver3的/opt/hadoop/相同目录下就好了
在/root目录下新建几个目录,复制粘贴执行下面的命令:
修改/opt/hadoop/hadoop-2.8.3/etc/hadoop目录内的一系列文件。
修改/opt/hadoop/hadoop-2.8.3/etc/hadoop/core-site.xml文件
在<configuration>节点内加入配置:
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hserver1:9000</value>
</property>
修改/opt/hadoop/hadoop-2.8.3/etc/hadoop/hadoop-env.sh文件
将export JAVA_HOME=${JAVA_HOME}
修改成:
export JAVA_HOME=/root/jdk1.8.0_131
说明:修改成本身的JDK路径
修改/opt/hadoop/hadoop-2.8.0/etc/hadoop/hdfs-site.xml文件
在<configuration>节点内加入配置:
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hadoop/dfs/name</value>
<description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/hadoop/dfs/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
<description>need not permissions</description>
</property>
说明:dfs.permissions配置为false后,能够容许不要检查权限就生成dfs上的文件,方便却是方便了,可是你须要防止误删除,请将它设置为true,或者直接将该property节点删除,由于默认就是true。
在该版本中,有一个名为mapred-site.xml.template的文件,复制该文件,而后更名为mapred-site.xml,命令是:
修改这个新建的mapred-site.xml文件,在<configuration>节点内加入配置:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hserver1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hserver1:19888</value>
</property>
修改/opt/hadoop/hadoop-2.8.3/etc/hadoop/slaves文件,将里面的localhost删除,添加以下内容:
修改/opt/hadoop/hadoop-2.8.3/etc/hadoop/yarn-site.xml文件,
在<configuration>节点内加入配置(注意了,内存根据机器配置越大越好,我这里只配2个G是由于机器不行):
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hserver1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hserver1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hserver1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hserver1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hserver1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hserver1:8088</value>
</property>
说明:yarn.nodemanager.vmem-check-enabled这个的意思是忽略虚拟内存的检查,若是你是安装在虚拟机上,这个配置颇有用,配上去以后后续操做不容易出问题。若是是实体机上,而且内存够多,能够将这个配置去掉。
hserver1的各个配置文件配置好后,打包scp传给hserver2和hserver3就能够了
检查一下centos7的防火墙是否关闭了
firewall-cmd --state
systemctl stop firewalld.service
systemctl disable firewalld.service
由于hserver1是namenode,hserver2和hserver3都是datanode,因此只须要对hserver1进行初始化操做,也就是对hdfs进行格式化。
进入到hserver1这台机器的/opt/hadoop/hadoop-2.8.3/bin目录,也就是执行命令:
cd /opt/hadoop/hadoop-2.8.3/bin
执行初始化脚本,也就是执行命令:
./hdfs namenode -format
如图:
稍等几秒,不报错的话,便可执行成功,如图:
格式化成功后,能够在看到在/root/hadoop/dfs/name/目录多了一个current目录,并且该目录内有一系列文件
如图:
由于hserver1是namenode,hserver2和hserver3都是datanode,因此只须要再hserver1上执行启动命令便可。
进入到hserver1这台机器的/opt/hadoop/hadoop-2.8.3/sbin目录,也就是执行命令:
cd /opt/hadoop/hadoop-2.8.3/sbin
执行初始化脚本,也就是执行命令:
./start-all.sh
第一次执行上面的启动命令,会须要咱们进行交互操做,在问答界面上输入yes回车
如图:
haddoop启动了,须要测试一下hadoop是否正常。
执行命令,关闭防火墙,CentOS7下,命令是:
systemctl stop firewalld.service
如图:
hserver1是咱们的namanode,该机器的IP是192.168.0.168,在本地电脑访问以下地址:
自动跳转到了overview页面
如图:
在本地浏览器里访问以下地址:
自动跳转到了cluster页面
如图: