Hadoop简介及安装

在这里插入图片描述

简介

Hadoop是Apache的顶级项目,是一个可靠的、可扩展的、分布式计算的开源项目。
创始人:Doug Cutting 和Mike
Hadoop起源: 2004年Doug Cutting和Mike Cafarella在设计搜索引擎Nutch的时候 ,利用通用爬虫爬取了互联网上的数据,获取了大概10亿个网页数据 ,因为互联网的数据大多数是非结构化的,就意味着这些数据无法存储到数据库中。为了解决这些数据的存储问题,Doug发现了Google在2003年发表的一片关于集群系统存储的论文:《Google File System》,于是基于《Google File System》设计了NDFS - Nutch Distributed File System解决了Nutch的存储问题。
在这期间Doug还发现了Google在2003年发表的另一篇关于集群系统计算的论文:《Google MapReduce》,这篇论文讲述了Google分布式系统的中的计算问题,Doug根据这篇论文又设计了MapReduce。–后续会讲MapReduce
从Nutch0.8版本开始,就将NDFS和MapReduce模块独立出来成为了Hadoop,并且将NDFS更名为HDFS–Hadoop Distribute File System。
2008年,Doug携带Hadoop去了Yahoo,在Yahoo的工作期间,Doug先后设计了Hive,Pig,HBase, 后来Yahoo将Hadoop、Hive、Pig、HBase等贡献给了Apache。
Hadoop名字的起源: Doug Cutting如此解释Hadoop的得名:“这个名字是我孩子给一头吃饱了的棕黄色大象命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子是这方面的高手,Google就是由小孩命名的。”
下面来膜拜一下大神“狗哥”:
在这里插入图片描述
Hadoop的版本说明

  1. Hadoop1.0:只包含HDFS以及MapReduce两个模块
  2. Hadoop2.0:完全不同于1.0的架构,包含HDFS、MapReduce以及Yarn三个模块
  3. Hadoop3.0:包含HDFS、MapReduce、Yarn以及Ozone四个模块

Hadoop的模块说明

  1. HDFS:用于分布式环境下数据的存储
  2. Yarn:Hadoop2.0版本中出现,用于进行资源管理和任务调度的框架
  3. MapReduce:用于在海量数据的场景下进行并行计算
  4. Ozone:基于HDFS进行对象的存储

Hadoop的安装方式

下载地址:https://hadoop.apache.org/releases.html

  1. 单机安装,除了MapReduce模块以外,其他的都不能使用。
  2. 伪分布式安装,利用一台主机模拟Hadoop的运行环境,可以使用Hadoop的所有模块。
  3. 全分布式安装,在真正的集群上去安装Had。

伪分布式的安装
首先要安装JDK
4. 关闭防火墙 :service iptables stop
5. 修改主机名:
1)vim /etc/sysnconfig/network
更改HOSTNAME,例如:HOSTNAME=hadoop01
2)source /etc/sysconfig/network
6. 更改hosts文件:vim /etc/hosts
添加 ip 主机名 ,例如:192.168.60.132 hadoop01
7. 配置免密互通:
1)ssh-keygen
2)ssh-copy-id 用户名@主机地址,例如:ssh-copy-id root@hadoop01
8. 重启server: reboot
9. 解压Hadoop的安装包: tar -xvf hadoop-2.7.1_64bit.tar.gz
10. 进入安装目录下的子目录etc下的子目录hadoop: cd hadoop-2.7.1/etc/hadoop
11. 编辑hadoop-env.sh : vim hadoop-env.sh
12. 将JAVA_HOME替换为具体的jdk安装目录, 例如:export JAVA_HOME=/home/preSoftware/jdk1.8
13. 将HADOOP_CONF_DIR替换为具体的Hadoop的配置目录。例如:
export HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop
14. 重新生效 hadoop-env.sh:source hadoop-env.sh
15. 编辑core-site.xml :vim core-site.xml,添加内容

<!-- 指定HDFS中的管理节点 -->
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定存储位置 -->
<property>
 <name>hadoop.tmp.dir</name>
 <value>/home/software/hadoop-2.7.1/tmp</value>
</property> 

  1. 编辑hdfs-site.xml :vim hdfs-site.xml,添加内容
<!-- hdfs中的复本数量 -->
<!-- 在伪分布式中,复本数量必须为1 -->
<property>
 <name>dfs.replication</name>
 <value>1</value>
</property>
  1. 将mapred-site.xml.template复制为mapred-site.xml:
    cp mapred-site.xml.template mapred-site.xml
    编辑mapred-site.xml :vim mapred-site.xml,添加内容:
<!-- 在Hadoop的2.0版本中,MapReduce是基于Yarn运行 -->
<property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property>
  1. 配置yarn-site.xml :vim yarn-site.xml,添加内容
<property>
 <name>yarn.resourcemanager.hostname</name>
 <value>hadoop01</value>
</property>
<property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
</property>
  1. Hadoop本身是主从结构,配置slaves指定从节点:
    vim slaves
    添加从节点的地址
  2. 配置环境变量:vim /etc/profile,添加:
    export HADOOP_HOME=/home/software/hadoop-2.7.1
    export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin:$HADOOP_HOME/sbin
    并重新生效:source /etc/profile
  3. 格式化数据目录: hadoop namenode -format
    在这里插入图片描述
  4. 启动hadoop: start-all.sh,用jps查看进程
    在这里插入图片描述
  5. 如果启动成功,可以在浏览器中输入安装Hadoop的ip:50070访问hadoop的页面,
    例如: 192.168.131:50070

全分布式安装(我用三台server做示例)
首先所有server都要安装有jdk,全分布式安装的前面步骤和伪分布式差不多,只是一些配置文件配置内容不一样,而且全分布式安装前还需要每台server都安装Zookeeper。
1.关闭防火墙
2.修改主机名,在Hadoop集群中,主机名中不允许出现 _ 以及 - ,如果出现会导致找不到这台主机。
3.修改hosts文件进行映射
4.配置免密登录
产生秘钥:ssh-keygen
进行复制:ssh-copy-id 用户名@主机
1.重启节点
2.安装Zookeeper,启动Zookeeper
3.安装hadoop
1)编辑hadoop-env.sh (参考伪分布式)
2)编辑core-site.xml

<!--fs集群的nameservice,为整个集群起一个别名-->
<property>
    <name>fs.defaultFS</name>        
    <value>hdfs://ns</value>
</property>
<!--指定Hadoop数据临时存放目录-->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/software/hadoop-2.7.1/tmp</value>
</property>
<!--指定zookeeper的存放地址-->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>

3)编辑hdfs-site.xml

<!--执行hdfs的nameservice为ns,注意要和core-site.xml中的名称保持一致-->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!--ns集群下有两个namenode,分别为namenode起名字:nn1, nn2-->
<!--dfs.ha.namenodes.ns - ns是hdfs集群的名字-->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!--nn1的RPC通信-->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop01:9000</value>
</property>
<!--nn1的http通信-->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop02:50070</value>
</property>
<!--指定namenode的元数据在JournalNode上存放的位置,这样,namenode2可以从journalnode集群里的指定位置上获取信息,达到热备效果-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/software/hadoop-2.7.1/tmp/journal</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns</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>/root/.ssh/id_rsa</value>
</property>
<!--配置namenode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>  
<name>dfs.namenode.name.dir</name>  
<value>file:///home/software/hadoop-2.7.1/tmp/hdfs/name</value>  
</property>  
<!--配置datanode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下-->
<property>  
<name>dfs.datanode.data.dir</name>  
<value>file:///home/software/hadoop-2.7.1/tmp/hdfs/data</value>  
</property>
<!--配置复本数量-->  
<property>  
<name>dfs.replication</name>  
<value>3</value>  
</property> 
<!--设置用户的操作权限,false表示关闭权限验证,任何用户都可以操作-->               
<property>  
<name>dfs.permissions</name>  
<value>false</value>  
</property>

4)编辑mapred-site.xml

<!-- 在Hadoop的2.0版本中,MapReduce是基于Yarn运行 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>

5)编辑yarn-site.xml

<!--配置yarn的高可用-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--指定两个resourcemaneger的名称-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!--配置rm1的主机-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<!--配置rm2的主机-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop03</value>
</property>
<!--开启yarn恢复机制-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--执行rm恢复机制实现类-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--配置zookeeper的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!--执行yarn集群的别名-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>ns-yarn</value>
</property>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>  
<name>yarn.nodemanager.aux-services</name>  
<value>mapreduce_shuffle</value>  
</property> 
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>

6)编辑slaves
hadoop01
hadoop02
hadoop03
7)配置环境变量
export HADOOP_HOME=/home/software/hadoop-2.7.1
export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin:$HADOOP_HOME/sbin
7)将节点1中的配置文件拷贝给其它节点,然后在其它节点上配置环境变量
如:scp -r hadoop-2.7.1 hadoop02:/home/software/
8)创建指定的目录
cd hadoop-2.7.1/
mkdir tmp
cd tmp
mkdir journal
mkdir hdfs
cd hdfs/
mkdir data
mkdir name
9)在节点上分别启动journalnode:hadoop-daemon.sh start journalnode
格式化第一个节点:hadoop namenode -format
启动第一个节点的namenode:hadoop-daemon.sh start namenode
格式化第二个节点上的namenode:hdfs namenode -bootstrapStandby
启动第二个点的namenode:hadoop-daemon.sh start namenode
在三个节点上分别启动datanode:hadoop-daemon.sh start datanode
在第一个节点和第二个节点上启动zkfc实现状态的切换:hadoop-daemon.sh start zkfc
在第一个节点上启动yarn : start-yarn.sh
在第三个节点上启动resourcemanager:yarn-daemon.sh start resourcemanger
到这里完全分布式安装就完成了,如果在启动过程中出现问题,一般在网上都能搜索到解决方案!!!
以上内容如果有大神发现错误之处还请多多指教,在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值