Hadoop的安装配置
Hadoop是一个支持高可用,可拓展的海量数据储存和计算几桶
允许使用简单的编程模型来在大型分布式集群上处理海量数据集
本身可以构建在廉价集群上,不需要硬件上保证高可用,自己在架构设计时就保证了服务的可用性
Hadoop为几个模块:
Hadoop Common:通用文件,为其他模块提供支持
Hadoop HDFS:分布式文件系统,为应用提供高吞吐量的访问
Hadoop YARN:类似k8s,做了集群资源管理
如果集群中有6台服务器,每台服务器的内存各不相同,YARN可以在软件层面实现对每一台服务器的合理的内存资源的分配
YARN还可以实现作业调度
Hadoop MapReduce
主要用于并行处理大数据集
历史
大数据起源于搜索引擎
Google:爬虫、全文检索、海量数据的储存和处理
GFS
:Google File System
doug cutting
(狗哥):当时做的一个搜索引擎:Nutch
,根据谷歌的《Google file system》《MapReduce》,自己设计了lucene
,DFS
,MapReduce
,DFS
和MapReduce
合并成为了Hadoop
雅虎收购了他的所有项目,在学会技术后,捐献给了Apache
Hbase也是他开发的,是在看到谷歌2006年发行的论文:《big table》后开发的,在big table中分为高表和宽表
高表:上亿行数据
宽表:上百万列字段
版本
每个版本相当于一个分支
1.x
包含HDFS和MapReduce
MapReduce是HDFS的上层,必须基于HDFS,同时HDFS也只能用MapReduce处理数据,耦合度非常高
2.x
包含了HDFS、MapReduce,新增了一个YARN
由于这两个耦合度太高了,而且MapReduce只能用Java开发,所以在HDFS和MapReduce中间加入了一个YARN
除此之外,Hadoop还提供了其他的借口,可以为Python等其他语言提供借口,自此,Hadoop才算真正地火起来
2.7-2.9版本是最稳定的
3.x
2017年12月左右发布的
中间计算从shuffle改用了stream,其他和2.x没什么区别
稳定性没有2.0好,但是数据不需要频繁落地
但是市面上已经有SparkSQL了,所以竞争力并不强
作用
假如一个文件的大小是2T,而一台电脑的硬盘大小为1T
我们可以选择提升这台电脑的性能,但是不能无限拓展,成本增长不友好,而且不安全
我们可以通过Hadoop进行分布式储存,分4台电脑,每台电脑读512G的内容
由一台机器保存元数据(描述数据的数据),例如:
1.zip{1.zip.1:2, 1.zip.2:2}
用来记录文件–切块–机器之间的映射关系
这台机器就是NameNode
(老大)
而DataNode
负责保存被切开的文件块,和文件块的基本信息
会出现一个问题:如果某一个DataNode
宕机
优缺点
优点:
可以储存超大文件(无限拓展)
高容错,支持数据丢失自动回复
可以构建在廉价机上面
缺点:
不管文件储存大小,namenode都会都会创建一条元数据,在存放大量小文件的时候,就会产生大量的元数据,对namenode会造成比较大的压力,而DataNode中的空间造成浪费
不支持行级别的增删改(HDFS中的数据是只读的,要删只能删整个文件)
HDFS中存放的数据分为几类,历史数据,爬虫数据,日志等,而这种数据是不需要修改的,行级别增删改会修改某个块的数据,进而影响到后续的块,还有备份也要同时修改,这个太消耗资源
安装
1.单机模式
上传安装包,解压即可,不支持HDFS,YARN,只能用MapReduce的单元测试
2.伪分布式模式
以一台机器的多个进程模拟集群环境,支持Hadoop的所有功能,但是由于机器性能限制,性能比较低(用于学习)
3.完全分布式模式
在生产环境下部署,是Hadoop安装的标准模式
主机配置
免密登录
由于在安装过程中会出现很多次要输入密码的地方,所以需要先做免密登录
在所有服务器上都执行:
ssh-keygen
3次回车不输入任何内容
得到密钥后,在主机执行(如果从机有需要也可以执行):
ssh-copy-id root@hadoop01
ssh-copy-id root@hadoop02
ssh-copy-id root@hadoop03
检查测试:
ssh hadoop02
如果不用密码登录就成功了,exit退出
这里测试环境用的是伪分布式模式
1.修改hadoop-env.sh
vim /home/app/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/home/app/jdk1.8.0_65
# The jsvc implementation to use. Jsvc is required to run secure datanodes
# that bind to privileged ports to provide authentication of data transfer
# protocol. Jsvc is not required if SASL is configured for authentication of
# data transfer protocol using non-privileged ports.
#export JSVC_HOME=${JSVC_HOME}
export HADOOP_CONF_DIR=/home/app/hadoop-2.7.1/etc/hadoop
这里的两个export全部都改为绝对路径
2.修改 core-site.xml
vim /home/app/hadoop-2.7.1/etc/hadoop/core-site.xml
以下内容放在内
<property>
<!--用来指定hdfs的老大,namenode的地址-->
<name>fs.default.name</name>
<value>hdfs://hadoop01:9000</value>
</property>
<property>
<!--用来指定hadoop运行时产生文件的存放目录-->
<name>hadoop.tmp.dir</name>
<value>/home/app/hadoop-2.7.1/tmp</value>
</property>
hadoop运行时产生的临时文件,基本都在/tmp/hadoop下,在内存不足的情况下,会序列化到临时文件,腾出内存空间,保障系统运行稳定
3.修改hdfs-site.xml
vim /home/app/hadoop-2.7.1/etc/hadoop/hdfs-site.xml
4.修改mapred-site.xml
在/home/app/hadoop-2.7.1/etc/hadoop
的目录下,只有一个mapred-site.xml.template
文件,复制一个
配置mapreduce运行在yarn上:粘贴高亮部分到标签内
<property>
<!--指定mapreduce运行在yarn上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5.修改 yarn-site.xml
vim /home/app/hadoop-2.7.1/etc/hadoop/yarn-site.xml
<property>
<!--指定yarn的老大resourcemanager的地址-->
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<!--NodeManager获取数据的方式-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
6.修改slaves
vim /home/app/hadoop-2.7.1/etc/hadoop/slaves
如果已经配过hosts,里面直接输入一个hadoop01就可以了,如果没有的话,需要输入IP地址
7.配置系统profile的hadoop的环境变量
vim /etc/profile
#set java environment
JAVA_HOME=/home/app/jdk1.8.0_65
JAVA_BIN=/home/app/jdk1.8.0_65/bin
HADOOP_HOME=/home/app/hadoop-2.7.1
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN HADOOP_HOME PATH CLASSPATH
source /etc/profile
检测路径是否正常:
echo $HADOOP_HOME
初始化
hdfs namenode -format
启动
start-all.sh
停止
stop-all.sh
测试
jsp
正常启动需要有6个进程:
Jps/DataNode/NameNode/NodeManager/SecondaryNameNode/ResourceManager
如果进程少了一个,就去下面目录执行这条命令
/home/app/hadoop-2.7.1/sbin/hadoop-daemon.sh start namenode
少什么就在start后面加什么,注意需要全小写
在windows的浏览器访问IP地址+50070端口的访问,可以正常访问即可
可能遇到的问题
如果遇到问题,需要执行stop.sh
,然后删除根目录下的tmp
文件,然后格式化,重新启动