hadoop的背景
apache发行版本大致:1.x 和 2.x 和 3.x
提供公司:
apache : 原生hadoop
cloudar公司 : cdh
hortworks公司提供 : hdp
mapR
国内:
华为
星环
海量数据诞生、同时没有海量数据的存储、和处理
goole:GFS、mapreduce、bigtable
hadoop创始人Doug cutting:
hadoop起源,
起源思想:google
起源代码:luence ---> nutch(mapreduce、ndfs) ---> hadoop
核心思想:使用很多廉价性能低的机子连接在一起,搭成一个超大的集群对海量数据进行存储,分析,操作。
hadoop1.x 和 2.x 、 3.x的区别?
1.x和2.x最大的区别是,2.x将资源管理单独提取出来使用yarn模块来管理。
namenode角色能启动的个数:
块大小不一样,1.x : 64M,2.x : 128M,3.x : 256M
大数据的应用场景: ========== 有推荐的地方必有数据分析==================
hadoop到底是什么:
官方定义:The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing.
几点::1.开源的,2.可靠的,3.可伸缩的,4.采用分布事计算的,================ 一个软件。
就是个软件。
The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.
最最官方的解释。
大概就是:
hadoop框架允许使用简单模型来分布式处理集群中海量数据集
hadoop框架设计从单台服务器扩展成千上万台服务器,每一个都能提供本地的存储和计算。
hadoop框架设计本身就可以检测和处理应用层的失败(容错),而不是依赖硬件,因为集群中每一个都有可能失败。
hadoop四大模块:-------2.x版本
- Hadoop Common: The common utilities that support the other Hadoop modules.
- Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
- Hadoop YARN: A framework for job scheduling and cluster resource management.
- Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.
三大核心: hdfs,yarn,mapreduce
- common : 通用工具类支持其他hadoop的模块
- hdfs (hadoop distribut file system): hadoop分布式文件系统,提供高吞吐来处理应用数据
- yarn : 作业调度和集群资源管理的框架
- mapredcue : 基于yarn来并行处理海量数据集的系统
hdfs的三大服务:namenode,secondarynamenode,datenode
其他服务:matastore,client
每个服务具体职责:
hdfs的架构成主从架构master/slave.
namenode(master):接收来自client端的i/o请求;记录操作元素据;获取来自小弟(datanode)的汇报信息(心跳、块报告等);还决定副本存储;
datenode(slaves): clinet请求小弟真正读写数据内容;接受老大命令读写数据;
secondarynamenode(小秘): 协同老大管理元数据(合并元数据)
metastore: 元数据。描述hdfs块数据的数据的数据(块的地址、块id、块大小、块的创建人、创建时间等);
client : 客户端(发送读写数据请求)
三种安装模式:--------- hadoop安装之前:需要linux系统,系统上安装有jdk(因为hadoop使用java写的,需要jdk运行环境)。
Local (Standalone) Mode:单机版 ============== 三个服务只运行在单个JVM中,不是分布式存储,经常用于debug
Hadoop is configured to run in a non-distributed mode, as a single Java process. This is useful for debugging.
Pseudo-Distributed Mode:伪分布式 =============== 在一台机子上启动三个服务(namenode,secondarynamenode,datanode),一个服务使用一个JVM实现伪分布式,不适用于实际场景,-------- 一台机子崩了,数据就全毁了,应该说这个模式根本就用不了。
伪分布式搭建:----------------- 在安装配置好hadoop之后,只需要hadoop相关配置的两个配置即可--core-site.xml和hdfs-site.xml
1、解压并配置环境变量
tar -zxvf /home/hadoop-2.9.1.tar.gz -C /usr/local/
vi /etc/profile
export HADOOP_HOME=/usr/local/hadoop-2.9.1/
hadoop安装目录介绍:
bin : 操作hdfs和mapreduce的可执行命令
sbin : 启停hadoop相关服务的可执行命令
etc : hadoop相关配置文件目录
lib、libexec :相管扩展或者扩展库
share : 源码、文档和测试案例等。
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
source /etc/profile : 是环境变量生效
hadoop version : 检测hadoop版本信息
2、配置配置文件
etc/hadoop/hadoop-env.sh :指定JAVA_HOME的路径
etc/hadoop/core-site.xml : 配置核心配置文件
<property>
<name>fs.defaultFS</name>
<value>hdfs://cent01:9000</value> ----------------------- namenode主服务启动在那台主机,写哪台
</property>
etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value> ------------------ 设置副本数,伪分布式默认1个,
</property>
etc/hadoop/slaves ----------------------- 写当前用于hadoop的机子
cent01(这是服务器名,主机名,在已经设定好主机映射才可以这样设定)
3.安装完毕,格式化,并启动hdfs
hdfs namenode -format : 格式化hdfs文件系统
/tmp/hadoop-root/dfs/name has been successfully formatted
ll /tmp/hadoop-root/dfs/name : 元数据存储目录
start-dfs.sh : 启动hdfs相关服务
4.测试是否成功:
jsp 检测进程是否符合
http://hadoop01:50070 : 检测hdfs web监控
对hdfs文件系统进行读写: 能正常读写浏览则ok
hdfs dfs -ls / : 查看hdfs文件系统中的根目录
hdfs dfs -put /home/words / :上传/home/words 到hdfs中的根目录
hdfs dfs -cat /words :读hdfs中/words文件
出错处理:
服务启动不起来,查看对应的日志。hadoop-root-datanode-hadoop01.log
访问不到50070,检测防火墙,检测映射,检测namenode是否启动。
操作hdfs中的文件不行,connection异常,优先检测防火墙
Fully-Distributed Mode:全分布式 ================= 正在实用的大佬,将某些服务分别启动在多台服务器中,可以用于实际生产中。
全分布式搭建: ----------------------------- 首先要做好ssh免密登录,机子1可以免密登录机子2和3。
1.规划集群:------ 虚拟机和对应ip地址
192.168.216.111 hadoop01 namenode,datanode,nodemanager
192.168.216.112 hadoop02 datanode,resourcemamnager,nodemanager,secondarynamenode
192.168.216.113 hadoop03 datanode,nodemanager,jobhistroyserver
2.准备工作:
需要安装集群的服务器必须安装jdk
需要安装ssh,并且需要做好ssh免登陆(老大需要免登陆小弟)
hadoop01 hadoop01,hadoop02,hadoop03
hadoop02 hadoop01,hadoop02,hadoop03
3.解压配置环境变量
配置配置文件
全部配置文件在官网看和设定自己需要的变量
如hdfs-site.xml 的 ----------- http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
vi ./etc/hadoop/hadoop-env.sh
vi ./etc/hadoop/core-site.xml
vi ./etc/hadoop/hdfs-site.xml
vi ./etc/hadoop/slaves
mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
vi ./etc/hadoop/mapred-site.xml
vi ./etc/hadoop/yarn-site.xml
4.发送配置好的hadoop到每一台服务器中:
scp -r ../hadoop-2.9.1/ hadoop02:/usr/local/
scp -r ../hadoop-2.9.1/ root@hadoop02:/usr/local/
5.格式化和启动服务
hdfs的格式化:
在namenode的服务器上执行格式化命令:
hdfs namenode -format
启动服务:
start-all.sh (在namenode服务器上模块启动hdfs,在resourcemanager服务器上模块启动yarn)
mr-jobhistory-daemon.sh start historyserver
检查是否按照规划启动进程(如没有可以尝试当个启动)
6.测试是否能用:
查看web:
http://hadoop01:50070 namenode的web
http://hadoop02:50090 secondarynamenode的web
http://hadoop02:8088 resourcemanager的web
http://hadoop03:19888 jobhistroyserver的web
hdfs的读写数据: 注:读取hdfs的文件如果有多级目录必须写绝对路径
hdfs dfs -put /home/words / ---------------------------- 这个 “/” 是hdfs系统的根目录,完整的写法是:hdfs://cent01:9000/
hdfs dfs -put /home/words hdfs://hadoop01:9000/
hdfs dfs -cat hdfs://hadoop01:9000/words
yarn的job的测试:
yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar wordcount /words /out/00
错误解决:
1.我在搭建的过程中,配置文件错了,配置文件我已经发送到其他机器了,做到格式化那步了,(格式化我的理解是使配置文件生效,里面配置的路径全都生成),这是我发现自己的配置文件有错,想再格式化的话来一遍,所以必须把上一遍生成的目录(hadoopdata)删除,以及在其他两台机器上删除接收到的hadoop相关文件--------即是hadoop整个目录 。
如果需要重新搭建集群: ------------- 把整个 hadoopdata删了就ok
注意需要删除所有的数据,所有数据如下:
元数据:/home/hadoopdata/dfs/name
datanode数据:/home/hadoopdata/dfs/data
secondarynamenode的日志数据:/home/hadoopdata/checkpoint/edits
secondarynamenode的镜像数据:/home/hadoopdata/checkpoint/fsimage
------------- 把整个 hadoopdata删了就ok
hadoop各个服务的启停命令:
启动命令:
start-all.sh : 全启动(启动hdfs和yarn的模块的所有服务)
stop-all.sh : 全停止(停止hdfs和yarn的模块的所有服务)
模块启动:
start-dfs.sh : hdfs的模块启动
stop-dfs.sh : hdfs的模块停止
start-yarn.sh : yarn的模块启动
stop-yarn.sh : yarn的模块停止
单个启动:
hadoop-daemon.sh start/stop namenode :启动单个namenode
hadoop-daemons.sh start/stop namenode :启动多个namenode
hadoop-daemon.sh start/stop datanode :启动单个datanode
hadoop-daemons.sh start/stop datanode :启动多个datanode
hadoop-daemon.sh start/stop secondarynamenode :启动单个secondarynamenode
hadoop-daemons.sh start/stop secondarynamenode :启动多个secondarynamenode
yarn-daemon.sh start/stop resourcemanager