1. Hadoop
hadoop是一个分布式的、开源的、高可靠的、可扩展的软件框架。
分布式:
【GFS(存储),MapReduce(计算)两篇论文】【bigtable(大表)】
hadoop组成【2.7.3版本】
Hadoop Common
Hadoop Distributed Files System(HDFS)
【默认端口号:8020(1.0则是9000)】
【外部访问HDFS的端口号是50070,数据传输的端口号是50075】
【在虚拟机环境下部署,物理机访问linux下HDFS,必须开放50070和50075端口】
Hadoop YARN【默认端口:8088】
Hadoop MapReduce
hadoop上层应用组件
- Ambari:web端监控hadoop集群的工具
- Avro:序列化数据系统
- HBase:高可靠的、数据库
- Hive:数据仓库
- Spark:快速的、通用的计算引擎
- Zookeeper:高可用的平台,在分布式之间协调
- 【Hadoop Ozone】:关系型数据存储【3.0】
- 【Hadoop Submarine】:机器学习【3.0】
hadoop安装部署
-
搭建环境
- centos6.8
- 关闭防火墙
- 设置静态IP
- 修改主机名及hosts文件
- hadoop2.7.3
- jdk1.8
- 采用自建用户(hadoop/8426)
- 安装目录:/home/hadoop/soft/hadoop
- centos6.8
-
hadoop集群搭建的三种模式
-
Local (Standalone)Mode:【本地模式】
[hadoop被配置作为单个Java进程以非分布式模式进行。主要用于debug]
-
Pseudo-Distributed Mode:【伪分布模式】
[hadoop伪分布模式运行在单节点上,每个hadoop守护进程占用单独的Java进程]
-
Fully-Distributed Mode:【完全分布模式】
-
hadoop配置文件位置(/home/hadoop/soft/etc/hadoop)
-
core-site.xml(Common)
【hadoop-2.7.3.tar.gz/share/hadoop/common/hadoop-common-2.7.3.jar】
-
hdfs-site.xml(HDFS)
【hadoop-2.7.3.tar.gz/share/hadoop/hdfs/hadoop-hdfs-2.7.3.jar】
-
yarn-site.xml(YARN)
【hadoop-2.7.3.tar.gz/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.3.jar】
-
mapred-site.xml(MapReduce)
【hadoop-2.7.3.tar.gz/share/hadoop/yarn/hadoop-yarn-common-2.7.3.jar】
- 剪切出test包【_test】
- 剪切出source包【_sources】
- 剪切出config包【_config】
- 剩下的是依赖包【_jar】
守护进程
-
开启守护进程【启动关闭没有顺序要求】
$>
start-dfs.sh
-
单独开启守护进程【以当前窗口会话的形式开启】
$>
hdfs namenode
【50070端口是namenode的】
$>hdfs datanode
$>hdfs secondarynamenode
【如果默认配置目录
$HADDOP_HOME/etc/hadoop
不存在】
【那么开启守护进程时必须指定配置文件目录】
【$>hdfs --config ~/soft/hadoop/etc/hadoop namenode
】
【以~/soft/hadoop/etc/hadoop作为配置文件路径进行启动守护线程】
【以这种方式启动就可以查看异常的信息】
-
-
通过hadoop-deamon.sh单独开启3个守护线程(最常用的方式,启动后将进程挂到后台,不影响其他操作执行)
$>
hadoop-daemon.sh start namenode
$>hadoop-daemon.sh start datanode
$>hadoop-daemon.sh start secondarynamenode
-
关闭守护进程
-
整体关闭,调用stop-all.sh
- $>
stop-all.sh
(不常用,会将不需要关闭的也关闭)
- $>
-
单独关闭守护进程
$>
hadoop-daemon.sh stop namenode
$>hadoop-daemon.sh stop datanode
$>hadoop-daemon.sh stop secondarynamenode
【start-all.sh = start-dfs.sh + start-yarn.sh】
【namenode与datanode的Cluster ID不相同,会产生冲突,namenode开启,系统检测到了之后,datanode就会被kill】
【默认的HDFS存储在/tmp目录下,生产环境下会更换路径】
-
hadoop默认配置路径
【$HADOOP_HOME/etc/hadoop】
【建议:采用软链接的方式配置hadoop默认路径!】
【因为,再安装完全分布式,或者高可用时,只要修改软链接的指向,就可以很方便指向对应目录】
初识HDFS文件系统
[hadoop@master etc]$
hdfs dfs -ls /
[hadoop@master etc]$hdfs dfs -mkdir -p /use/mumu
[hadoop@master etc]$hdfs dfs -ls /
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2019-07-29 17:03 /use
[hadoop@master etc]$hdfs dfs -ls -R /
drwxr-xr-x - hadoop supergroup 0 2019-07-29 17:03 /use
drwxr-xr-x - hadoop supergroup 0 2019-07-29 17:03 /use/mumu
[hadoop@master mumu]$hdfs dfs -put 1556876534726.jpg /use/mumu
[hadoop@master mumu]$hdfs dfs -ls /use/mumu
Found 1 items
-rw-r–r-- 1 hadoop supergroup 1884551 2019-07-29 17:05 /use/mumu/1556876534726.jpg
[hadoop@master mumu]$
- hdfs dfs command
- hadoop fs command【常用】
HDFS启动加载顺序
【start-dfs.sh】
–> 【hdfs-config.sh】:查找hadoop-config.sh文件,并执行
–> 【hadoop-config.sh】 :设置hadoop默认的参数变量 + 加载JVM + 设置classpath
–> 【hadoop-env.sh】:加载JAVA_HOME,设置JVM参数
[echo “Starting namenode on [$NAMENODES]”]
–> 【hadoop-daemons.sh】:启动守护进程
–> 【slaves.sh】:读取从节点(slaves)的节点信息
–> 【hadoop-daemon.sh】:获取参数,调用HDFS命令执行开启守护进程
–> 【hdfs】:通过command命令检索对应的javaClass对象,然后调用执行
–> 【java.class】:执行main主函数
守护进程开启过程中出现的异常(非法操作导致)
-
重复执行<$ hdfs namenode -format>格式化命令
- 【导致datanode或namenode结点开启异常】
- 【解决方案:】修改{/tmp/hadoop-hadoop/dfs/name/current/VERSION}文件中的Cluster ID值,重新启动集群就可以了。
- 原因:由于重新格式化操作,将原有的{/tmp/hadoop-hadoop/dfs/name}目录重新定义
- 格式化操作步骤:
- 删除{/tmp/hadoop-hadoop}目录下的所有内容
- 执行格式化命令:$>
hdfs namenode -format
- 如果要保存原有的数据
- 修改所有的VERSION中的Cluster ID值,和其他属性,都改成一样的就行
修改HDFS默认存储路径
-
关闭HDFS环境
-
删除原hadoop-hadoop【/tmp/hadoop-hadoop】目录
-
修改默认存放数据的地址为
[src:core-site.xml]
<property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop-${user.name}</value> <description>A base for other temporary directories.</description> </property>
【这个是设置HDFS存放数据地址的路径:
【/home/hadoop/tmp/hadoop-username/】
[dest:$HADOOP_HOME/etc/hadoop/core-site.xml]
-
修改默认存放namenode节点数据的地址为
[src:hdfs-site.xml]
<property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/dfs/name</value> 【追加,/home/hadoop/backup/dfs/name】【追加这个是为了备份namenode数据】 <description>Determines where on the local filesystem the DFS name node should store the name table(fsimage). If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy. </description> </property>
【这个才是namenode节点存放数据的路径,这个路径在整个HDFS存放路径下的子路径】
【/home/hadoop/tmp/hadoop-username/】
[dest:$HADOOP_HOME/etc/hadoop/hdfs-site.xml]
-
修改默认存放datanode节点数据的地址为
[hdfs-site.xml]
<property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.tmp.dir}/dfs/data</value> <description>Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. The directories should be tagged with corresponding storage types ([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) for HDFS storage policies. The default storage type will be DISK if the directory does not have a storage type tagged explicitly. Directories that do not exist will be created if local filesystem permission allows. </description> </property>
【这个是datanode的存放位置,同namenode】
[dest:$HADOOP_HOME/etc/hadoop/hdfs-site.xml]
-
格式化namenode【$>
hdfs namenode -format
】【不报错情况下继续】 -
开启各个节点【namenode、datanode、secondarynamenode】
-
测试节点启动情况【jps】
【如果节点都开启,则成功。若有节点未开启,则利用hdfs command方式开启并查看异常】
HDFS主从分布
-
分布式文件系统采用主Master/从Slaves结构
【namenode守护进程作为Master节点】:维护HDFS的元数据信息[镜像文件+编辑日志]
【datanode守护进程作为Slaves节点】:
-
参照【官方完档的HDFS Architecture】
面试题:
-
在开启start-dfs.sh时,默认给定守护进程的大小是多少?
【1000M】
-
hadoop集群的瓶颈是?
- 网络x
- 内存x
- 【存储】
- 内核x