上一篇文章给大家介绍了Hadoop的伪分布式系统,但是当电脑重启后,数据就是丢失,这是因为Hadoop的伪分布模式是把文件存放在临时文件夹中(/tmp/hadoop/),当进程关闭后,文件也就不存在了,所以我们今天来配置Hadoop的完全分布式。
首先我们需要搞清楚几个问题,Hadoop的完全分布式中,一共有5个进程,分别是名称节点(NameNode),数据节点(dataNode),辅助名称节点(secondaryNameNode),资源管理器(ResourceManager)和节点管理器(NodeManager)。我们现在一共有5台虚拟机,主机名分别是s201,s202,s203,s204,s205,我们这样来配置分布式集群:
s201 -> 名称节点+资源管理器节点
s202 -> 数据节点+节点管理器
s203 -> 数据节点+节点管理器
s204 -> 数据节点+节点管理器
s205 ->辅助名称节点
我们一共配置5台虚拟机,一台名称节点(最关键的节点,需要备份),三台数据节点和一台辅助节点。之后我们还需要做一些
辅助的工作。上一篇中说道,我们可以通过ssh,使用s201来分别登录其他4个主机,但是这个只是ubuntu用户可以这样登录,root用
户就不可以了,因为ubuntu用户和root是不同的密钥系统,因此我们还需要使用root用户登录s201主机,然后在~/.ssh中生成公钥和私钥
然后把s201的公钥使用scp或者nc分别发送到其他4台主机,这样s201就可以无秘登录其他4台主机了,这些操作跟ubuntu用户是一样的,
这里不再多说。
下面我们需要新建两个可执行文件,用来批量处理。分别叫xsync和xcall,名字自己可以随意起。其中xsync可以分别给其他4台
设备发送数据,xcall则可以同时对5台设备进行相同的操作。这两个文件都放在/usr/local/bin目录下
$>cd /usr/local/bin
注意这两个文件在新建时是ubuntu用户,需要手动修改owner成root用户
$>sudo chown root:root xsync //修改xsync文件的所有者
$>sudo chmod a+x xsync //添加执行权限
$>sudo chown root:root xcall //修改xcall文件的所有者
$>sudo chmod a+x xcall //添加执行权限
这两个文件的内容分别是
涉及shell编程的东西,那又是另一个方向了,shell编程的东西很多,大家可以自己学习。
有了这两个文件(命令),我们就可以方便的进行集群的配置。
$>cd /soft
$>xsync /soft //分发jdk和hadoop包
$>xsync /etc/environment //分发环境变量
$>xcall source /etc/enviroment //立即生效所有节点的环境变量配置
这几个文件配置完成后,我们来分发这几个文件到其他4台主机上
$>xsync /soft/hadoop/etc/hadoop core-site.xml //分发文件
$>xsync /soft/hadoop/etc/hadoop hdfs-site.xml //分发文件
$>xsync /soft/hadoop/etc/hadoop yarn-site.xml //分发文件
$>xsync /soft/hadoop/etc/hadoop mapred-site.xml //分发文件
$>xsync /soft/hadoop/etc/hadoop slaves //分发文件
注意core-site.xml这个文件,我们修改了本地文件的存储地址,这样重启电脑后,我们的数据就不会丢失了。
$>hadoop namenode -format //格式化hadoop文件系统
$>start-all.sh //启动所有进程
$>xcall jps //查看所有节点的进程
出现上面的图片,说明5个进程和节点都已经启动完成。分别对应我们之前设置的
s201 -> 名称节点+资源管理器节点
s202 -> 数据节点+节点管理器
s203 -> 数据节点+节点管理器
s204 -> 数据节点+节点管理器
s205 ->辅助名称节点
启动后我们也可以通过webui来查看整个集群的情况。打开虚拟机的火狐浏览器->网址输入http://s201:50070//查看名称节点
打开虚拟机的火狐浏览器->网址输入http://s202:50075//查看数据节点
打开虚拟机的火狐浏览器->网址输入http://s203:50075//查看数据节点
打开虚拟机的火狐浏览器->网址输入http://s204:50075//查看数据节点
打开虚拟机的火狐浏览器->网址输入http://s205:50090//查看辅助名称节点
我就不再截图了,大家可以自己看看。
好了,现在我们回到s201,建立hadoop的文件系统
$>hadoop fs -mkdir -p /user/ubuntu/data //新建hadoop的文件系统
$>cd ~ //
$>hadoop fs -put hello.txt /user/ubuntu/data //上传hello.txt文件到data目录下
$>hadoop fs -ls -R / //查看所有文件的详细信息
可以看到我们的hello.txt已经在文件系统中了。我们也可以在webui中看到。
打开虚拟机的火狐浏览器->网址输入http://s202:50075//查看数据节点
选择Utilities->Browse the file system//
可以看到hello.txt的大小是11B,block size是128MB,就是说这个block的大小是128MB,当文件大于128MB后,就需要分割文件,把文件放在几个块
中,这个工作由hadoop在底层已经给我们做好了。副本数是3,我们可以查看数据节点的情况
选择Datanodes
每个节点上都放上了文件的一个副本。我们可以实际上看看文件具体存放在哪里了,我们的数据实际上是放在数据节点上的,因此需要切换到s202,
或者s203,或者s204
$>ssh s202 //登录s202(数据节点)
$>cat hadoop/dfs/data/current/BP-377304219-192.168.37.201-1520345495424/current/finalized/subdir0/subdir0/blk_1073741827
下面我们来看看一个比较大的文件是怎么存放的
$>exit //退出
$>cd /Downloads //
$>ls -alh //查看所有文件的详细信息
我们来上传hadoop-2,7.2.tar.gz这个文件,超过128M
$>hadoop fs -put hadoop-2.7.2.tar.gz data/ //上传hadoop-2.7.2.tar.gz到
$>fs -ls -R / //递归查看文件
我们在webui中查看
查看块信息
我们发现hadoop-2.7.2.tar.gz这个文件被分割成了两个块:
Block 0:
ID:1073741828
size:134217728(byte)
Block 1:
ID:1073741829
size:77829646(byte)
这两个块的大小加起来刚好是hadoop-2.7.2.tar.gz的大小203MB。我们到实际的数据节点去查看。$>ssh s202 //切换到数据节点s202
$>cd hadoop/dfs/data/current/BP-377304219-192.168.37.201-1520345495424/current/finalized/subdir0/subdir0/ //进入文件夹
$>ls -al //查看文件信息
我们发现了有blk_1073741827,blk_1073741828,blk_1073741828。其中blk_1073741827是hello.txt,blk_1073741828和blk_1073741829是tar包.我们
也可以切换到s203和s204来查看,结果都是一样的,因为我们设置了3个副本,因此在3个节点上存储的东西都是一样的。
以上就是今天的全部内容。
与您共勉