1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。
注意:HADOOP的核心组件有:
1)HDFS(分布式文件系统)
2)YARN(运算资源调度系统)
3)MAPREDUCE(分布式运算编程框架)
Hadoop 中的分布式文件系统 HDFS 由一个管理结点 ( NameNode )和N个数据结点 ( DataNode )组成,每个结点均是一台普通的计算机。在使用上同我们熟悉的单机上的文件系统非常类似,一样可以建目录,创建,复制,删除文件,查看文件内容等。但其底层实现上是把文件切割成 Block,然后这些 Block 分散地存储于不同的 DataNode 上,每个 Block 还可以复制数份存储于不同的 DataNode 上,达到容错容灾之目的。NameNode 则是整个 HDFS 的核心,它通过维护一些数据结构,记录了每一个文件被切割成了多少个 Block,这些 Block 可以从哪些 DataNode 中获得,各个 DataNode 的状态等重要信息。
MapReduce 是 Google 公司的核心计算模型,它将复杂的运行于大规模集群上的并行计算过程高度的抽象到了两个函数,Map 和 Reduce, 这是一个令人惊讶的简单却又威力巨大的模型。适合用 MapReduce 来处理的数据集(或任务)有一个基本要求: 待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。基于它写出来的程序能够运行在由上千台商用机器组成的大型集群上,并以一种可靠容错的方式并行处理T级别的数据集,实现了Haddoop在集群上的数据和任务的并行计算与处理。
个人认为,从HDFS(分布式文件系统)观点分析,集群中的服务器各尽其责,通力合作,共同提供了整个文件系统的服务。从职责上集群服务器以各自任务分为namenode、datanode服务器.其中namenode为主控服务器,datanode为数据服务器。Namenode管理所有的datanode数据存储、备份、组织记录分配逻辑上的处理。说明白点namenode就是运筹帷幄、负责布局指挥将军,具体的存储、备份是由datanode这样的战士执行完成的。故此很多资料将HDFS分布式文件系统的组织结构分为master(主人)和slaver(奴隶)的关系。其实和namenode、datanode划分道理是一样的。
从MapReduce计算模型观点分析,Map/Reduce框架和分布式文件系统是运行在一组相同的节点上的,也就是说计算节点和存储节点在一起。这种配置允许在那些已经存好数据的节点上高效的调度任务,这样可以使整个集群的网络宽带得到非常高效的利用。另外,在Hadoop中,用于执行MapReduce任务的机器有两个角色:JobTracker,TaskTracker。JobTracker(一个集群中只能有一台)是用于管理和调度工作的,TaskTracker是用于执行工作的。
在技术方面Hadoop体系具体包含了以下技术:
Common:在0.20及以前的版本中,包含HDFS、MapReduce和其他项目公共内容,从0.21开始HDFS和MapReduce被分离为独立的子项目,其余内容为Hadoop Common。
1:HADOOP(hdfs、MAPREDUCE、yarn) :元老级大数据处理技术框架,擅长离线数据分析;
2:Avro:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。
3:MapReduce:并行计算框架,0.20前使用org.apache.hadoop.mapred旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API。 分布式运算程序开发框架;
4:HDFS:Hadoop分布式文件系统(Hadoop Distributed File System)。分布式文件系统;
5:Pig:大数据分析平台,为用户提供多种接口。
6:Hive:数据仓库工具,由Facebook贡献。基于大数据技术(文件系统+运算框架)的SQL数据仓库工具;数据仓库工具,使用方便,功能丰富,基于MR延迟大;
7:Hbase:类似Google BigTable的分布式NoSQL列数据库。(HBase和Avro已经于2010年5月成为顶级Apache项目)。基于HADOOP的分布式海量数据库;分布式海量数据库,离线分析和在线业务通吃;
8:ZooKeeper:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。分布式协调服务基础组件;分布式协调服务基础组件;
9:Sqoop:Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 :MySQL, Oracle, Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中。数据导入导出工具;
10:Oozie:负责MapReduce作业调度。工作流调度框架;
11:Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库。
12:Flume:日志数据采集框架;数据采集框架;
以上对Hadoop体系框架和相应技术做了相应分析,并从HDFS、MapReduce的角度分析了集群中的角色扮演,这既是我们实验的理论基础,也是实验研究Hadoop深层次系统知识体系结构的意义所在。
Hadoop集群简介:
1)HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起
2)HDFS集群:
负责海量数据的存储,即负责数据文件的读写操作,集群中的角色主要有 NameNode (Hdfs的大哥)/ DataNode(Hdfs的小弟)
3)YARN集群:
负责海量数据运算时的资源调度,即负责为mapreduce程序分配运算硬件资源,集群中的角色主要有 ResourceManager (Yarn的小哥)/NodeManager(Yarn的小弟)
4)注意:节点分配思想,hdfs是数据的存储,所以DataNode存储数据,而yarn是资源调度,所在的机器正好存在数据,就可以进行调度,否则通过网络传输,在yarn上ResourceManager对NodeManager进行管理,管理资源调度 。
5)如果,集群搭建案例,以5节点为例进行搭建,角色分配如下:
机器-01 NameNode SecondaryNameNode
机器-02 ResourceManager
机器-03 DataNode NodeManager
机器-04 DataNode NodeManager
机器-05 DataNode NodeManager
2:首先自己搞三台虚拟机,这里使用centOs虚拟机(本实验只搭建一个有三台主机的小集群。三台机器的具体分工命名如下):
IP |
主机名 |
功能角色 |
192.168.3.129 |
CentOS-01/master(主人) |
namenode(控制节点)、JobTracker(工作分配) |
192.168.3.130 |
CentOS-02/slaver1(奴隶) |
datanode(数据节点)、TaskTracker(任务执行) |
192.168.3.131 |
CentOS-03/slaver2(奴隶) |
datanode(数据节点)、TaskTracker(任务执行) |
3:讲解一下网络配置,不然好多小伙伴不知道网络怎么搞,以至于一直拖延不前:
首先,在VMware软件里面的编辑----》虚拟网络编辑器---》选择VMnet8模式
然后选择NET设置,将网关ip修改为这个模式192.168.x.1格式:
然后选择DHCP设置,自己可以选择的ip地址范围:
然后找到本地的网络设置,设置一下本地网络:
然后开始设置虚拟机的静态ip地址,如下所示,三个虚拟机按照如下进行设置,下面只写一个虚拟机,其他两个类比即可:
鼠标右击找到Edit Connections:
然后进行编辑:
注意下面红色圈起来的地方(Address分别设置成自己容易识别的,我的是192.168.3.129,192.168.3.130,192.168.3.131):
最后网络就可以使用了,使用XShell进行远程连接方便操作:
需要注意的是这里的网络设置必须是Net8模式的:
4:Hadoop完全分布式的安装需要以下几个过程:
1 综述:Hadoop完全分布式的安装需要以下几个过程: 2 (1)为防止权限不够,三台机器均开启root登录。 3 (2)为三台机器分配IP地址及相应的角色。 4 (3)对三台机器进行jdk安装并配置环境变量。 5 (4)对三台机器进行ssh(安全外壳协议)远程无密码登录安装配置。 6 (5)进行Hadoop集群完全分布式的安装配置。 7 下面对以上过程进行详细叙述。
5:切换root用户进行操作(三台机器都执行此操作即可):
1)如果正式工作了,建议使用自己的用户,而非root用户(详细创建用户命令可百度):
useradd 用户名称;
passwd 密码;
2)新建用户以后,会遇到一些很烦心的事情,这个时候修改:vim /etc/sudoers新用户的权限,如给hadoop用户添加执行的权限;
6:在三台主机上分别设置/etc/hosts及/etc/sysconfig/network(centos操作系统) /etc/hostname(ubuntu操作系统):
hosts文件用于定义主机名与IP地址之间的对应关系(三台主机配置相同)。
如下所示:
执行此命令:[root@localhost hadoop]# vim /etc/sysconfig/network
主节点修改为master:
节点一修改为slaver1
节点二修改为slaver2
然后修改主机名称和ip的对应关系:
三台主机配置相同:
如下命令:[root@localhost hadoop]# vim /etc/hosts
配置好以后进行重启三台电脑即可(重启命令reboot):
自己可以进行验证一下是否修改正确,如ping master/ping slaver1/ping slaver2:
7:三台机器上安装jdk(将linux版本的jdk上传到虚拟机,上传操作之前说过,此处省略,注意jdk的是linux版本的):
上传之后进行解压缩和配置环境变量:
配置一下jdk的环境变量(必须用root权限进行修改配置文件):
[root@master hadoop]# vim /etc/profile
然后验证三台机器的jdk是否安装成功:
验证之前先刷新一下配置文件:[root@slaver1 hadoop]# source /etc/profile
然后使用java/javac/java -version三个命令分别在三台机器上面进行验证:
8:安装SSH,配置免秘钥登录操作,由于我的已经安装好了,所以这一步略过,自己可以去百度,直接配置免秘钥登录:
生成密钥并配置SSH免密码登录本机,执行以下命令,生成密钥对,并把公钥文件写入授权文件中:
生成密钥对,并把公钥文件写入授权文件中,cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys会自动创建authorized_keys文件,然后将id_dsa.pub的内容写到authorized_keys文件里面,这个时候去查看authorized_keys已经存在id_dsa.pub里面的内容(生成密钥对及授权文件,公钥在/root/.ssh/下):
然后将授权文件复制到slaver1主机中,输入命令:
[hadoop@master .ssh]$ scp authorized_keys root@192.168.3.130:~/.ssh/
可以看到slaver1已经存在授权文件:
然后在slave1机器中,使用同样命令生成密钥对,将公钥写入授权文件中。然后将slaver1主机中的授权文件复制到slaver2中,使用同样命令生成密钥对,将公钥写入授权文件中。这样就完成了同一个授权文件拥有三个公钥。最后将此时的授权文件分别复制到master主机、slaver1主机中,这样就完成了,ssh免密登录验证工作。
为了防止防火墙禁止一些端口号,三台机器应使用
关闭防火墙命令:ufw disable
重启三台机器,防火墙关闭命令才能生效,重启后后查看是否可以从master主机免密码登录slaver,输入命令:ssh slaver1,ssh slaver2:
在slaver1进行生成密钥对,将公钥写入授权文件中:
将公钥写入授权文件中:
然后将slaver1主机中的授权文件复制到slaver2中,使用同样命令生成密钥对,将公钥写入授权文件中。
使用同样命令在slaver2生成密钥对,将公钥写入授权文件中。
将公钥写入授权文件中:
这样就完成了同一个授权文件拥有三个公钥。最后将此时的授权文件分别复制到master主机、slaver1主机中,这样就完成了,ssh免密登录验证工作。
然后查看master的授权文件:
然后将此时的授权文件分别复制到slaver1主机中,这样就完成了:
然后查看slaver1的授权文件:
为了防止防火墙禁止一些端口号,三台机器应使用
关闭防火墙命令:ufw disable(重启三台机器,防火墙关闭命令才能生效)/ service iptables stop(暂时关闭防火墙,方便测试使用)
重启后后查看是否可以从master主机免密码登录slaver,输入命令:
ssh slaver1
ssh slaver2
第一次登陆不知道为啥还是让输入一个yes,之后再进行登陆就直接登陆成功了:
9:进行Hadoop集群完全分布式的安装配置(将下载的hadoop-2.2.0上传到虚拟机并解压至/home/hadoop目录下):
[root@master hadoop]# tar -zxvf hadoop-2.4.1.tar.gz
三台hadoop文件配置相同,所以配置完一台后,可以把整个hadoop复制过去就行了,现在开始配置master主机的hadoop文件。
需要配置的文件涉及到的有7个(mapred-site.xml文件默认不存在的,可以复制相应的template文件获得(如mapred-site.xml文件)。)
如下图标示部分:
配置文件1:vim hadoop-env.sh
修改JAVA_HOME值如下图:
配置文件2:yarn-env.sh
修改JAVA_HOME值如下图:
配置文件3:slaves(保存所有slave节点)写入以下内容,是给自动化启动脚本使用的哦,切记,是启动DataNode的:
(这里需要注意一下,开始我的master节点写的 vim slaves出现了,出现了hadoop DataNode启动不了的问题,这里不是多次格式化造成的问题,这里是master主节点的vim slaves内容是master,而slaver1和slaver2的vim slaves内容是slaver1,slaver2,即下图内容,所以造成了DataNode启动不了的问题。)
配置文件4:core-site.xml
添加配置内容如下图:
<configuration> <!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址,master即是namenode所在的节点机器,9000是端口号,NameNode是为客户提供服务的,NameNode知道每一个文件存在哪一个datanode上面 --> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop-2.4.1/tmp</value> </property> </configuration>
配置文件5:hdfs-site.xml
<configuration> <!-- 指定HDFS副本的数量,副本的数量,避免一个机器宕掉了,数据丢失,默认是3个副本 --> <property> <name>dfs.replication</name> <value>2</value> </property>
<!-- 指定SecondNameNode在那台机器上面启动 -->
<property>
<name>dfs.secondary.http.address</name>
<value>master:50090</value>
</property>
</configuration>
配置文件6:mapred-site.xml
[root@master hadoop]# mv mapred-site.xml.template mapred-site.xml
<configuration> <!-- 指定mr运行在yarn上,即mapreduce运行在yarn上面 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
配置文件7:yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 指定YARN的老大(ResourceManager)的地址,这个地方主要看自己的机器分配情况,如果是四台机器,这个value值就是第四台的主机名称哦, -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
上面配置完毕后,基本上完成了90%的工作,剩下的就是复制。我们可以把整个hadoop复制过去使用命令如下:
[root@master hadoop]# scp -r /home/hadoop/hadoop-2.4.1 slaver1:/home/hadoop/
[root@master hadoop]# scp -r /home/hadoop/hadoop-2.4.1 slaver2:/home/hadoop/
然后去slaver1和slaver2就可以看到复制过去的hadoop-2.4.1:
为方便用户和系统管理使用hadoop、hdfs相关命令置系统环境变量,使用命令:vim /etc/profile
配置内容为hadoop目录下的bin、sbin路径,具体如下:
[root@slaver1 hadoop]# vim /etc/profile
export JAVA_HOME=/home/hadoop/jdk1.7.0_65 export HADOOP_HOME=/home/hadoop/hadoop-2.4.1 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
添加完后执行生效命令:source /etc/profile
下面要做的就是启动验证,建议在验证前,把以上三台机器重启,使其相关配置生效。
10:启动验证
在master节点上进行格式化namenode (是对namenode进行初始化):
命令:hadoop namenode -format或者hdfs namenode -format
start-all.sh或者启动(start-dfs.sh和start-yarn.sh)
使用Jps命令master有如下进程,说明ok
start-yarn.sh 启动namenode和datanode.
hadoop-daemon.sh start namenode 启动namenode.
hadoop-daemon.sh start datanode 启动datanode.
[root@master hadoop]# start-all.sh
上面这个图是错误的,由于master的vim slaves没有配置正确,造成的。下图是修改过后显示的。
使用jps命令slaver1、slaver2有如下进程,说明ok:
查看集群状态,命令:hadoop dfsadmin -report
查看分布式文件系统:http://master:50070
除了浏览器查看集群的状态,可以使用命令查看,此命令比浏览器查看更加准确:
[root@master hadoop]# hdfs dfsadmin -report
查看MapReduce:http://master:8088
使用以上命令,当你看到如下图所示的效果图时,恭喜你完成了Hadoop完全分布式的安装设置,其实这些部署还是比较基本的,对于Hadoop高深的体系结构和强大技术应用,这仅仅是一个小小的开始。
11:集群的关闭在master节点上执行命令如下:
stop-all.sh或者(stop-dfs.sh和stop-yarn.sh)
12:hadoop基本操作实践
基本命令
1. 格式化工作空间
进入bin目录,运行 hadoop namenode –format
2. 启动hdfs
进入hadoop目录,在bin/下面有很多启动脚本,可以根据自己的需要来启动。
* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack
* stop-all.sh 停止所有的Hadoop
* start-dfs.sh 启动Hadoop DFS守护Namenode和Datanode
* stop-dfs.sh 停止DFS守护
HDFS文件操作
Hadoop使用的是HDFS,能够实现的功能和我们使用的磁盘系统类似。并且支持通配符,如*。
1. 查看文件列表
b. 执行hadoop fs -ls /
查看hdfs中/目录下的所有文件(包括子目录下的文件)。
a. 执行hadoop fs -ls -R /
2. 创建文件目录
a. 执行hadoop fs -mkdir /newDir
3. 删除文件
删除hdfs中/目录下一个名叫needDelete的文件
a. 执行hadoop fs -rm /needDelete
删除hdfs中/hdfs目录以及该目录下的所有文件
a. 执行hadoop fs -rm -r /hdfs
4. 上传文件
上传一个本机/home/admin/newFile的文件到hdfs中/目录下
执行hadoop fs –put /home/admin/newFile /
5. 下载文件
下载hdfs中/ 目录下的newFile文件到本机/home/admin/newFile中
a. 执行hadoop fs –get /newFile /home/admin/newFile
6. 查看文件内容
查看hdfs中/目录下的newFile文件
a. 执行hadoop fs –cat /newFile
2017-11-22 14:06:19
停更......