1 概念
1、大数据:在以Hadoop与Spark为代表的框架上经行实时、离线数据处理,数据分析、数据挖掘、机器算法预测分析的技术。为了解决大数据的存储问题,Google提出了MapReduce、BigTable、GFS理论。由此降低了成本,即在PC机上也可完成,而不必用大型机。在硬件故障常态化上,通过软件保证了数据的可靠性。简化了并行分布式计算,无须控制结点同步。开源社区根据谷歌的思想开发了Hadoop框架。
2、Hadoop:是一个由Apache基金会所开发的分布式系统基础架构,是一个开源的大数据框架。其两大核心是:HDFS和MapReduce。HDFS分布式文件系统解决了大数据技术的基础存储问题,MapReduce编程模型为大数据应用提供了分布式计算的解决方案。
3、HDFS以TB或PB为单位进行大容量数据储存。其文件的存储以数据块为单位而非整个文件,这样分块有利于大文件的储存与备份。作为分布式系统,HDFS以NameNode作为主记录文件信息,以DataNode作为从对具体数据进行存储。其中NameNode负责管理系统的命名空间、存放元数据,维护文件系统文件与数据块的映射关系,记录文件中的各个块所在数据结点的信息。DataNode定期向NameNode汇报自身状况即心跳检测。此外存在二级NameNode用于定期数据备份,在NameNode故障后转正。
HDFS的写流程:首先客户端向NameNode发起写数据请求,NameNode查询可以写入的DataNode并将信息返回给客户端。客户端将文件分为数据块并按照返回的信息将每块数据存储到对应的DataNode,并且完成在多个数据块之间的备份。DataNode存储完成后会反馈给NameNode并更新其上的文件信息列表,之后继续存储下一个数据块。当所有数据块都存储完成后NameNode反馈给客户端。
HDFS读流程:客户端向NameNode发起读请求,NameNode返回文件所在的DataNode信息,客户端根据此信息到对应的DataNode读取各个数据分块,当某个DataNode故障时,自动到备份结点读取数据。
3、 MapReduce是一种分治思想,Hadoop将较大的作业(Job)划分为多个小任务(Task)分配给多个终端执行,之后将结果汇总,每个小任务有MapTask与ReduceTask两种。Hadoop通过JobTracker完成对作业的调度,并负责Task的分配与进度的监控,以及对每个Task Tracker的状态进行监控。而TaskTacker则负责具体任务的执行与向JobTracker汇报。
当输入数据后,首先进行分片,之后交给Map端,经由TaskTracker处理产生中间结果。之后按照一定的规则将结果交给Reduce端,处理产生结果返回给HDFS。
在MapReduce中如果出错,节点首先会尝试重复执行4次。当所有节点计算完成后,仍有一个节点没有返回,JobTracker会另外找一个节点去同时执行该节点的任务,直到某个节点返回结果后,将另一个节点中断。
2 环境搭建
1、搭建阿里云主机ECS
通过阿里云翼计划以每月9.5元的价格购买一台云主机,通过云端操作服务器比在本地搭建虚拟机更为便捷而且不会影响本机的性能。开通云主机时选择预装环境为Ubuntu,按照提示完成开通之后配置主机密码,重置密码后记得要手动重启主机再进行登录。
如果要使用SSH远程登录或者搭建网站等,需要开放主机的相应端口,在实例安全组中点击配置规则,之后再点击快速创建规则,选择需要开放的协议端口即可。
2、使用XShell进行远程访问
下载并打开SSH连接工具XShell,点击新建按钮弹出如下对话框,将端口号设置为22,在主机位置输入云主机的IP地址,在用户身份验证中输入用户名和密码后点击连接。
3、安装Java环境
在命令行输入javac,如果未安装会出现类似如下提示:
The program 'javac' can be found in the following packages:
* default-jdk
* ecj
* gcj-5-jdk
* openjdk-8-jdk-headless
* gcj-4.8-jdk
* gcj-4.9-jdk
* openjdk-9-jdk-headless
Try: apt install <selected package>
根据提示安装jdk:apt install openjdk-9-jdk-headless。如果出现提示:E: Unable to locate package openjdk-9-jdk-headless,说明你需要更新一下apt,输入apt-get update即可。安装完成后再次输入javac会出现java提示。
4、配置Java环境变量
vim /etc/profile,在profile文件内添加环境变量如下,其中JAVA_HOME的路径为jdk的安装路径,在刚才的安装过程中有显示。
export JAVA_HOME=/usr/lib/jvm/java-9-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
修改完成后输入:source /etc/profile,使其立刻生效。之后在任何路径下都可以使用java命令了。
5、安装配置Hadoop
首先修改Ubuntu主机名,打开配置文件:vim /etc/hostname,在其中输入主机名为LocalHost,重启生效。
之后从Hadoop镜像选择所需版本下载Linux压缩包:
wget http://mirror.bit.edu.cn/apache/hadoop/common/stable/hadoop-3.2.0.tar.gz
在opt目录下解压后进入conf文件夹下进行配置,不同版本文件位置不同。首先配置hadoop-env.sh,配置其中的JAVA_HOME目录:
export JAVA_HOME=/usr/lib/jvm/java-9-openjdk-amd64
接着配置core-site.xml文件:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/hadoop/name</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
配置hdfs-site.xml文件:
<configuration>
<property>
<name>dfs.data.dir</name>
<value>/hadoop/data</value>
</property>
</configuration>
配置mapred-site.xml文件:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
配置/etc/profile的系统路径,并且屏蔽Hadoop_Home的warn警告:
export HADOOP_HOME=/opt/hadoop-1.2.1
export HADOOP_HOME_WARN_SUPPRESS=1
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH
输入source /etc/profile刷新后输入hadoop会出现命令提示。
6、启动Hadoop
首先格式化namenode,在hadoop的bin目录下输入hadoop namenode -format。如果出现错误提示Error: Config file not found: /usr/lib/jvm/java-9-openjdk-amd64/conf/management/management.properties,这是由于jdk中缺少软连接,进入到该目录创建一个:
cd /usr/lib/jvm/java-9-openjdk-amd64
ln -s lib conf
格式化namenode后,输入start-all.sh启动Hadoop
之后输入jps可以看到节点已经启动
7、HDFS简单使用
查看Hadoop文件夹内容 | hadoop fs -ls 路径 |
查看hadoop文件系统信息 | hadoop dfsadmin -report |
创建文件夹 | hadoop fs -mkdir 文件名 |
上传文件到Hadoop | hadoop fs -put 本地文件路径 目标位置 |
查看文件内容 | hadoop fs -cat 文件名 |
下载文件 | hadoop fs -get 文件名 重命名 |