目录
Hadoop分布式集群搭建
写在前面
之前已经搭过Hadoop伪分布式,这次就大致说说分布式是怎么回事,其实他们也就是配置文件不一样,其他都是差不多的,但是为了更熟悉相关操作,我还是建立了三台虚拟机,从头搭起(为了更好的体验,我特地加了内存条,心疼我的钱啊)当然,搭建的方法不限于这一种,且顺序也不一定相同,我只是按自己的来
框图
其实里面很核心的一个东西HDFAS(Hadoop Distributed File System),Hadoop分布式文件系统,我们将庞大的数据存储在这。我们的主节点中有NameNode,ResourceManager,SecondaryNameNode。然后的两个slave节点中放DataNode,NodeManager.
第一步 建立虚拟机
推荐使用CentOs,真的非常好用,一开始我们就建立一个就可以了(这个就不用我再说明了),然后安装完成我们可以进行克隆,然后就得到另外两台机子,当然,我们得重新配置这两个Slave,把内存调成1G,处理器都调成1,当然,如果你的机子配置好的可怜,可以当我这是句废话。然后开机,设置成开机默认以黑窗启动,不要开图形界面,否则卡的要死。。。。
之前看某些文章说手动配置三台机子的IP,其实这个没什么必要,动态分配也是可以的,手动的话反而麻烦,如果说有什么必要性的话,目前还是学习阶段,瞎捣鼓就是要命。
然后我们用Xshell连接上三台虚拟机,这样操作实在是方便舒服。(Putty也还可以啦)
第二步 hostname设置
每台虚拟机中设置hostname
sudo vi /etc/sysconfig/network然后编辑下列文本NETWORKING=yesHOSTNAME=master #master中就写master,slave1就写slave1,2就写2#当然,你名字可以随便取,不一定像我这样master啊。。。
然后设置hostname与IP的映射
sudo vi /etc/hosts然后在文本最底下添加192.168.xxx.xxx master #IP地址是你的虚拟机的,你可以使用ifconfig查看192.168.xxx.xxx slave1192.168.xxx.xxx slave2
注意啊,如果你的hostname没改的话,去 /etc/hostname改
角色的分配
master: NameNode DataNode ResourceManager NodeManager SecondaryNameNode
slave1:DataNode NodeManager
Slave2:DataNode NodeManager
SSH 免密登录
为了省去每次登录输入密码的操作(人的本性懒)我们设置ssh免密登录
ssh-keygen -t rsa #生成key
然后一路回车(每个虚拟机都要生成一次)
然后你 ls -al会看到一个隐藏文件夹 .ssh,我们的key就在里面
我们进去会看到
然后我们不是确定了master为老大么,我们分别使用
ssh-copy-id -i ~/.ssh/id_rsa.pub masterssh-copy-id -i ~/.ssh/id_rsa.pub slave1ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
将key传到本地跟另外两台机器,然后每个./ssh里面会多个 authorized_keys文件
然后你就可以使用 ssh master(或是ssh slave1或是ssh slave2登录了)jdk安装
这个具体我就不说了,详情参照伪分布那篇文章,不过这次我是在 home中建了个app文件夹,方便我后面操作,所以环境变量配置也是要配置正确
sudo vi ~/.bash_profile#然后在最底下键入export JAVA_HOME=/root/app/jdk #这里是你jdk的安装路径export PATH=$JAVA_HOME/bin:$PATH#保存并退出,然后source ~/.bash_profile 生效一下
Hadoop安装
我将Hadoop安装包解压至我建立的app文件夹中,然后配置Hadoop环境变量
sudo vi ~/.bash_profile#在刚才Jdk下面键入export HADOOP_HOME=/root/app/hadoop #这是你Hadoop的安装路径export PATH=$HADOOP_HOME/bin:$PATH#保存并退出,然后source ~/.bash_profile 生效一下
Hadoop文件配置
hadoop-env.sh的配置
进入 cd ~/app/hadoop/etc/hadoop,然后ls会看到一大堆配置文件
先配置hadoop-env.sh,
sudo vi hadoop-env.sh#找到 export JAVA_HOME=${JAVA_HOME}将${java_home}改成你的java_home路径
core-site.xml配置
sudo vi core-site.xml#键入配置fs.defaultFS hdfs://master:9000 #这里是你的主机名hadoop.tmp.dir /usr/local/soft/hadoop-2.6.0/tmp fs.trash.interval 1440
hdfs-site.xml配置
sudo vi hdfs-site.xml#添加dfs.replication 1 dfs.permissions false
mapred-site.xml配置
这个文件一开始是叫做mapred-site.xml.template 模板啊。所以使用
mv mapred-site.xml.template mapred-site.xml 修改文件名
sudo vi mapred-site.xml#添加mapreduce.framework.name yarn mapreduce.jobhistory.address master:10020 mapreduce.jobhistory.webapp.address master:19888
yarn-site.xml配置
sudo vi yarn-site.xml#添加yarn.resourcemanager.hostname master yarn.nodemanager.aux-services mapreduce_shuffle yarn.log-aggregation-enable true yarn.log-aggregation.retain-seconds 604800
Slaves配置
顾名思义,这个就是将我们的slave放进去
sudo vi slaves#删去原有的localhost,添加masterslave1slave2
当然这些配置hadoop官网都有说明,如果想更细节地了解,请前去看看。下面是官网对于这些配置中的参数说明
分发到另外两台机器
我们目前的配置都是在master上操作的,但是我们必须得保证每台机器都有这样的配置,所以我们需要将master上的app 分发到slave1 和slave2上(这就是我单独建立app文件夹的原因,因为我需要进行分发,所以,将hadoop,jdk都放在其中,便于打包发过去)
我们使用的命令是
scp -r ~/app hadoop@slave1:~/#这里hadoop@slave1就是你终端前面那个东西,:后面是你分发到的文件路径,#最好跟master一样,要不然环境变量里面路径得改#-r是递归的意思,app中所有文件全部分发scp -r ~/app hadoop@slave2:~/
当然,.bash_profile也要发的
scp ~/.bash_profile hadoop@slave1:~/scp ~/.bash_profile hadoop@slave2:~/#这个东西分发过去别忘了生效
然后就是漫长的等待
NameNode格式化
这一步在master上执行,进入 cd /app/hadoop/bin/ 然后执行
./hdfs namenode -format
显示上图则成功
启动Hadoop
这里先关闭防火墙,systemctl stop firewalld
然后我们进入 cd /app/hadoop/sbin/ , ls查看一下sbin下有哪些文件
然后我们开始启动hadoop
./start-all.sh #启动所有,当然也可以一个一个启动
启动完毕我们执行jps命令,master中出现
namenodesecondarynamenodedatanoderesourcemanagernodemanager
slave1中出现
datanodenodemanager
slave2中出现
datanodenodemanager
由此,分布式Hadoop集群搭建完毕
后话
其实如果只是学习,不是非得用分布式,与其折磨自己,还不如先用伪分布将hadoop玩玩透,其实就与分布式没差,都是一样的。