Hadoop大数据平台架构与实践
1、背景知识
⑴Google大数据技术:MapReduce、BigTable、GFS。革命性的变化:成本降低,能用PC机,就不用大型机和高端存储;软件容错硬件故障视为常态,通过软件保障可靠性;简化并行分布式计算,无需控制节点同步和数据交换。但是,google只发表了相关的技术论文,没有开放源代码。Hadoop就是一个模仿Google大数据技术的开源实现。
⑵Hadoop是一个开源的分布式存储和分布式计算平台,现在属于一个Apache的顶级目录。包括两个核心组成部分:
①HDFS:分布式文件系统,存储海量的数据。
②MapReduce:并行处理框架,实现任务分解和调度。
⑶Hadoop作用:搭建大型数据仓库,pb级数据的存储、处理、分析、统计等业务,比如搜索引擎、商业智能、日志分析、数据挖掘等等。
⑷Hadoop优势:高扩展,低成本,成熟的生态圈。Hadoop已经成为业界大数据平台的首选。
⑸Hadoop生态系统
①Hive:将SQL语句转化成Hadoop任务去执行,降低了Hadoop使用门槛。
②HBase:存储结构化数据的分布式数据库。相比一般的关系型数据库,其放弃了事务特性,追求更高的扩展。相比HDFS,其提供数据的随机读写和实时访问,实现对表数据的读写功能。
③zookeeper:监控Hadoop集群里每个结点的状态,管理整个集群的配置,维护结点间数据的一致性等。
⑹Hadoop版本:1.x稳定 2.x与1.x差别较大,现在已经出到2.6。
2、Hadoop的安装
准备linux环境、安装JDK、配置Hadoop。
⑴准备linux环境
①安装虚拟机,在虚拟机上装上Linux
②租用云主机,阿里云、UnitedStack等。
⑵安装JDK:javac判断环境—sudo apt install+jdk版本
配置java环境变量:vim /etc/profile à 配置环境变量:export JAVA_HOME=/jdk路径;export JRE_HOME=$JAVA_HOME/jre;export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLAS SPATH;export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH à让配置生效:source /etc/profile
⑶配置Hadoop:下载wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.1/hadoop-2.7.1.tar.gz à 解压缩 à 进入修改配置:hadoop-env.sh文件:改export JAVA_HOME与之前jdk安装路径一致 à core-site.xml文件:配置工作目录:<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>à hdfs-site.xml文件:配置文件系统数据的存放目录:<property><name>dfs.data.dir</name><value>/hadoop/data</value></property> à mapred-site.xml文件:配置任务定位器该如何访问<property><name>mapred.job.tracker</name><value>localhost:9001</value></property> à vim/etc/profile 编辑告诉系统Hadoop位置:插入export HADOOP_HOME=安装路径;修改export PATH=$JAVA_HOME/bin:$JRE_HOME/bin: $HADOOP_HOME/bin:$PATH à 让配置生效:source/etc/profile
⑷使用之前对namenode进行格式化操作:hadoop namenode –format,使用jps可判断hadoop运行是否正常。
3、HDFS
⑴HDFS的文件被分成块进行存储。HDFS块的默认大小为64MB。块是文件存储处理的逻辑单元。⑵HDFS内有两类结点,NameNode和DataNode。
①NameNode是管理节点,存放文件元数据。元数据包括文件与数据块的映射表和数据块与数据节点的映射表。NameNode里保存着大量的元数据,客户如果查询一个访问请求,它会向NameNode去读取元数据,返回的结果就知道文件是存放在哪一些节点上,于是向这些节点读取数据块,得到数据块后再拼装成想要的文件。
②DataNode是工作节点,存放数据块。
⑶HDFS数据管理与容错
①每个数据块3个副本,分布在两个机架内的三个节点,确保数据安全可靠。
②DataNode定期向NameNode发送心跳消息,这样NameNode就能知道DataNode的状态。
③二级NameNode定期同步元数据映像文件和修改日志。NameNode发生故障时,备胎转正。
⑷HDFS中文件的读与写
①读取:客户端向NameNode发送文件读取请求,把文件名等发送过去 àNameNode查询元数据,返回给客户端,告诉客户端文件包含哪些块,以及这些块能在哪里DataNode里能找到à 客户端直接找到这些DataNode,读取这些块,下载下来之后进行组装。
②写入:将文件拆分成块à 客户端通知NameNode,找到一些可用的有足够磁盘空间的DataNode返回 à 根据返回的DataNode,客户端将拆分完的块写入à 写入每个块都要进行流水线复制 à 更新元数据,告诉NameNode写入完成,创建一个新的数据块,保证NameNode中的数据处于最新的状态。
⑸HDFS的特点
①数据冗余,硬件容错。用三个备份做容错,可以在廉价机器上容错。
②流式的数据访问。数据一次写入,多次读取。一旦写入之后,不会被修改。
③存储大文件。如果是小文件NameNode的压力会非常大,因此适合存储大文件。
⑸适用性和局限性
①适合数据批量读写,吞吐量高。
②不适合交互式应用,低延迟很难满足。
③适合一次写入,多次读取,顺序读写。
④不支持多用户并发写相同文件。
⑹HDFS的使用
HDFS提供shell接口,可以直接用HDFS命令行来操作。
hadoop namenode –format 对namenode进行格式化
hadoop fs –ls /+路径 打印HDFS里的文件夹
hadoop fs –put +文件名+文件夹 在文件夹中上传文件
hadoop fs –cat +文件路径 查看指定文件
hadoop fs –get +文件路径+本地文件名 下载文件到本地
hadoop dfsadmin –report 显示文件系统里所有信息
(前缀加linux命令,很多适用)
4、MapReduce
⑴原理:分而治之,一个大任务分成多个小的子任务(map),并行执行后,合并结果(reduce)。
⑵基本概念
①Job&Task:Job是一个大的作业,一个Job可以分成很多个Task。每个Task可以分成MapTask和ReduceTask。
②JobTracker:管理节点,客户端提交任务,其将任务放入候选队列中,在适当的时间进行调度,选择出一个任务,将该任务拆分成多个Map任务和Reduce任务,将这些任务分发给TaskTracker来做。(作业调度、分配任务、监控任务执行进度、监控TaskTracker的状态)。
③TaskTracker:任务节点,真正完成任务的结点。部署时往往和HDFS中的DataNode是同一组物理节点,就能保证计算是跟着数据走的,保证读取开销最小。移动计算代替移动数据。(执行任务、汇报任务状态)。
⑶MapReduce作业执行过程:输入数据,分片 à 按照一定的规则分给TaskTracker,进行Map任务 à 产生中间结果key-value对à 根据一些映射规则进行交换,按照一定的规则分给TaskTracker,进行Reduce任务 à 输出结果写回到HDFS里。
一些复杂的任务可能经历若干轮次Map任务。
⑷MapReduce的容错机制
①重新执行。默认出错重新执行4次以后,会放弃执行。
②推测执行。若少数TaskTracker迟迟未完成,会重新启动其它TaskTracker与其进行同样的任务,二者有一个完成,则终止另一个。
5、实践:WordCount
⑴问题描述:计算文件中出现每个单词的频数,输出结果按照字母顺序进行排序。
⑵过程:编写WordCount.java,包含Map类和Reduce类 à 编译WordCount.java,javac –classpath à 打包tar –cvf WordCount.jarclasses/* à 作业提交hadoop jar WordCount.jar WordCount inputoutput
6、实践:排序
思路:先按大小分区间,内部排序后,直接合并即可。