垦利网站定制,提供哈尔滨网站建设服务,北京保障性住房建设投资中心网站,上海综合新闻简介 Hadoop是一个开源的分布式存储和计算框架#xff0c;最初由Apache软件基金会开发。它的发展背景可以追溯到Google的MapReduce和Google File System#xff08;GFS#xff09;的论文#xff0c;这两篇论文启发了Hadoop的设计。Hadoop的主要应用场景包括大数据存…简介 Hadoop是一个开源的分布式存储和计算框架最初由Apache软件基金会开发。它的发展背景可以追溯到Google的MapReduce和Google File SystemGFS的论文这两篇论文启发了Hadoop的设计。Hadoop的主要应用场景包括大数据存储、处理和分析特别是在需要处理海量数据的互联网和企业环境中。它被广泛用于日志分析、数据挖掘、机器学习、图像处理等领域。 Hadoop的生态系统还包括许多相关项目如Hive、HBase、Spark等为大数据处理提供了丰富的工具和技术。 虽然当前提出hadoop的缺点以及弊端但是当前hadoop的全功能性还是能解决大型项目的大多数问题。学习hadoop变较为必要。
安装以及环境配置
hostnameipaddr应用属性vm02:10.0.0.102hadoopjdkzookeeper主节点(DataNode主NameNodeResourceManager)vm03:10.0.0.103hadoopjdkzookeeper从节点(Datanode备用Namenode备ResourceManager)vm04:10.0.0.104hadoopjdkzookeeper从节点(Datanode) 下载JDK、zookeeper以往文章中已经做了解释本文不再累述 hadoop进入官网选择最新版本下载。 wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
解压压缩包
[hadoopvm03 ~]$ tar -zxf hadoop-3.3.6.tar.gz
[hadoopvm03 ~]$ ln -s hadoop-3.3.6 hadoop
[hadoopvm03 ~]$ rm -rf hadoop-3.3.6.tar.gz 设置软连接方便后期hadoop升级做替换
hadoop-env.sh配置 hadoop-env.sh文件主要配置与Hadoop环境相关的变量文件放置在hadoop/etc/hadoop/目录下主要配置jdk的目录。
[hadoopvm03 hadoop]$ echo $JAVA_HOME
/jdk/jdk1.8.0_144/
[hadoopvm03 hadoop]$ vim hadoop-env.sh core-site.xml配置
core-site.xml文件主要配置Hadoop的公有属性用于配置Hadoop核心功能的参数。它包含了Hadoop集群中各个节点共享的核心配置信息如Hadoop文件系统HDFS的默认块大小、默认副本数量、以及其他与文件系统相关的参数。同样位于hadoop/etc/hadoop路径下 !-- core-site.xml --
configuration!-- 指定Hadoop文件系统的默认块大小 --propertynamedfs.blocksize/namevalue134217728/value/property!-- 指定Hadoop文件系统的默认副本数量 --propertynamedfs.replication/namevalue3/value/property !-- 指定hadoop数据的存储目录 --propertynamehadoop.tmp.dir/namevalue/home/hadoop/data/value/property!-- 指定NameNode的地址 --propertynamefs.defaultFS/namevaluehdfs://mycluster/value/property!-- 配置zookeeper管理hdfs --propertynameha.zookeeper.quorum/namevaluevm02:2181,vm03:2181,vm04:2181/value/property
/configurationhdfs-site.xml配置 hdfs-site.xml文件主要配置和HDFS相关的属性 同样位于hadoop/etc/hadoop路径下 !--hdfs-site.xml配置--
configuration
!-- NameNode数据存储目录 --propertynamedfs.namenode.name.dir/namevaluefile://${hadoop.tmp.dir}/name/value/property!-- DataNode数据存储目录 --propertynamedfs.datanode.data.dir/namevaluefile://${hadoop.tmp.dir}/data/value/property!-- JournalNode数据存储目录 --propertynamedfs.journalnode.edits.dir/namevalue${hadoop.tmp.dir}/jn/value/property!-- 完全分布式集群名称 --propertynamedfs.nameservices/namevaluemycluster/value/property!-- 集群中NameNode节点都有哪些 --propertynamedfs.ha.namenodes.mycluster/namevaluenn1,nn2/value/property!-- NameNode的RPC通信地址 --propertynamedfs.namenode.rpc-address.mycluster.nn1/namevaluevm02:8020/value/propertypropertynamedfs.namenode.rpc-address.mycluster.nn2/namevaluevm03:8020/value/property!-- NameNode的http通信地址 --propertynamedfs.namenode.http-address.mycluster.nn1/namevaluevm02:9870/value/propertypropertynamedfs.namenode.http-address.mycluster.nn2/namevaluevm03:9870/value/property!-- 指定NameNode元数据在JournalNode上的存放位置 --propertynamedfs.namenode.shared.edits.dir/name
valueqjournal://vm02:8485;vm03:8485/mycluster/value/property!-- 访问代理类client用于确定哪个NameNode为Active --propertynamedfs.client.failover.proxy.provider.mycluster/namevalueorg.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider/value/property!-- 配置隔离机制即同一时刻只能有一台服务器对外响应 --propertynamedfs.ha.fencing.methods/namevaluesshfence/value/property!-- 使用隔离机制时需要ssh秘钥登录--propertynamedfs.ha.fencing.ssh.private-key-files/namevalue/home/hadoop/.ssh/id_rsa/value/propertypropertynamedfs.ha.automatic-failover.enabled/namevaluetrue/value/property
/configuration mapred-site.xml配置 configurationpropertynamemapreduce.framework.name/namevalueyarn/value/property
/configurationyarn-site.xml配置 configuration!-- ResourceManager连接的最大等待时间毫秒 --propertynameyarn.resourcemanager.connect.max-wait.ms/namevalue2000/value !-- 设置ResourceManager连接的最大等待时间为2000毫秒 --/property!-- 启用ResourceManager的高可用性 --propertynameyarn.resourcemanager.ha.enabled/namevaluetrue/value !-- 启用ResourceManager的高可用性 --/property!-- 启动故障自动恢复 --propertynameyarn.resourcemanager.ha.automatic-failover.enable/namevaluetrue/value !-- 启动故障自动恢复 --/property!-- 启用内嵌式的故障自动恢复 --propertynameyarn.resourcemanager.ha.automatic-failover.embedded/namevaluetrue/value !-- 启用内嵌式的故障自动恢复 --/property!-- 设置ResourceManager所属的集群ID --propertynameyarn.resourcemanager.cluster-id/namevalueyarn-rm-cluster/value !-- 设置ResourceManager所属的集群ID为 yarn-rm-cluster --/property!-- 设置ResourceManager的ID列表 --propertynameyarn.resourcemanager.ha.rm-ids/namevaluerm1,rm2/value !-- 设置ResourceManager的ID列表为 rm1,rm2 --/property!-- 设置ResourceManager节点rm1的主机名 --propertynameyarn.resourcemanager.hostname.rm1/namevaluevm02/value !-- 设置ResourceManager节点rm1的主机名为 vm02 --/property!-- 设置ResourceManager节点rm2的主机名 --propertynameyarn.resourcemanager.hostname.rm2/namevaluevm03/value !-- 设置ResourceManager节点rm2的主机名为 vm03 --/property!-- 启用ResourceManager的状态恢复 --propertynameyarn.resourcemanager.recovery.enabled/namevaluetrue/value !-- 启用ResourceManager的状态恢复 --/property!-- 设置存储ResourceManager状态信息的ZooKeeper地址 --propertynameyarn.resourcemanager.zk.state-store.address/namevaluevm02:2181,vm03:2181,vm04:2181/value !-- 设置存储ResourceManager状态信息的ZooKeeper地址为 vm02:2181,vm03:2181,vm04:2181 --/property!-- 设置ResourceManager节点rm1的地址 --propertynameyarn.resourcemanager.address.rm1/namevaluevm02:8032/value !-- 设置ResourceManager节点rm1的地址为 vm02:8032 --/property!-- 设置ResourceManager节点rm1的调度器地址 --propertynameyarn.resourcemanager.scheduler.address.rm1/namevaluevm02:8034/value !-- 设置ResourceManager节点rm1的调度器地址为 vm02:8034 --/property!-- 设置ResourceManager节点rm1的Web应用地址 --propertynameyarn.resourcemanager.webapp.address.rm1/namevaluevm02:8088/value !-- 设置ResourceManager节点rm1的Web应用地址为 vm02:8088 --/property!-- 设置ResourceManager节点rm2的地址 --propertynameyarn.resourcemanager.address.rm2/namevaluevm03:8032/value !-- 设置ResourceManager节点rm2的地址为 vm03:8032 --/property!-- 设置ResourceManager节点rm2的调度器地址 --propertynameyarn.resourcemanager.scheduler.address.rm2/namevaluevm03:8034/value !-- 设置ResourceManager节点rm2的调度器地址为 vm03:8034 --/property!-- 设置ResourceManager节点rm2的Web应用地址 --propertynameyarn.resourcemanager.webapp.address.rm2/namevaluevm03:8088/value !-- 设置ResourceManager节点rm2的Web应用地址为 vm03:8088 --/property!-- 设置ZooKeeper的地址用于协调ResourceManager的高可用性和故障自动恢复 --propertynameyarn.resourcemanager.zk-address/namevaluevm02:2181,vm03:2181,vm04:2181/value !-- 设置ZooKeeper的地址用于协调ResourceManager的高可用性和故障自动恢复为 vm02:2181,vm03:2181,vm04:2181 --/property!-- 启用日志聚合 --propertynameyarn.log-aggregation-enable/namevaluetrue/value !-- 启用日志聚合 --/property!-- 设置Hadoop使用的ZooKeeper地址 --propertynamehadoop.zk.address/namevaluevm02:2181,vm02:2181,vm02:2181/value !-- 设置Hadoop使用的ZooKeeper地址为 vm02:2181,vm02:2181,vm02:2181 --/property!-- 设置NodeManager的辅助服务 --propertynameyarn.nodemanager.aux-sevices/namevaluemapreduce_shuffle/value !-- 设置NodeManager的辅助服务为 mapreduce_shuffle --/property!-- 设置MapReduce Shuffle服务的类 --propertynameyarn.nodemanager.aux-sevices.mapreduce_shuffle.class/namevalueorg.apache.hadoop.mapred.ShuffleHandle/value !-- 设置MapReduce Shuffle服务的类为 org.apache.hadoop.mapred.ShuffleHandle --/property
/configurationworkers文件配置 workers文件的名称是在hadoop-env.sh 文件中指定的。在 hadoop-env.sh 文件中可以找到一个环境变量 HADOOP_WORKERS它指定了workers 文件的路径。通常情况下HADOOP_WORKERS 的默认值是 ${HADOOP_CONF_DIR}/workers 其中 ${HADOOP_CONF_DIR} 是指向 Hadoop 配置文件目录的环境变量。 注意旧版本这里使用的是slaves [hadoopvm02 ~]$ cd hadoop/etc/hadoop/
[hadoopvm02 hadoop]$ vim workers vm02
vm03
vm04 此文件配置集群中的所有hostname。 注所有节点配置内容保持一致 试运行 启动Zookeeper集群 所有节点都需启动 [hadoopvm03 ~]$ zkServer.sh restart
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoopvm03 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower启动JournalNode集群 在Hadoop中JournalNode集群用于存储NameNode的编辑日志。它们帮助确保在NameNode发生故障时不会丢失数据并支持NameNode的高可用性和故障转移。 JournalNode集群是Hadoop分布式文件系统HDFS的关键组件用于维护持久化的NameNode编辑日志以便在发生故障时进行恢复。 在集群所有节点分别启动JournalNode服务 hadoop/sbin/hadoop-daemon.sh start journalnode [hadoopvm03 ~]$ hadoop/sbin/hadoop-daemon.sh start journalnode
WARNING: Use of this script to start HDFS daemons is deprecated.
WARNING: Attempting to execute replacement hdfs --daemon start instead.
WARNING: /home/hadoop/hadoop-3.3.6/logs does not exist. Creating.
[hadoopvm03 ~]$ jps
7936 JournalNode
7780 QuorumPeerMain
7975 Jps格式化主节点NameNode ## 在vm02节点NameNode主节点上使用以下命令对 NameNode进行格式化
hadoop/bin/hdfs namenode -format
hadoop/bin/hdfs zkfc -formatZK
hadoop/bin/hdfs namenode
##在备用节点vm03进行同步主节点的元数据hadoop/bin/hadoop namenode -bootstrapStandby
##所有节点关闭zookeeper集群
zkServer.sh stop ##所有节点关闭 journalnode集群
hadoop/sbin/hadoop-daemon.sh stop journalnode##所有节点启动zookeeper集群
zkServer.sh start
#主节点vm02启动集群hadoop/sbin/start-all.sh 格式化ZooKeeper中与故障转移控制器Failover Controller相关的数据。这个命令通常在设置故障转移控制器时使用以确保ZooKeeper中的相关数据处于正确的状态。 hadoop/bin/hdfs zkfc -formatZK 所有节点启动zookeeper集群 vm02启动HDFS集群 验证 通过jps查看namenode进程所在节点通过web进行访问 [hadoopvm03 ~]$ jps
1666 QuorumPeerMain
2727 DFSZKFailoverController
2315 DataNode
1820 JournalNode
2125 NameNode
3294 Jps
[hadoopvm03 ~]$ ip addr
1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:f1:d6:3e brd ff:ff:ff:ff:ff:ffinet 10.0.0.103/24 brd 10.0.0.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fef1:d63e/64 scope link valid_lft forever preferred_lft forever打开网页输入以下namenode的ip地址 http://10.0.0.103:9870
http://10.0.0.102:9870 此时namenode节点都是可以通过web节点上线的vm03作为备用节点。