分布式集群配置简单指南 Special Edition @2017.12.06
0. 准备工作
0.1 三台已经【配置好的】【可以运行】Hadoop伪分布式实例的虚拟机
0.2 将三台虚拟机连入同一个局域网
(可以用三台电脑分别开一个虚拟机,桥接无线网卡然后连手机热点,手机不用联网,只是提供一个局域网,建议安卓,苹果联网才能开热点;也可以在同一台电脑上复制两台虚拟机随便桥接一张网卡,如果桥接网卡无法开机可以使用仅主机(Host-Only)网络,不过要自己配置好VirtualBox的DHCP服务器【管理->全局设定->网络->仅主机(Host-Only)网络】。)
0.3 确保三台机器互相能ping通,并记录三台机器的IP
一般来说应该是【192.168.x.a/192.168.x.b/192.168.x.c】
0.4 确保三台机器都已经切到了hadoop用户
1. 分别修改主机名
sudo vi /etc/hostname
三台机器都要改
将君の名は-VirtualBox
分别改为node1
/node2
/node3
改完sudo reboot
重启
2. 绑定主机名IP地址
sudo vi /etc/hosts
三台机器都要加入以下内容
192.168.x.a node1
192.168.x.b node2
192.168.x.c node3
IP地址和名字中间是Tab,所以能对齐
对不对齐都无所谓的话,空格应该也可以 大概吧
3. 修改Hadoop的配置文件
大写!加粗!重要:【有且只有】node1一台机器需要配置此项(3. 修改Hadoop的配置文件)
先进入放配置文件那个文件夹
cd /usr/local/hadoop/etc/hadoop/
3.1 修改core-site.xml
gedit core-site.xml
不用gedit用vim也可以,总之能修改就行
在configuration标签里加入property项
如下
fs.default.name
hdfs://node1:9000
……
后略
……
此处配置的是NameNode信息,即指定NameNode所在机器以及端口
3.2 修改hdfs-site.xml
gedit hdfs-site.xml
在configuration标签中修改property内容(不配置的时候默认是3):
dfs.replication
2
……
后略
……
3.3 修改数据节点和第二名称节点
3.3.1 编辑DataNode
vi slaves
删除localhost并添加以下节点配置:
node2
node3
3.3.2 同理编辑SecondaryNameNode
vi masters
删除localhost并添加以下节点配置:
node2
本来这个时候该配置环境变量JAVA_HOME了,不过只要之前已经成功运行过伪分布式肯定已经配置好了。
可以用echo $JAVA_HOME
确认配置是否正确,如果正确会回显JAVA安装目录。
4. 设置本地shh免密登录
三台机器都要执行
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
4.1 node1的单独配置
cd ~/.ssh/
scp id_dsa.pub hadoop@node2:~
<输入node2的密码>
scp id_dsa.pub hadoop@node3:~
<输入node3的密码>
4.2 node2/node3的分别配置
cd ~
cat id_dsa.pub >> ~/.ssh/authorized_keys
配置完后可以在node1上使用【ssh 主机名】指令尝试远程登录
比如ssh node2
,如果执行完跳到hadoop@node2:~$
说明免密登录配置成功,node1可以对node2/node3为所欲为了
5. 将hdfs配置复制给node2和node3
只有node1执行以下步骤
cd /usr/local/hadoop/etc/hadoop
scp ./* hadoop@node2:/usr/local/hadoop/etc/hadoop
scp ./* hadoop@node3:/usr/local/hadoop/etc/hadoop
6. 格式化名称节点并启动HDFS
只有node1执行以下步骤
cd /usr/local/hadoop/
./bin/hdfs namenode -format
./sbin/start-dfs.sh
7. 测试效果
分别在三台机器上执行jps
按照《分布式集群手册.txt》的内容
node1应该是Jps/NameNode
node2应该是Jps/SecondaryNameNode/DataNode
node3应该是Jps/DataNode
但是我们实际运行的时候是
node1是Jps/NameNode/SecondaryNameNode
node2是Jps/DataNode
node3是Jps/DataNode
这样名称节点和第二名称节点在同一台机器上,第二名称节点就失去意义了
推测是3.3.2的时候改完忘了保存导致这种情况,不过分布式集群还是在正常运作的
Ubuntu有图形界面,直接打开火狐访问http://node1:50070
即可
如果是CentOS,需要用本地桌面浏览器才能查看效果
打开本地的host文件C:\Windows\System32\drivers\etc\hosts
在最下面加
192.168.43.a node1
192.168.43.b node2
192.168.43.c node3
然后就可以用本地浏览器访问http://node1:50070/dfshealth.jsp
了
8. 运行实例
很遗憾我们的node1中途挂了没有做完这步,这里列出步骤
a) 创建用户目录
./bin/hdfs dfs -mkdir -p /user/hadoop
b) 使用绝对路径将core-site.xml这个文件复制到分布式文件系统中
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/core-site.xml input
c) 查看HDFS中的文件列表
./bin/hdfs dfs -ls input
d) 将core-site.xml文件作为输入,筛选当中符合【正则表达式dfs[a-z.]+】的单词并统计出现的次数,最后输出结果到output文件夹中
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
e) 查看运行结果
./bin/hdfs dfs -cat output/*
f) 如果输出目录已存在,会提示错误org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists
请删除输出目录./bin/hdfs dfs -rm -r output
9. 善始善终
关闭hadoop
./sbin/stop-dfs.sh
注意关掉虚拟机之后再打开不需要再重新初始化NameNode,直接./sbin/start-dfs.sh
启动hadoop就好了
10. 其他
P.S. 如果节点配置出错(就是jps显示结果不对)
./sbin/stop-dfs.sh
rm -r ./tmp
./bin/hdfs namenode -format
./sbin/start-dfs.sh
重启四连,尝试修复
Special Thank For Mr.Mi
本文档采用《CC0协议》放弃所有权利允许任何形式的转载修改及使用