话不多说,直接进入正题
hadoop官网:https://hadoop.apache.org/
规划如下:
一、准备虚拟机
1、安装了jdk
我这里安装的是jdk1.8 Centos下安装jdk1.8
2、设置固定ip
https://www.cnblogs.com/lfhappy/p/10798400.html
3、关闭防火墙
关闭防火墙:(仅设置这个,在下次启动的时候,防火墙仍然会打开)
#systemctl stop firewalld.service
禁止firewall开机启动:
#systemctl disable firewalld.service
4、时间同步
https://blog.csdn.net/qq_42679299/article/details/103753792
5、配置hosts文件
做好映射,这样方便配置使用,不然会需要使用ip访问
①.第一步,虚拟机配置hosts文件
vim /etc/hosts #修改hosts文件配置
②windows配置hosts文件
路径: C:\Windows\System32\drivers\etc\hosts
配置完成后ping一下node1看一下是否能ping到。下图表示能ping到
我这里是使用VM创建了一个Centos7虚拟机node1(作为NameNode),克隆了三个虚拟机分布命名为node2(作为SecondaryNameNode),node3,node4。
克隆后需要修改主机名和ip:修改主机名与ip
二、免秘钥登录
为什么要免秘钥登录?因为每次使用“ssh 用户名@主机名”去登录的时候,都需要输入密码,会很麻烦。
我们可以使用RSA加密解密来解决这个问题,RSA安全性很高,黑客即便得到了公钥,没有私钥也无法破解。
借一张百度百科的图给大家看看RSA:
再看看RSA在Hadoop中的应用:
进入正题。。。。。
1、生成公钥秘钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
2、加入到授信列表中
#将本机公钥加入到 授信列表中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
现在进入自己的是不需要密码了。。。
exit #执行命令exit可以退出当前
3、让node2,node3,node4也能免密登录
①、执行以下命令,将公钥传给node2,node3,node4:
scp ~/.ssh/id_rsa.pub node2:/tmp/
scp ~/.ssh/id_rsa.pub node3:/tmp/
scp ~/.ssh/id_rsa.pub node4:/tmp/
#每次执行都要输入yes和密码
②、进入node2,node3,node4远程连接分别执行以下操作
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #生成公钥秘钥
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys #加入到node中的公钥列表中
③、验证是否需要密码
现在node1可以免密登录node2,node3,node4。但现在node234不能免密登录node1,如果需要,可以将node2的公钥传给node1,执行上述操作
三、Hadoop安装与配置
1、用xftp6将hadoop传进入
我个人喜欢将它放在 /usr/local 下,这里我使用的是hadoop-2.5.2.tar.gz版本的
2、解压
#忘记提前截图了 那就懒得截图了吧 上命令
ls #查看压缩包
tar -xvf hadoop-2.5.2.tar.gz #解压 hadoop-2.5.2.tar.gz
mv hadoop-2.5.2 hadoop252 # 名字太长,用起来麻烦,改一下
rm -rf hadoop-2.5.2.tar.gz # 把hadoop-2.5.2.tar.gz压缩包给删了
3、修改环境变量
#执行以下命令
vim /etc/profile
修改变量
export HADOOP_HOME=/usr/local/hadoop252
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#修改完成后,执行以下命令保存并退出
:wq+回车键
source /etc/profile
然后就可以运行 /usr/local/hadoop252/bin 下的命令了
如果运行hdfs出现以下情况,则表现环境变量配置完成
4、配置
hadoop内也有一个文件配置目录 /usr/local/hadoop252/etc
①查看一下有哪些配置文件
②开始配置第一个,hadoop-env.sh:
vim /usr/local/hadoop252/etc/hadoop/hadoop-env.sh
修改export JAVA_HOME为 export JAVA_HOME=/usr/local/jdk1.8.0_211
③配置第二个,core-site.xml:
#进入core-site.xml
vim /usr/local/hadoop252/etc/hadoop/core-site.xml
#添加以下配置
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoopdata</value>
</property>
④配置第三个,hdfs-site.xml:
vim /usr/local/hadoop252/etc/hadoop/hdfs-site.xml
#添加以下配置
#注意这里的50090端口号,端口号前一万不建议用,一万以后的可以用,端口一共是1/65534
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:50090</value>
</property>
⑤配置第四个,slaves
vim /usr/local/hadoop252/etc/hadoop/slaves
#指定datanode,这里进去默认的是localhost,改为node2,node3,node4
#一行一个,如果没有做前面hosts文件配置,也就是映射,那么用ip
“:wq”保存并退出就可以了
⑥自己创建一个master文件,指定secondaryNameNode
#原本是没有masters的,因为他默认的是自己就是masters,所以需要创建一个
vim /usr/local/hadoop252/etc/hadoop/masters
四、同步配置文件到其他节点
#xshell连接node1依次执行以下命令
scp -r hadoop252/ node2:/usr/local/
scp -r hadoop252/ node3:/usr/local/
scp -r hadoop252/ node4:/usr/local/
检查一下,是否同步了,下图是已经同步
同步完成后,去node234的/etc/profile配置HADOOP_HOME环境变量,修改方式见上面的“修改环境变量”
五、格式化
#执行以下命令,格式化
hdfs namenode -format
#可以直接运行hdfs命令查看有哪些命令
六、启动
start-dfs.sh
接下来看看进程
node1:
node2:
node3:
node4:
七、测试
#查看nameNode
http://node1:50070
查看secondaryNameNode
http://node2:50090
#如果访问不到
#先查看,是否关闭node1和node2的防火墙,没有关闭的话需要关闭防火墙
#node3和node4的防火墙也可以一并关了,这样才可以访问到node3和node4。但是仅限于学习阶段这样使用,上线的话不能这样
systemctl status firewalld.service #查看防火墙状态
systemctl stop firewalld.service #停用防火墙,但是下次启动仍然会启动
systemctl disable firewalld.service #禁用防火墙服务器,这样下次不会启动
#还没有解决问题,再去本机ping一下node1,node2查看是否配置了hosts文件
#ping失败了再看最前面的准备阶段的hosts文件配置