Hadoop简介
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。
对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。
HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。
基于Centos系统进行Hadoop运行环境部署
版本:CentOS7Hadoop2.8.0JDK1.8。下载地址:http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz
分别命名为master、hadoop1、Hadoop2
1.2.2 分别修改主机名
如图所示:
修改这3台机器的/etc/hosts文件,在文件中添加以下内容:192.168.56.129 master;;192.168.56.130 hadoop1;192.168.56.131 hadoop2。
以marset为例,如图所示:
1.2.5 在master上创建authorized_keys文件
1.2.6 使用ls/root/.ssh/ 命令查看,是否生成成功
1.2.7 将authorized_keys文件复制到其他机器
将master上的/root/.ssh/id_rsa.pub文件内容,hadoop1上的/root/.ssh/id_rsa.pub文件内容,hadoop2上的/root/.ssh/id_rsa.pub文件内容复制到这个authorized_keys文件中。
查看复制结果:
在master进行测试,分别 输入命令:ssh hadoop1;ssh hadoop2。
将jdk分别上传到master、hadoop1、hadoop2上:
以master为例:打开Xshell连接master,输入主机名称和IP地址,设置连接方式
打开Xftp,在主机master的下创建java文件夹,将jdk上传到master的/home/master/java下:
进入的/home/master/java目录,进行jdk压缩文件解压,执行命令 cd /home/master/java
解压成功,多出jdk1.7.0_80文件
修改配置文件,执行命令vi /etc/profile
修改文件,增加的内容是:
export JAVA_HOME=/home/master/hadoop/hadoop-2.8.0
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
修改了/etc/profile文件后,需要把这个文件里保存的命令执行一次(方法是使用source命令)
执行命令source /etc/profile回车
如图所示,安装成功。
以在master上安装为例,另外在2台虚拟机机上重复下面步骤安装即可
在master目录下新建一个名为hadoop的目录,并将下载得到的hadoop-2.8.0.tar压缩包用Xftp上传到该目录下,如图:
进入到/home/master/hadoop目录,执行命令:cd /home/master/hadoopp
执行解压命令:tar -xvf hadoop-2.8.0.tar.gz;
查看是否解压成功
说明:另外2台机器都要进行上述操作,解压缩后得到一个名为hadoop-2.8.0的目录,表示解压成功。
在/root目录下新建6个目录,复制粘贴执行下面的命令:
mkdir/root/hadoop
mkdir/root/hadoop/tmp
mkdir/root/hadoop/var
mkdir/root/hadoop/dfs
mkdir/root/hadoop/dfs/name
mkdir/root/hadoop/dfs/data
修改/home/master/hadoop/hadoop-2.8.0/etc/hadoop目录内的一系列文件。
修改/home/master/hadoop/hadoop-2.8.0/etc/hadoop/core-site.xml文件;
输入命令vi/home/master/hadoop/hadoop-2.8.0/etc/hadoop/core-site.xml
在节点内加入配置:
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://hserver1:9000</value>
</property>
</configuration>
修改/home/master/hadoop/hadoop-2.8.0/etc/hadoop/hadoop-env.sh文件;将export JAVA_HOME=${JAVA_HOME}修改为:export JAVA_HOME=/home/master/hadoop/hadoop-2.8.0。
说明:修改为自己的JDK路径。
执行命令:vi/home/master/hadoop/hadoop-2.8.0/etc/hadoop/hadoop-env.sh
修改/home/master/hadoop/hadoop-2.8.0/etc/hadoop/hdfs-site.xml文件;
在节点内加入配置:
<property>
<name>dfs.name.dir</name>
<value>/root/hadoop/dfs/name</value>
<description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hadoop/dfs/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>need not permissions</description>
</property>
说明:dfs.permissions配置为false后,可以允许不要检查权限就生成dfs上的文件,方便倒是方便了,但是你需要防止误删除,请将它设置为true,或者直接将该property节点删除,因为默认就是true。
执行命令vi/home/master/hadoop/hadoop-2.8.0/etc/hadoop/hdfs-site.xml
在该版本中,有一个名为mapred-site.xml.template的文件,复制该文件,然后改名为mapred-site.xml,
命令:cp /home/master/hadoop/hadoop-2.8.0/etc/hadoop/mapred-site.xml.template /home/master/hadoop/hadoop-2.8.0/etc/hadoop/mapred-site.xml;
执行命令vi/home/master/hadoop/hadoop-2.8.0/etc/hadoop/mapred-site.xml
在节点内加入配置:
<property>
<name>mapred.job.tracker</name>
<value>hserver1:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
修改/home/master/hadoop/hadoop-2.8.0/etc/hadoop/slaves文件,
执行命令:vi/home/master/hadoop/hadoop-2.8.0/etc/hadoop/slaves
将里面的localhost删除,添加如下内容:master;hadoop1;hadoop2
修改/home/master/hadoop/hadoop-2.8.0/etc/hadoop/yarn-site.xml文件,
执行命令vi/home/master/hadoop/hadoop-2.8.0/etc/hadoop/yarn-site.xml
在节点内加入配置:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hserver1</value>
</property>
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<description>The http address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<description>The https adddress of the RM web application.</description>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<description>The address of the RM admin interface.</description>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
<discription>每个节点可用内存,单位MB,默认8182MB</discription>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
3.5启动hadoop
3.5.1初始化hadoop
在namenode上执行初始化,因为master是namenode,hadoop1和hadoop2都是datanode,所以只需要对master进行初始化操作,也就是对hdfs进行格式化。
进入到master这台机器的/home/master/hadoop/hadoop-2.8.0/bin目录,就是执行命令: cd /home/master/hadoop/hadoop-2.8.0/bin
执行初始化脚本,执行命令:./hadoop namenode -format
3.5.2启动hadoop
在namenode上执行启动命令,
因为master是namenode,hadoop1和hadoop2都是datanode,所以只需要再master上执行启动命令即可。
进入到master这台机器的/home/master/hadoop/hadoop-2.8.0/sbin目录,也就是执行命令:
cd /home/master/hadoop/hadoop-2.8.0/sbin
执行启动脚本,即执行命令:
./start-all.sh
3.6 测试hadoop
haddoop启动了,需要测试一下hadoop是否正常。执行命令,关闭防火墙,CentOS6下,命令是: service iptables stop
测试hadoop部署是否成功: master是我的namanode,该机器的IP是192.168.56.129,在本地电脑访问如下地址:http://192.168.56.129:50070/自动跳转到了overview页面。
在本地浏览器里访问如下地址:http://192.168.56.129:8088/ 自动跳转到了cluster页面
检验hadoop是否运行,输入:jps
到此hadoop的伪分布模式配置完成。
写在最后的话:学而不思则罔。学习是一个输入输出的双向过程,要想学会、学牢一个知识点,不仅仅靠足够的输入,内化理解输出的过程也很重要,故这也是本文写作初衷之一。本文是笔者基于大学时上的操作系统课程中的课程设计大作业,整理编辑而成,全当做总结复习使用。步骤比较详细,时候刚刚学习接触Linux的同学,由于笔者水平有限,对操作系统了解甚浅,如若读者发现不足,感谢给予提出和纠正,欢迎各位同学留言讨论交流。