分布式集群配置简单指南 Special Edition

分布式集群配置简单指南 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协议》放弃所有权利允许任何形式的转载修改及使用

你可能感兴趣的:(分布式集群配置简单指南 Special Edition)