本文记录参考 http://dblab.xmu.edu.cn/blog/2775-2/ 搭建hadoop分布式集群的过程
前置
- 已在一台虚拟机配置好了伪分布式hadoop系统
- 一台虚拟机作为master作为namenode,三台虚拟机data1、2、3(均安装了ubuntu系统)作为datanode
网络配置
-
网卡1配置为NAT网络,这样虚拟机可以正常访问外部网络
-
网卡2配置为host-only,这样data虚拟机可以和master虚拟机通信
如果界面名称显示未指定,可以在virtualBox左上角菜单栏点击管理,主机网络管理器,点击创建,便可以指定界面名称
-
配置主机名称和网络
sudo vim /etc/hostname
ping data1 -c 3 测试网络是否连通
SSH无密码登录节点
-
必须要让Master节点可以SSH无密码登录到各个Slave节点上。首先,生成Master节点的公匙,如果之前已经生成过公钥,必须要删除原来生成的公钥,重新生成一次,因为前面我们对主机名进行了修改。具体命令如下
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost rm ./id_rsa* # 删除之前生成的公匙(如果已经存在) ssh-keygen -t rsa # 执行该命令后,遇到提示信息,一直按回车就可以
-
为了让Master节点能够无密码SSH登录本机,需要在Master节点上执行如下命令:
cat ./id_rsa.pub >> ./authorized_keys -
接下来,在Master节点将上公匙传输到Slave1节点(具体文件夹视具体情况而定)
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ -
在data1节点上,将SSH公匙加入授权:
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在,则忽略本命令 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/id_rsa.pub # 用完以后就可以删掉
-
如果有其他节点,一样配置
配置PATH变量
- 在前面的伪分布式安装内容中,已经介绍过PATH变量的配置方法。可以按照同样的方法进行配置,这样就可以在任意目录中直接使用hadoop、hdfs等命令了。如果还没有配置PATH变量,那么需要在Master节点上进行配置。 首先执行命令“vim /.bashrc”,也就是使用vim编辑器打开“/.bashrc”文件,然后,在该文件最上面的位置加入下面一行内容:
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
保存后执行命令“source ~/.bashrc”,使配置生效。
配置集群/分布式环境
-
在配置集群/分布式模式时,需要修改“/usr/local/hadoop/etc/hadoop”目录下的配置文件,这里仅设置正常启动所必须的设置项,包括workers 、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml共5个文件,更多设置项可查看官方说明。文件在/usr/local/hadoop/etc/hadoop中
-
workers
-
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
-
hdfs-site.xml
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:50090</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> </configuration>
-
mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>Master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>Master:19888</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value> </property> </configuration>
-
yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>Master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
-
5个文件全部配置完成以后,需要把Master节点上的“/usr/local/hadoop”文件夹复制到各个节点上
在master节点上:cd /usr/local sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 sudo rm -r ./hadoop/logs/* # 删除日志文件 tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制 cd ~ scp ./hadoop.master.tar.gz Slave1:/home/hadoop
在data1节点上
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在) sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local sudo chown -R hadoop /usr/local/hadoop
启动
-
首次执行,在master节点上格式化节点:
hdfs namenode -format
-
启动
start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver
-
在master上jps查看
-
data1上查看
关闭
- 在master虚拟机上
stop-yarn.sh stop-dfs.sh mr-jobhistory-daemon.sh stop historyserver