Centos7 Hadoop分布式集群安装

简介: 目前,hadoop已经演变为大数据计算的代名词,形成了一套完善的大数据计算的生态系统,所以针对hadoop也出现了很多版本

hadoop版本介绍


目前,hadoop已经演变为大数据计算的代名词,形成了一套完善的大数据计算的生态系统,所以针对hadoop也出现了很多版本


Apache hadoop 官方版本


Cloudera hadoop(CDH) 使用下载最多的版本,稳定,有商业支持(收费),在Apache的基础上打上了一些patch。


推荐使用。 HortonWorks(HDP) 基于Apache的版本进行了集成,结合Ambari可以实现平台化快速安装部署。

hadoop组件介绍


hadoop是一个统称,目前hadoop主要包含三大组件

  1. hdfs:是一个分布式存储框架,适合海量数据存储
  2. mapreduce:是一个分布式计算框架,适合海量数据计算
  3. yarn:是一个资源调度平台,负责给计算框架分配计算资源

20210729134532322.png

hdfs架构分析


负责数据的分布式存储

       主从结构

                主节点,最多可以有2个:namenode

                从节点,有多个:datanode

namenode负责


接收用户操作请求,是用户操作的入口 维护文件系统的目录结构,称作命名空间

datanode负责


存储数据

yarn架构分析


20210729134831379.png

mapreduce架构分析


mapreduce是一个编程模型,它是分布式运行的


由两个阶段组成:

  1. Map和Reduce Map阶段是一个独立的程序,有很多个节点同时运行,每个节点处理一部分数据。
  2. Reduce阶段也是一个独立的程序,在这先把reduce理解为一个单独的聚合程序即可。

hadoop特点


  1. 扩容能力(Scalable):能可靠(reliably)地存储和处理PB级别的数据。如果数据量更大,存储不下了,再增加节点就可以了。
  2. 成本低(Economical):可以通过普通机器组成的服务器集群来分发以及处理数据.这些服务器集群可达数千个节点。
  3. 高效率(Efficient):通过分发计算程序,hadoop可以在数据所在节点上(本地)并行地(parallel)处理他们,这使得处理非常的迅速
  4. 可靠性(Reliable):hadoop能够自动地维护数据的多份副本,并且在任务失败后能够自动地重新部署(redeploy)计算任务.

hadoop生态圈介绍


20210729160643195.png

服务器节点规划


20210729161104390.png

hadoop安装脚本


集群节点规划
hadoop100
hadoop101
hadoop102
实现一主两从的集群
hadoop100:主节点[nameNode,resourceManager,secondaryNamenode]
hadoop101:从节点[dataNode,nodeManager]
hadoop102:从节点[dataNode,nodeManager]
1:首先需要对这三台机器的基础环境进行配置,按照伪分布集群的机器的基础环境进行配置
hadoop100的基础环境已经配置完成
主要针对hadoop101 和hadoop102进行配置
针对ip、java、hostname、hosts、iptables、chkconfig、ssh、免密码登录这几个配置,按照伪分布文档中的配置进行修改
【注意:ip信息不能和之前的一样】
注意:针对hosts的配置,这三台机器都需要修改
vi /etc/hosts
192.168.56.10 hadoop100
192.168.56.11 hadoop101
192.168.56.12 hadoop102
2:免密码登录:需要实现主节点免密登录到其他两个从节点
也就是hadoop100需要免密登录到hadoop101和hadoop102
首先在hadoop100上执行
scp ~/.ssh/authorized_keys   hadoop101:~/
scp ~/.ssh/authorized_keys   hadoop102:~/
然后在hadoop101和hadoop102上执行
cat ~/authorized_keys  >> ~/.ssh/authorized_keys
3:集群各个节点的时间需要同步
使用ntpdate -u ntp.sjtu.edu.cn实现
默认是没有ntpdate命令的,需要使用yum在线安装
执行命令 yum install -y ntpdate
然后手动执行ntpdate -u ntp.sjtu.edu.cn 确认是否可以正常执行
Centos下如果时间不正确则需要设定一下时区.
soft]# ntpdate -u ntp.sjtu.edu.cn
29 Jul 00:52:13 ntpdate[2676]: adjust time server 84.16.73.33 offset -0.012444 sec
soft]#
soft]# date
Thu Jul 29 00:52:18 UTC 2021
soft]#
soft]# timedatectl set-timezone Asia/Shanghai
soft]#
soft]# date
Thu Jul 29 08:52:22 CST 2021
4:建议吧这个同步时间的操作写到linux的crontab定时器中[三台机器都需要添加]
vi /etc/crontab
* * * * * /usr/sbin/ntpdate -u ntp.sjtu.edu.cn
5:重新安装hadoop集群
首先在hadoop100上安装hadoop
5.1:解压:tar -zxvf hadoop-2.7.5.tar.gz
5.2: 修改配置文件
vi hadoop-env.sh
export JAVA_HOME=/data/soft/jdk1.8
export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop
export HADOOP_CONF_DIR=/data/soft/hadoop-2.7.5/etc/hadoop/
vi yarn-env.sh
export JAVA_HOME=/data/soft/jdk1.8
export YARN_LOG_DIR=/data/hadoop_repo/logs/yarn
vi core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop100:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop_repo</value>
   </property>
</configuration>
vi hdfs-site.xml
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop100:50090</value>
  </property>
</configuration>
vi yarn-site.xml
<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop100</value>
  </property> 
</configuration>
mv mapred-site.xml.template  mapred-site.xml
vi mapred-site.xml
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
vi slaves
hadoop101
hadoop102
5.3 把hadoop100节点上的修改之后的hadoop拷贝到其他两个从节点
在hadoop100节点上执行
cd /data/soft/
scp -rq hadoop-2.7.5 hadoop101:/data/soft/
scp -rq hadoop-2.7.5 hadoop102:/data/soft/
5.4 在hadoop100节点上对hdfs进行格式化
hdfs namenode -format
5.5 启动集群
在hadoop100节点执行
cd /data/soft/hadoop-2.7.5
sbin/start-all.sh
二〇二一年七月二十九日 10:42:42 启动报错: 
Cannot find configuration directory: /etc/hadoop
在hadoop环境变量配置中增加(hadoop-env.sh)
 export HADOOP_CONF_DIR=/data/soft/hadoop-2.7.5/etc/hadoop/
5.6 验证
hadoop100 上会看到下面进程信息:
3848 NameNode
4026 SecondaryNameNode
4173 ResourceManager
 hadoop-2.7.5]# jps
25411 ResourceManager
25221 SecondaryNameNode
26136 Jps
没有namenode?
我怀疑是因为hdfs 格式化的时候因为没有配置hadoop_confg_dir 报错。
Hadoop启动之后jps没有namenode节点的解决方法。
需要删除原目录,即core-site.xml下配置的hadoop.tmp.dir所指向的目录,即/data/hadoop_repo
重新hdfs namenode -format,再启动集群即可.
http://hadoop100:50070
http://hadoop100:8088
hadoop101  和 hadoop102  上会看到下面进程信息:
2167 NodeManager
2071 DataNode
5.7 停止集群
在hadoop100节点执行
cd /data/soft/hadoop-2.7.5
sbin/stop-all.sh

20210729161223520.png

目录
相关文章
|
5月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
290 6
|
5月前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
349 4
|
5月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
126 4
|
5月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
62 3
|
5月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
90 3
|
5月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
124 1
|
1月前
|
NoSQL Java 中间件
【📕分布式锁通关指南 02】基于Redis实现的分布式锁
本文介绍了从单机锁到分布式锁的演变,重点探讨了使用Redis实现分布式锁的方法。分布式锁用于控制分布式系统中多个实例对共享资源的同步访问,需满足互斥性、可重入性、锁超时防死锁和锁释放正确防误删等特性。文章通过具体示例展示了如何利用Redis的`setnx`命令实现加锁,并分析了简化版分布式锁存在的问题,如锁超时和误删。为了解决这些问题,文中提出了设置锁过期时间和在解锁前验证持有锁的线程身份的优化方案。最后指出,尽管当前设计已解决部分问题,但仍存在进一步优化的空间,将在后续章节继续探讨。
481 131
【📕分布式锁通关指南 02】基于Redis实现的分布式锁
|
1月前
|
NoSQL Java Redis
Springboot使用Redis实现分布式锁
通过这些步骤和示例,您可以系统地了解如何在Spring Boot中使用Redis实现分布式锁,并在实际项目中应用。希望这些内容对您的学习和工作有所帮助。
177 83
|
5月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
2天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁主要依靠一个SETNX指令实现的 , 这条命令的含义就是“SET if Not Exists”,即不存在的时候才会设置值。 只有在key不存在的情况下,将键key的值设置为value。如果key已经存在,则SETNX命令不做任何操作。 这个命令的返回值如下。 ● 命令在设置成功时返回1。 ● 命令在设置失败时返回0。 假设此时有线程A和线程B同时访问临界区代码,假设线程A首先执行了SETNX命令,并返回结果1,继续向下执行。而此时线程B再次执行SETNX命令时,返回的结果为0,则线程B不能继续向下执行。只有当线程A执行DELETE命令将设置的锁状态删除时,线程B才会成功执行S

热门文章

最新文章