环境:hadoop2.10.1,jdk8,hive2.3.9,centos7
hadoop集群包含三个节点,三个节点分别为三个虚拟机环境,一个master(主机名为service01),两个slave(主机名分别为service03,service04),master节点ip为192.168.248.158,slave1节点ip为192.168.248.157,slave2节点ip为192.168.248.159。全程以root用户身份操作(非必要)。
注:本篇文章是根据网上多篇文章的步骤,结合自己的实际搭建,拼凑了参考的文章的内容。
1、环境配置
(1)修改当前机器名称(三台机器同步进行,也可以完成一台,克隆两台)
假定我们发现我们的机器的主机名不是我们想要的,则修改主机名。 执行:
hostnamectl set-hostname service01
(2)配置hosts文件(必须)
" /etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名对应的IP地址。我们要测试两台机器之间知否连通,一般用"ping 机器的IP",如果想用"ping 机器的主机名"发现找不见该名称的机器(这也就是为什么在修改主机名的同时最好修改该文件中对应的主机名),解决的办法就是修改" /etc/hosts"这个文件,通过把LAN内的各主机的IP地址和HostName的一一对应写入这个文件的时候,就可以解决问题。执行:
vim /etc/hosts
如下图所示:
可以通过测试ping 主机名看是否可以ping通。ping通则配置成功。
2、SSH无密码验证配置
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode。
注意: 如果你的Linux没有安装SSH,请首先安装SSH
2.1 SSH基本原理与用法
(1)SSH基本原理
SSH之所以能够保证安全,原因在于它采用了公钥加密。过程如下:
1)远程主机收到用户的登录请求,把自己的公钥发给用户。
2)用户使用这个公钥,将登录密码加密后,发送回来。
3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
(2)ssh基本用法
假如登录远程用户名为java,登录远程主机名为linux,执行如下命令即可:
ssh java@linux
SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口,例如修改为88端口,命令如下: ssh -p 88 java@linux
2.2 配置Master无密码登录所有Salve
a. service01节点利用ssh-keygen命令生成一个无密码密钥对。
执行ssh-keygen –t rsa –P ''
生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),由于我是root用户,所以默认存储在"/~/.ssh"目录下(使用ls -a查看)。
b. 接着在service01节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
查看下authorized_keys的权限,如果权限不对则利用如下命令设置该文件的权限:
chmod 600 authorized_keys
c. 修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile ~/.ssh/authorized_keys # 公钥文件路径
如下图所示:
设置完之后记得重启SSH服务,才能使刚才设置有效。执行systemctl restart sshd。
执行ssh root@localhost查看是否无密码登录本机生效。接下来的事儿是把公钥复制所
有的Slave机器上。
d. 使用ssh-copy-id命令将公钥传送到远程主机上,执行:
ssh-copy-id root@service03
测试是否无密码登录远程机器成功,ssh root@service03。
接下来配置所有Slave无密码登录Master,其和Master无密码登录所有Slave步骤一样。
3、JDK环境安装
3.1安装JDK
首先用root身份登录service01后在"/usr"下创建"java"文件夹,再将"jdk-8u301-linux-x64.tar.gz"复制到"/usr/localcal/java"文件夹中,然后解压即可。查看" /usr/local/java"下面会发现多了一个名为"jdk1.8.0_301"文件夹,说明我们的JDK安装结束,删除"jdk-8u301-linux-x64.tar.gz"文件,进入下一个"配置环境变量"环节。
3.2配置环境变量
编辑"/etc/profile"文件,在最后方添加如下几行:
执行source /etc/profile,使配置立即生效。
查看配置是否成功:
出现上图则说明配置成功。
4、Hadoop集群安装
4.1安装hadoop
下载hadoop安装包hadoop-2.10.1.tar.gz,将hadoop安装包放置在这/usr(这个路径可以自定义)下,执行解压tar -zxvf hadoop-2.10.1.tar.gz,重命名文件mv hadoop-2.10.1 hadoop。在/usr/hadoop目录下创建tmp目录,并把hadoop安装路径添加到/etc/profile里,如下所示:
4.2配置hadoop
我们只需要在master节点完成配置后,将整个目录拷贝到所有slave节点下,然后在master节点启动集群即可。
(1)配置hadoop-env.sh
修改JAVA_HOME的值,如下图所示:
(2)配置core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
<description>A base for other temprary directories</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://service01:9000</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
</configuration>
(3)配置hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
(4)配置mapred-site.xml
执行mv mapred-site.xml.template mapred-site.xml,接着配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(5)配置yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.248.158</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation-seconds</name>
<value>604800</value>
</property>
</configuration>
(6)配置slaves文件
(7)格式化HDFS
cd /usr/hadoop/bin
./hdfs namenode -format
(8)启动集群 启动集群,先启动HDFS集群,在启动YARN集群,注意 需要在NameNode所在节点上启动HDFS集群,在ResourceManager所在节点上启动YARN集群
cd /usr/hadoop/sbin
./start-dfs.sh
./start-yarn.sh
./mr-jobhistory-daemon.sh start historyserver
弄完之后,这下我们之前点名配置的java 开发插件jps就派上用场了,执行jps命令
至此,我们的Hadoop算是配置完成了。hadoop提供了web端来帮助我们直观的查看HDFS文件系统,网址如下:
http://localhost:50070/dfshealth.html#tab-overview
打开后长这样
Yarn也提供了相关的web端来帮助我们查看和使用http://localhost:8088/cluster