赞
踩
文章较长,附目录,此次安装是在VM虚拟环境下进行。文章第一节主要是介绍Hadoop与Hadoop生态圈并了解Hadoop三种集群的区别,第二节和大家一起下载,配置Linux三种集群以及大数据相关所需的jdk,zookeeper,只需安装配置的朋友可以直接跳到文章第二节。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。
目录
Hadoop官网介绍
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,是一个开源的框架,用于编写和运行分布式应用以处理大规模数据。它最初是从Nutch项目中分离出来的,专门负责分布式存储以及分布式运算。Hadoop的核心主要包含HDFS(Hadoop Distributed File System,分布式文件系统)和MapReduce(分布式数据处理模型)。
HDFS用于分布式存储海量数据,而MapReduce则用于数据的分布式处理,其本质是并行处理。Hadoop的数据来源可以是任意类型的,它在处理半结构化和非结构化数据时与关系型数据库相比有更好的性能和灵活性。任何类型的数据最终都会转化成key/value的形式,这是Hadoop的基本数据单元。
Hadoop专为离线和大规模数据分析而设计,并不适合对少量记录进行随机在线处理的模式。在实际应用中,Hadoop常被用于日志分析等任务,还可以与Hive等工具配合使用以进一步提升数据处理能力。
总的来说,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台,用户可以在不了解分布式底层细节的情况下,开发分布式程序。
Hadoop的历史
Hadoop起源于Apache Nutch项目,始于2002年,是Apache Lucene的子项目之一 [2]。2004年,Google在“操作系统设计与实现”(Operating System Design and Implementation,OSDI)会议上公开发表了题为MapReduce:Simplified Data Processing on Large Clusters(Mapreduce:简化大规模集群上的数据处理)的论文之后,受到启发的Doug Cutting等人开始尝试实现MapReduce计算框架,并将它与NDFS(Nutch Distributed File System)结合,用以支持Nutch引擎的主要算法 [2]。由于NDFS和MapReduce在Nutch引擎中有着良好的应用,所以它们于2006年2月被分离出来,成为一套完整而独立的软件,并被命名为Hadoop。到了2008年年初,hadoop已成为Apache的顶级项目,包含众多子项目,被应用到包括Yahoo在内的很多互联网公司
Hadoop的特点
Hadoop的生态系统
Hadoop生态系统是大数据的核心,同时,Hadoop也是大量工具的合集。它们一起协同完成特定的任务,组成Hadoop的生态圈,在这里,我要讲的是Hadoop生态系统的版本为2.X,如上图所示。
HDFS是Hadoop生态系统的核心组成部分之一,它是一个分布式文件系统,用于存储和管理大规模数据集。HDFS的设计目标是提供高吞吐量的数据访问,适合处理超大规模数据集。它通过将数据分块并分布在集群中的多个节点上来实现数据的分布式存储,同时提供数据复制和容错机制以确保数据的安全性和可靠性。
MapReduce是Hadoop的另一个核心组件,它是一种编程模型和执行环境,用于处理和分析大规模数据集。MapReduce将复杂的数据处理任务分解为两个主要阶段:Map阶段和Reduce阶段。在Map阶段,系统将数据划分为多个子集,并在集群中的节点上并行处理这些子集。在Reduce阶段,系统对Map阶段的结果进行汇总和合并,生成最终的处理结果。这种并行处理的方式大大提高了数据处理的速度和效率。
YARN是Hadoop 2.0中引入的一个新的资源管理系统,它负责集群资源的调度和管理。YARN将资源管理和应用程序管理分离,使得Hadoop集群能够同时运行多种类型的应用程序。YARN通过引入一个全局的资源管理器(ResourceManager)和多个节点管理器(NodeManager)来实现对集群资源的统一管理和调度。ResourceManager负责接收来自应用程序的任务请求,并根据集群的资源状况进行任务调度和分配。NodeManager则负责在节点上启动和管理任务执行容器(Container),确保任务能够顺利执行。
Hive是一个构建在Hadoop上的数据仓库工具,它提供了类似SQL的查询语言HQL,使得用户能够方便地进行数据分析和查询。Hive将结构化数据存储在HDFS中,并通过MapReduce进行计算。它使得数据分析和处理变得更加简单和直观,尤其适合那些熟悉SQL但不熟悉Java编程的数据分析师和数据科学家。
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,它运行在HDFS上,提供了高可靠性、高性能、列存储、可伸缩、实时读写等特性。HBase利用Hadoop的HDFS作为其底层的存储支持,利用Hadoop的MapReduce来处理HBase中的海量数据,从而提供高并发读写服务的能力。
此外,Hadoop生态系统还不断扩展和演进,新的工具和组件不断涌现,以满足不同领域和场景的需求。这些工具和组件的协同工作,使得Hadoop生态系统成为了一个强大而灵活的平台,能够处理和分析各种规模的数据集,为数据驱动的业务决策提供了有力的支持。
总的来说,Hadoop的生态系统是一个庞大而复杂的集合,它提供了丰富的功能和工具,使得用户可以轻松地构建和部署分布式应用程序,以处理和分析大规模数据。随着技术的不断发展,Hadoop生态系统将继续扩展和完善,为更多领域和场景提供强大的数据处理和分析能力。
Oozie是一个Java Web应用程序,运行在Java Servlet容器中,用于管理Hadoop作业的工作流。它使用数据库来存储工作流定义以及当前运行的工作流实例的状态和变量。Oozie工作流是通过放置在控制依赖DAG中的一组动作来定义的,这些动作包括Hadoop的Map/Reduce作业、Pig作业等,并指定了它们执行的顺序。
在Hadoop生态圈中,Mahout起到了提供可扩展机器学习算法实现的重要作用。它帮助开发人员更加方便快捷地创建智能应用程序,通过利用Hadoop的分布式计算框架,Mahout将原本运行于单机上的机器学习算法转化为了MapReduce模式,从而提升了算法可处理的数据量和处理性能。这使得Mahout能够有效地扩展到云中,利用云计算的优势进行大规模数据处理和分析。
在Hadoop的生态圈中,Apache Spark担当着至关重要的角色。作为一个快速、通用的大规模数据处理引擎,Spark补充并扩展了Hadoop的能力,为用户提供了更为强大和灵活的数据处理工具。
Apache Flink是一个开源的流处理框架,其核心是一个用Java和Scala编写的分布式流数据流引擎,以对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。
Flink的出现代表了数据处理技术的进步。作为第三代大数据引擎(第一代为Hadoop,第二代为Spark),Flink在实时计算方面有着显著的优势。虽然其设计初衷是为实时计算而设计,但由于其计算引擎的强大,也可以进行离线计算
Zookeeper是一个开源的分布式协调服务,其设计目标是将那些复杂的且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一些简单的接口提供给用户使用。它主要为分布式应用提供协调服务,确保在分布式系统中的各个部分能够协同工作。
在Zookeeper中,并没有沿用传统的Master/Slave概念,而是引入了Leader、Follower、Observer三种角色。其中,Leader是领导者,负责进行投票的发起和决议,更新系统状态;Follower是跟随者,用于接收客户端请求并转发给Leader,在选举过程中参与投票;Observer是观察者,可以接收客户端请求并转发给Leader,但不参与投票过程,通常用于提高读取性能。
这里我选择下载的是一个Linux中的免安装版本,大家可根据自己的需求选择版本,但一定要选择各组件相互兼容的版本。
以上安装包,选择自己需要的版本下载即可
我使用的主机、从机名称分别为BigData01,BigData02,BigData03,Jdk版本为jdk-8u171, Hadoop版本为hadoop-2.7.5,zookeeper版本为zookeeper-3.4.5,解压到opt下,如有主机从 机名称,ip,版本,路径与我不一致的,更改成自己的即可。zookeeper我会在高可用中配置, 其他两种直接套即可。
- #将下载的压缩包上传到Downloads中并解压到opt下
-
- tar -zxvf /root/Downloads/hadoop-2.7.5.tar.gz -C /opt/
- tar -zxvf /root/Downloads/jdk-8u171-linux-x64.tar.gz -C /opt/
-
-
- vim /etc/profile
- #在配置文件结尾添加以下内容
- export JAVA_HOME=/opt/jdk1.8.0_171
- export HADOOP_HOME=/opt/hadoop-2.7.5
- export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-
- #刷新配置文件
- source /etc/profile
-
- #查看java jdk、hadoop是否可用
- java -version
- hadoop version
先将主机关机,克隆两个从机(右击主机虚拟机 > 管理 > 克隆)
- vim /etc/hosts
- #配置hosts文件,删除原有内容,添加主机从机名称和ip地址(ifconfig查看)
- 192.168.67.128 BigData01
- 192.168.67.129 BigData02
- 192.168.67.130 BigData03
- scp /etc/hosts/ root@BigData02:/etc
- scp /etc/hosts/ root@BigData03:/etc
-
-
-
- #配置ssh免密登录
- ssh-keygen -t rsa
- cd ~/.ssh/
- cat ./id_rsa.pub >> ./authorized_keys
- scp ./authorized_keys root@BigData02:/.ssh
- scp ./authorized_keys root@BigData03:/.ssh
- ssh-copy-id s1的ip
- ssh-copy-id s1的ip
-
自此,选择跟着一搭建就是伪分布式,跟着二搭建就是完全分布式
-
- vim /opt/hadoop-2.7.5/etc/hadoop/hadoop-env.sh
- #在文件结尾添加下面代码
- export JAVA_HOME=/opt/jdk1.8.0_171
-
-
-
- vim /opt/hadoop-2.7.5/etc/hadoop/core-site.xml
- #在<configuration></configuration>里添加下面代码
-
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://BigData01:9000</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>file:/opt/hadoop-2.7.5/tmp</value>
- </property>
-
-
-
- vim /opt/hadoop-2.7.5/etc/hadoop/hdfs-site.xml
- #在<configuration></configuration>里添加下面代码
-
- <property>
- <name>ds.replication</name>
- <value>1</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>file:/opt/hadoop-2.7.5/tmp/dfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>file:/opt/hadoop-2.7.5/tmp/dfs/data</value>
- </property>
-
-
-
- cd /opt/hadoop-2.7.5/sbin
- hdfs namenode -format
- ./start-all.sh
- jps
-
- #主机出现NameNode,Datanode即成功
- vim /opt/hadoopHA/etc/hadoop/hadoop-env.sh
- #在文件末尾添加下面代码
- export JAVA_HOME=/opt/jdk1.8.0_171
-
-
-
- vim /opt/hadoop-2.7.5/etc/hadoop/core-site.xml
- #在<configuration></configuration>里添加下面代码
-
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://BigData01:9000</value>
- </property>
- <property>
- <name>io.file.buffer.size</name>
- <value>131072</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>file:/opt/hadoop-2.7.5/tmp</value>
- </property>
-
-
-
-
- vim /opt/hadoop-2.7.5/etc/hadoop/hdfs-site.xml
- #在<configuration></configuration>里添加下面代码
-
- <property>
- <name>dfs.replication</name>
- <value>3</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>file:/opt/hadoop-2.7.5/tmp/dfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>file:/opt/hadoop-2.7.5/tmp/dfs/data</value>
- </property>
-
-
-
-
- vim /opt/hadoop-2.7.5/etc/hadoop/yarn-site.xml
- #在<configuration></configuration>里添加下面代码
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>BigData01</value>
- </property>
-
-
-
-
- cd /opt/hadoop-2.7.5/etc/hadoop
- cp mapred-site.xml.template mapred-site.xml
- vim /opt/hadoop-2.7.5/etc/hadoop/mapred-site.xml
- #在<configuration></configuration>里添加下面代码
-
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
-
-
-
- scp -r /opt/hadoop-2.7.5/ root@BigData02:/opt/
- 输入 yes
-
- scp -r /opt/hadoop-2.7.5/ root@BigData03:/opt/
- 输入 yes
-
- cd /opt/hadoop-2.7.5/sbin
- hdfs namenode -format
- start-all.sh
- #三个节点分别jps
- jps
-
-
- #主机上出现NodeManager、NameNode、ResourceManager、DataNode
- 从机1出现NodeManager、SecondaryNameNode、DataNode
- 从机2出现DataNode、NodeManager
- 即配置成功
-
-
- tar zxvf /root/Downloads/jdk-8u171-linux-x64.tar.gz -C/opt/
- tar zxvf /root/Downloads/zookeeper-3.4.5.tar.gz -C/opt/
- tar zxvf /root/Downloads/hadoop-2.7.5.tar.gz -C/opt/
-
- vim /etc/profile
- export JAVA_HOME=/opt/jdk1.8.0_171
- export HADOOP_HOME=/opt/hadoopHA
- export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-
- export ZOOKEEPER_HOME=/opt/zookeeper
- export PATH=$PATH:$ZOOKEEPER_HOME/bin
-
- mv /opt/zookeeper-3.4.5/ /opt/zookeeper
- mv /opt/hadoop-2.7.5/ /opt/hadoopHA
-
- cd /opt/zookeeper
- mkdir data && mkdir logs
-
- #克隆BigData02,BigData03
-
- vim /etc/hosts
- 192.168.67.128 BigData01
- 192.168.67.129 BigData02
- 192.168.67.130 BigData03
- #(根据实际ip改变)
- scp -r /etc/hosts @BigData02:/etc/
- scp -r /etc/hosts @BigData03:/etc/
- #(接yes和密码)
-
- #免密登录
- ssh-keygen -t rsa
- cd ~/.ssh/
- cat ./id_rsa.pub >> ./authorized_keys
- scp ./authorized_keys root@BigData02:/.ssh
- scp ./authorized_keys root@BigData03:/.ssh
-
- ssh-copy-id BigData02
- ssh-copy-id BigData03
-
-
- echo 1 > /opt/zookeeper/data/myid
- cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg
-
- vim /opt/zookeeper/conf/zoo.cfg
- 修改dataDir=/opt/zookeeper/data
- 末尾添加:
- server.1=BigData01:2888:3888
- server.2=BigData02:2888:3888
- server.3=BigData03:2888:3888
-
- scp -r /opt/zookeeper root@BigData02:/opt/
- scp -r /opt/zookeeper root@BigData03:/opt/
-
- 02虚拟机下:echo 2 > /opt/zookeeper/data/myid
- 03虚拟机下:echo 3 > /opt/zookeeper/data/myid
-
-
- 三个节点下:
- systemctl stop firewalld.service
- zkServer.sh start
- zkServer.sh status
-
- cd /opt/hadoopHA/
- mkdir tmp
- scp -r /opt/hadoopHA/tmp @BigData02:/opt/hadoopHA/
- scp -r /opt/hadoopHA/tmp @BigData03:/opt/hadoopHA/
-
- vim /opt/hadoopHA/etc/hadoop/hadoop-env.sh
- #在文件末尾添加下面代码
- export JAVA_HOME=/opt/jdk1.8.0_171
-
-
-
- vim /opt/hadoopHA/etc/hadoop/core-site.xml
- #在<configuration></configuration>里添加下面代码
- <property>
- <!--指定HDFS的通信地址-->
- <name>fs.defaultFS</name>
- <value>hdfs://ns1</value>
- </property>
- <property>
- <!--指定hadoop运行时产生文件的存储路径(即临时目录)-->
- <name>hadoop.tmp.dir</name>
- <value>/opt/hadoopHA/tmp</value>
- </property>
- <property>
- <!--指定ZooKeeper地址(2181端口参考zoo.cfg配置文件) -->
- <name>ha.zookeeper.quorum</name>
- <value>BigData01:2181,BigData02:2181,BigData03:2181</value>
- </property>
-
-
-
-
- vim /opt/hadoopHA/etc/hadoop/hdfs-site.xml
- #在<configuration></configuration>里添加下面代码
- <property>
- <!--指定HDFS的nameservices为ns1,需要与core-site.xml保持一致-->
- <name>dfs.nameservices</name>
- <value>ns1</value>
- </property>
- <property>
- <!--ns1下面设置2个NameNode,分别是nn1,nn2-->
- <name>dfs.ha.namenodes.ns1</name>
- <value>nn1,nn2</value>
- </property>
-
- <property>
- <!--设置nn1的RPC通信地址-->
- <name>dfs.namenode.rpc-address.ns1.nn1</name>
- <value>BigData01:9000</value>
- </property>
- <property>
- <!--设置nn1的http通信地址-->
- <name>dfs.namenode.http-address.ns1.nn1</name>
- <value>BigData01:50070</value>
- </property>
-
- <property>
- <!--设置nn2的RPC通信地址-->
- <name>dfs.namenode.rpc-address.ns1.nn2</name>
- <value>BigData02:9000</value>
- </property>
- <property>
- <!--设置nn2的http通信地址-->
- <name>dfs.namenode.http-address.ns1.nn2</name>
- <value>BigData02:50070</value>
- </property>
-
- <property>
- <!--设置NameNode的元数据在JournalNode上的存放位置-->
- <name>dfs.namenode.shared.edits.dir</name>
- <value>qjournal://BigData01:8485;BigData02:8485;BigData03:8485/ns1</value>
- </property>
- <property>
- <!--指定JournalNode存放edits日志的目录位置-->
- <name>dfs.journalnode.edits.dir</name>
- <value>/opt/hadoopHA/tmp/dfs/journal</value>
- </property>
-
- <property>
- <!--开启NameNode失败自动切换-->
- <name>dfs.ha.automatic-failover.enabled</name>
- <value>true</value>
- </property>
- <property>
- <!--配置失败自动切换实现方式-->
- <name>dfs.client.failover.proxy.provider.ns1</name>
- <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
- </property>
- <property>
- <!--配置隔离机制-->
- <name>dfs.ha.fencing.methods</name>
- <value>sshfence</value>
- </property>
- <!--设置使用隔离机制时需要的SSH免登录-->
- <property>
- <name>dfs.ha.fencing.ssh.private-key-files</name>
- <value>/home/hadoop/.ssh/id_rsa</value>
- </property>
-
-
-
-
-
- vim /opt/hadoopHA/etc/hadoop/yarn-site.xml
- #在<configuration></configuration>里添加下面代码
- <property>
- <!--设置resourcemanager在哪个节点上-->
- <name>yarn.resourcemanager.hostname</name>
- <value>BigData01</value>
- </property>
- <property>
- <!--Reducer取数据的方法是mapreduce_shuffle-->
- <!--指定nodemanager启动时加载server的方式-->
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
- <value>org.apache.hadoop.mapred.ShuffleHandler</value>
- </property>
-
-
-
-
- cd /opt/hadoopHA/etc/hadoop
- cp mapred-site.xml.template mapred-site.xml
- cd
- vim /opt/hadoopHA/etc/hadoop/mapred-site.xml
-
- <property>
- <!--指定MR(mapreduce)框架使用YARN方式-->
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
-
-
-
- vim /opt/hadoopHA/etc/hadoop/slaves
- BigData01
- BigData02
- BigData03
-
-
- scp -r /opt/hadoopHA root@BigData02:/opt/
- scp -r /opt/hadoopHA root@BigData03:/opt/
-
-
- 三个节点启动zookeeper,查看状态
- zkServer.sh start
- zkServer.sh status
- jps查看进程
- hadoop-daemon.sh start journalnode
-
-
- 主节点下:
- hdfs namenode -format
- scp -r /opt/hadoopHA/tmp/dfs @BigData02:/opt/hadoopHA/tmp/
- hadoop-daemon.sh start namenode
- 另外一个namenode节点下(从节点1):
- hdfs namenode -bootstrapStandby
- hadoop-daemon.sh start namenode
-
-
- 主节点下:
- hdfs zkfc -formatZK 格式化
- 启动服务:
- start-dfs.sh
- start-yarn.sh
- 查看进程:
- jps
-
-
- jps下
- BigData01 -- NameNode、DataNode、NodeManager、ResourceManager、
- JournalNode、QuorumPeerMain、DFSZKFailoverController
-
- BigData02 -- NameNode、DataNode、NodeManager、
- JournalNode、QuorumPeerMain、DFSZKFailoverController
-
- BigData03 -- DataNode、NodeManager、
- JournalNode、QuorumPeerMain
- 即可安装成功
-
-
- 关机前关闭集群服务:
- stop-yarn.sh
- stop-dfs.sh
-
-
- 浏览器打开查看
- http://192.168.67.130:50070/
- http://192.168.67.128:50070
- 根据实际ip地址查看
总结:虽然Hadoop比HPCC来说,有强大的生态系统、广泛的行业认可、可扩展性和灵活性以及成本效益等方面的优势,但选择适合的大数据处理和分析工具时,应根据具体的需求、数据规模、处理速度要求以及资源限制等因素进行综合考虑。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。