1. Hadoop

1. hadoop是一个分布式的、开源的、高可靠的、可扩展的软件框架。
分布式: 【GFS(存储),MapReduce(计算)两篇论文】【bigtable(大表)】
2. hadoop组成【2.7.3版本】
1. Hadoop Common
2. Hadoop Distributed Files System(HDFS)
【默认端口号:8020(1.0则是9000)】
【外部访问HDFS的端口号是50070,数据传输的端口号是50075】
【在虚拟机环境下部署,物理机访问linux下HDFS,必须开放50070和50075端口】3. Hadoop YARN【默认端口:8088】
4. Hadoop MapReduce
3. hadoop上层应用组件
1. Ambari:web端监控hadoop集群的工具
2. Avro:序列化数据系统
3. HBase:高可靠的、数据库
4. Hive:数据仓库
5. Spark:快速的、通用的计算引擎
6. Zookeeper:高可用的平台,在分布式之间协调
7. 【Hadoop Ozone】:关系型数据存储【3.0】
8. 【Hadoop Submarine】:机器学习【3.0】

hadoop安装部署

  1. 搭建环境
  • centos6.8
  • 关闭防火墙
  • 设置静态IP
  • 修改主机名及hosts文件
  • hadoop2.7.3
  • jdk1.8
  • 采用自建用户(hadoop/8426)
  • 安装目录:/home/hadoop/soft/hadoop
  1. hadoop集群搭建的三种模式
  1. Local (Standalone)Mode:【本地模式】
    [hadoop被配置作为单个Java进程以非分布式模式进行。主要用于debug]
  2. Pseudo-Distributed Mode:【伪分布模式】
    [hadoop伪分布模式运行在单节点上,每个hadoop守护进程占用单独的Java进程]
  3. Fully-Distributed Mode:【完全分布模式】

hadoop配置文件位置(/home/hadoop/soft/etc/hadoop)

  1. core-site.xml(Common)
    【hadoop-2.7.3.tar.gz/share/hadoop/common/hadoop-common-2.7.3.jar】
  2. hdfs-site.xml(HDFS)
    【hadoop-2.7.3.tar.gz/share/hadoop/hdfs/hadoop-hdfs-2.7.3.jar】
  3. yarn-site.xml(YARN)
    【hadoop-2.7.3.tar.gz/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.3.jar】
  4. mapred-site.xml(MapReduce)
    【hadoop-2.7.3.tar.gz/share/hadoop/yarn/hadoop-yarn-common-2.7.3.jar】
  1. 剪切出test包【_test】
  2. 剪切出source包【_sources】
  3. 剪切出config包【_config】
  4. 剩下的是依赖包【_jar】

守护进程

  1. 开启守护进程【启动关闭没有顺序要求】
    $>
  • 单独开启守护进程【以当前窗口会话的形式开启】
    $>hdfs namenode【50070端口是namenode的】
    $>hdfs datanode $>hdfs secondarynamenode

【如果默认配置目录$HADDOP_HOME/etc/hadoop不存在】
【那么开启守护进程时必须指定配置文件目录】
【$>hdfs --config ~/soft/hadoop/etc/hadoop namenode
【以~/soft/hadoop/etc/hadoop作为配置文件路径进行启动守护线程】

【以这种方式启动就可以查看异常的信息】

  • 通过单独开启3个守护线程(最常用的方式,启动后将进程挂到后台,不影响其他操作执行)
    $> start namenode $> start datanode $> start secondarynamenode
  1. 关闭守护进程
  • 整体关闭,调用
  • $>(不常用,会将不需要关闭的也关闭)
  • 单独关闭守护进程
    $> stop namenode $> stop datanode $> stop secondarynamenode

【 = + 】

【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启动加载顺序

【】

–> 【】:查找文件,并执行

–> 【】 :设置hadoop默认的参数变量 + 加载JVM + 设置classpath

–> 【】:加载JAVA_HOME,设置JVM参数

[echo “Starting namenode on [$NAMENODES]”]

–> 【】:启动守护进程

–> 【】:读取从节点(slaves)的节点信息
–> 【】:获取参数,调用HDFS命令执行开启守护进程
–> 【hdfs】:通过command命令检索对应的javaClass对象,然后调用执行
–> 【java.class】:执行main主函数


守护进程开启过程中出现的异常(非法操作导致)

  1. 重复执行<$ hdfs namenode -format>格式化命令
  • 【导致datanode或namenode结点开启异常】
  • 【解决方案:】修改{/tmp/hadoop-hadoop/dfs/name/current/VERSION}文件中的Cluster ID值,重新启动集群就可以了。
  • 原因:由于重新格式化操作,将原有的{/tmp/hadoop-hadoop/dfs/name}目录重新定义
  1. 格式化操作步骤:
  • 删除{/tmp/hadoop-hadoop}目录下的所有内容
  • 执行格式化命令:$>hdfs namenode -format
  1. 如果要保存原有的数据
  • 修改所有的VERSION中的Cluster ID值,和其他属性,都改成一样的就行

修改HDFS默认存储路径

  1. 关闭HDFS环境
  2. 删除原hadoop-hadoop【/tmp/hadoop-hadoop】目录
  3. 修改默认存放数据的地址为
    [src:core-site.xml]

<property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop-${}</value> <description>A base for other temporary directories.</description> </property>

【这个是设置HDFS存放数据地址的路径:

【/home/hadoop/tmp/hadoop-username/】

  1. [dest:$HADOOP_HOME/etc/hadoop/core-site.xml]
  2. 修改默认存放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/】

  1. [dest:$HADOOP_HOME/etc/hadoop/hdfs-site.xml]
  2. 修改默认存放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】

  1. [dest:$HADOOP_HOME/etc/hadoop/hdfs-site.xml]
  2. 格式化namenode【$>hdfs namenode -format】【不报错情况下继续】
  3. 开启各个节点【namenode、datanode、secondarynamenode】
  4. 测试节点启动情况【jps】
    【如果节点都开启,则成功。若有节点未开启,则利用hdfs command方式开启并查看异常】

HDFS主从分布

  1. 分布式文件系统采用主Master/从Slaves结构
    【namenode守护进程作为Master节点】:维护HDFS的元数据信息[镜像文件+编辑日志]
    【datanode守护进程作为Slaves节点】:
  2. 参照【官方完档的HDFS Architecture】

面试题:

  1. 在开启时,默认给定守护进程的大小是多少?
    【1000M】
  2. hadoop集群的瓶颈是?
  • 网络x
  • 内存x
  • 【存储】
  • 内核x