一、概述
- Hadoop是Apache提供的一套开源的、可靠的、可扩展(伸缩)的、用于进行分布式存储和计算的框架
- Hadoop的版本非常混乱
二、发展历程
- 创始人:Doug Cutting和Mike Caferalla
- 在2002年,Doug和Mike设计一套搜索引擎Nutch,爬取了全网的10亿个网页的数据
- 在2003年,Google发表了一篇论文(GFS)阐述了分布式存储的原理,但是Google并没有公开这个框架,Doug根据这篇论文设计实现了NDFS(Nutch Distributed File System)
- 在2004年,Google发表了一篇论文阐述了分布式计算的原理,Doug根据这篇论文设计实现了MapReduce
- 在Nutch0.8版本的时候,将NDFS和MapReduce从Nutch中分离出来形成了Hadoop,将NDFS更名为HDFS
- 在2007年,Doug携带Hadoop入职了Yahoo!
- Doug在雅虎工作期间,主持设计了HBase、Pig等框架
- Yahoo将Hadoop等框架贡献给了Apache
三、模块
- Hadoop Common:基本模块,用于支持其他模块
- Hadoop Distributed Filesytem:分布式存储框架
- Hadoop Yarn:任务调度和集群资源管理
- Hadoop MapReduce:分布式计算
- Hadoop Ozone:对象存储
- Hadoop submarine:机器学习引擎
四、版本
- Hadoop1.0:Common、HDFS、MapReduce
- Hadoop2.0:Common、HDFS、MapReduce、Yarn。Hadoop2.0和Hadoop1.0不兼容
- Hadoop3.0:Common、HDFS、MapReduce、Yarn、Ozone,最新的版本中包含了Submarine
Hadoop伪分布式搭建
- 关闭防火墙
service iptables stop
chkconfig iptables off - 需要修改主机名,要求主机名中没有_和-
vim /etc/sysconfig/network
修改HOSTNAME选项,例如
HOSTNAME=hadoop01
保存退出,重新生效
source /etc/sysconfig/network - 将IP和主机名进行映射:
vim /etc/hosts
添加IP 主机名,例如:
192.168.245.130 hadoop01
保存退出 - 重启
reboot - 产生密钥
ssh-keygen
免密互通
ssh-copy-id root@hadoop01
云主机密码:tarena2017Up; - 安装JDK
- 下载并且解压Hadoop
wget http://bj-yzjd.ufile.cn-north-02.ucloud.cn/hadoop-2.7.1_64bit.tar.gz
tar -xvf hadoop-2.7.1_64bit.tar.gz - 进入hadoop安装的目录的etc/hadoop目录下
cd hadoop-2.7.1/etc/hadoop - 修改hadoop-env.sh
vim hadoop-env.sh
修改:
export JAVA_HOME=/home/presoftware/jdk1.8
export HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop
保存退出,并且重新生效
source hadoop-env.sh - 编辑core-site.xml
vim core-site.xml
添加:
fs.defaultFS
hdfs://hadoop01:9000
hadoop.tmp.dir
/home/software/hadoop-2.7.1/tmp
- 编辑hdfs-site.xml
vim hdfs-site.xml
添加:
dfs.replication
1
- 复制mapred-site.xml.template
cp mapred-site.xml.template mapred-site.xml
编辑mapred-site.xml
vim mapred-site.xml
添加:
mapreduce.framework.name
yarn
- 编辑yarn-site.xml
vim yarn-site.xml
添加:
yarn.resourcemanager.hostname
hadoop01
yarn.nodemanager.aux-services
mapreduce_shuffle
- 编辑slaves文件
vim slaves
添加主机名,例如:
hadoop01 - 配置环境变量
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 - Hadoop第一次启动之前需要格式化:
hadoop namenode -format - 启动Hadoop
start-all.sh
如果启动成功,则通过jps命令,能查看到6个进程:
Jps
NameNode
DataNode
SecondaryNameNode
ResourceManager
NodeManager
可以通过50070以及8088端口访问
错误:
1. 如果少了XXXNode,那么修改core,hdfs,删除hadoop-2.7.1/tmp,然后重新格式化重新启动
2. 如果XXXXManager,那么修改mapred,yarn,重新启动
3. 命令找不到,hadoop-env.sh配置错误,profile配置错了
完全分布式搭建
***** 全部三个节点 *****
- 关闭防火墙
service iptables stop
chkconfig iptables off - 修改主机名,Hadoop主机名中不能出现_和-
vim /etc/sysconfig/network
修改其中的HOSTNAME属性的值,例如HOSTNAME=hadoop01
修改完成之后保存退出,然后需要重新生效
source /etc/sysconfig/network - 需要将主机名和ip进行映射
vim /etc/hosts
添加主机名 IP映射,例如:
192.168.245.130 hadoop01
192.168.245.131 hadoop02
192.168.245.132 hadoop03
注意,改完之后,三个节点中的hosts文件的内容应该是一样的 - 重启
reboot - 三个节点之间配置免密互通
产生密钥
ssh-keygen
拷贝到三个节点上,注意是三个节点每一个节点都需要执行这三句话,保证任意两个节点之间能够免密互通
ssh-copy-id root@hadoop01
ssh-copy-id root@hadoop02
ssh-copy-id root@hadoop03
云主机密码:tarena2017Up;
最好三个节点都ssh连接一下看一下是否需要密码,如果连接不需要密码就能登录,那就表示免密配置成功 - 安装JDK
- 安装Zookeeper
***** 现在第一个节点上配置,然后拷贝给其他节点 ***** - 将伪分布式重命名
mv hadoop-2.7.1 hadoop-standalone - 解压Hadoop的安装包
tar -xvf hadoop-2.7.1_64bit.tar.gz - 进入安装目录的子目录
cd hadoop-2.7.1/etc/hadoop/ - 修改hadoop-env.sh
vim hadoop-env.sh
修改JAVA_HOME和HADOOP_CONF_DIR
export JAVA_HOME=/home/presoftware/jdk1.8
export HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop
保存退出之后重新生效
source hadoop-env.sh - 修改core-site.xml
vim core-site.xml
添加: fs.defaultFS hdfs://ns hadoop.tmp.dir /home/software/hadoop-2.7.1/tmp ha.zookeeper.quorum hadoop01:2181,hadoop02:2181,hadoop03:2181 - 修改hdfs-site.xml
vim hdfs-site.xml
添加: dfs.nameservices ns dfs.ha.namenodes.ns nn1,nn2 dfs.namenode.rpc-address.ns.nn1 hadoop01:9000 dfs.namenode.http-address.ns.nn1 hadoop01:50070 dfs.namenode.rpc-address.ns.nn2 hadoop02:9000 dfs.namenode.http-address.ns.nn2 hadoop02:50070 dfs.namenode.shared.edits.dir qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns dfs.journalnode.edits.dir /home/software/hadoop-2.7.1/tmp/journal dfs.ha.automatic-failover.enabled true dfs.client.failover.proxy.provider.ns org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa dfs.namenode.name.dir file:///home/software/hadoop-2.7.1/tmp/hdfs/name dfs.datanode.data.dir file:///home/software/hadoop-2.7.1/tmp/hdfs/data dfs.replication 3 dfs.permissions false - 编辑mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
添加:
mapreduce.framework.name
yarn
- 编辑yarn-site.xml
vim yarn-site.xml
添加: yarn.resourcemanager.ha.enabled true yarn.resourcemanager.ha.rm-ids rm1,rm2 yarn.resourcemanager.hostname.rm1 hadoop01 yarn.resourcemanager.hostname.rm2 hadoop03 yarn.resourcemanager.recovery.enabled true yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore yarn.resourcemanager.zk-address hadoop01:2181,hadoop02:2181,hadoop03:2181 yarn.resourcemanager.cluster-id ns-yarn yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop03 - 编辑slaves - 这个文件是用于指定DataNode以及NodeManager的节点位置
vim slaves
添加三个节点的名字,例如
hadoop01
hadoop02
hadoop03 - 需要将这个hadoop的安装目录拷贝给其他两个节点
scp -r hadoop-2.7.1 root@hadoop02:/home/software/
scp -r hadoop-2.7.1 root@hadoop03:/home/software/
- 三个节点需要配置环境变量
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 - 三个节点都需要启动Zookeeper
cd /home/software/zookeeper-3.4.7/bin
sh zkServer.sh start
sh zkServer.sh status - 在第一个节点上格式化Zookeeper - 实际上就是在Zookeeper上去注册节点
hdfs zkfc -formatZK - 在全部三个节点上启动JournalNode
hadoop-daemon.sh start journalnode - 在第一个节点上格式化NameNode
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 - 在第一个节点以及第二节点上来启动故障切换进程
hadoop-daemon.sh start zkfc - 在第三个节点上来启动yarn
start-yarn.sh - 在第一个节点上来单独启动resourcemanager
yarn-daemon.sh start resourcemanager - 从第二次启动开始,只需要用start-all.sh即可
如果启动成功,则各个节点的进程分布如下:
第一个节点8个:
Jps
NameNode
DataNode
JournalNode
ResourceManager
NodeManager
DFSZKFailoverController
QuorumPeerMain
第二个节点7个:
Jps
NameNode
DataNode
JournalNode
NodeManager
DFSZKFailoverController
QuorumPeerMain
第三个节点6个:
Jps
DataNode
JournalNode
ResourceManager
NodeManager
QuorumPeerMain
如果发现少了节点,可以试着单独启动一次:
hadoop-daemon.sh start namenode/datanode/journalnode/zkfc
yarn-daemon.sh start resourcemanager/nodemanager