Hadoop学习

  • 虚拟机安装
  • linux网络配置
  • 此处设置IP时注意
  • SSH服务配置 免密登录
  • 防火墙配置
  • Jdk安装
  • 配置环境变量
  • Hadoop安装和集群配置
  • 配置环境变量
  • 主节点配置
  • Hdfs-site.xml文件配置 此处dfs需注意value前无需添加hdfs
  • Mapred-site.xml文件配置
  • yarn-site.xml文件配置
  • Slaves文件配置
  • zookeeper安装并配置
  • 配置环境变量
  • 配置zoo.cfg
  • 添加myid文件
  • Hadoop模块
  • Hadoop集群启动测试
  • 通过UI查看hadoop集群
  • Hadoop运行mapreduce 使用基础jar包统计词频
  • Hadoop - JavaAPI (with IDEA in Windows)
  • HDFS的Checkpoint
  • 为什么需要checkpoint?
  • checkpoint触发条件
  • checkpoint做了什么
  • shared.edits.dir 日志文件位置设置
  • fsimage fsimage文件位置
  • 利用副本机制故障还原
  • HDFS中的fsck命令(检查数据块是否健康)
  • 损坏文件的处理
  • 打印文件的Block报告(-blocks)
  • hdfs haadmin 命令
  • -transitionToActive
  • -getServiceState
  • -checkHealth


虚拟机安装

第一步:创建新的虚拟机

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop


第二步:选择“自定义向导”

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_02


第三步:

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_03


第四步:选择操作系统的类型

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_04


第五步:安装及位置

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_05


第六步:cpu及核心数 建议最少2核

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_06


第七步:内存 建议最少4G

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_07


第八步:网络类型选择桥接或NAT都可(建议NAT模式)

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_08

创建好了虚拟机 图中CPU核心和内存都是为简化流程没有改

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_09


安装一台centos7并克隆两台共三台机器

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_10

linux网络配置

1.修改主机名称

将克隆的2、3主机分别改名为hadoop02、hadoop03

Vi /etc/hostname

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_11


2.主机名和ip映射配置

此处设置IP时注意

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_12

Host文件配置 三台虚拟机之间通信名称代替ip

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_13

2.网络参数配置 配置静态ip

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_14


3.测试网卡配置

若修改vmware默认初始网段,出现无法ping通外网在上图虚拟网络编辑器还原默认配置,使用还原后的网段即可.

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_15

SSH服务配置 免密登录

1.生成私匙 和公匙

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_16


将共匙 加入authorized_keys 文件(如没有touch创建该文件) 实现自我登录

cat id_rsa.pub >> authorized_keys

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_17


复制共匙到hadoop02和hadoop03 实现免密登录

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_18

防火墙配置

firewall-cmd --zone=public --add-port=9000/tcp --permanent

firewall-cmd --zone=public --add-port=50075/tcp --permanent

firewall-cmd --zone=public --add-port=8088/tcp --permanent

hdfs

9000 50070 50010

yarn

8030 8031 8032 8088

journalnode

8485

zookeeper

2181 2888 3888

放开端口需重载防火墙配置

firewall-cmd --reload

查看一下开放的端口

firewall-cmd --zone=public --list-ports

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_19


常用的端口如下

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_20

Jdk安装

上传

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_21


解压

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_22


重命名

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_23

配置环境变量

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_24


验证安装完成

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_25

Hadoop安装和集群配置

上传

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_26


解压

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_27

配置环境变量

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_28


需要注意的是配置环境变量的时候若有两个path 一定要记得两个都要在前面加$符号

验证安装成功

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_29

主节点配置

core-site.xml 配置 此地fs需注意value值开头需添加hdfs 非高可用

官网core-default

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_30


高可用ha配置

<configuration>
 <property>
   <name>fs.defaultFS</name>
   <value>hdfs://ns1</value>
 </property>
 <property>
   <name>hadoop.tmp.dir</name>
   <value>/export/data/hadoop/tmp</value>
 </property>
 <property>
   <name>ha.zookeeper.quorum</name>
   <value>ha001:2181,ha002:2181,ha003:2181</value>
 </property>
 <!--ipc超时重试次数和间隔-->
 <property>
  <name>ipc.client.connect.max.retries</name>
  <value>100</value>
 </property>
 <property>
   <name>ipc.client.connect.retry.interval</name>
   <value>10000</value>
 </property>
 <property>
   <name>ipc.client.connect.timeout</name>
   <value>20000</value>
 </property>
</configuration>

Hdfs-site.xml文件配置 此处dfs需注意value前无需添加hdfs

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_31


高可用ha配置

<?xml version="1.0" encoding="UTF-8"?>href="configuration.xsl"?>
<configuration>
  <!--三台节点-->
<property>
   <name>dfs.replication</name>
   <value>3</value>
  </property>
  <!--元数据信息位置-->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/export/data/hadoop/name</value>
  </property>
  <!--数据位置-->
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/export/data/hadoop/data</value>
  </property>
 <!--开启WEB-HDFS-->
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
  </property>
  <!--ha集群名称-->
  <property>
    <name>dfs.nameservices</name>
    <value>ns1</value>
  </property>
  <!--两台namenode名称-->
  <property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>nn1,nn2</value>
  </property>
<!--nn1的通信地址-->
    <!--RPC通信地址-->
    <property>
      <name>dfs.namenode.rpc-address.ns1.nn1</name>
      <value>ha001:9000</value>
    </property>
    <!--http通信地址-->
    <property>
      <name>dfs.namenode.http-address.ns1.nn1</name>
      <value>ha001:50070</value>
    </property>
  <!--nn2的通信地址-->
    <!--RPC通信地址-->
    <property>
      <name>dfs.namenode.rpc-address.ns1.nn2</name>
      <value>ha002:9000</value>
    </property>
    <!--http通信地址-->
    <property>
      <name>dfs.namenode.http-address.ns1.nn2</name>
      <value>ha002:50070</value>
    </property>
  <!--NAMENODE的元数据在journalnode的存放位置-->
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://ha001:8485;ha002:8485;ha003:8485/ns1</value>
    </property>
  <!--指定journal在本地磁盘的存放位置-->
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/export/data/hadoop/journaldata</value>
    </property>
  <!--开启namenode失败自动切换-->
    <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>
    </property>
    <property>
      <name>dfs.client.failover.proxy.provider.ns1</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
     </property>
  <!--隔离机制自动切换时登录第二台namenode -->
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>
         sshfence
         shell(/bin/true)
      </value>
    </property>
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value>
    </property>
    <property>
      <name>dfs.ha.fencing.ssh.connect-timeout</name>
      <value>30000</value>
    </property>
 
  <!--journal连接配置-->
    <property>
      <name>dfs.qjournal.start-segment.timeout.ms</name>
      <value>20000</value>
    </property>
    <property>
      <name>dfs.qjournal.select-input-streams.timeout.ms</name>
      <value>20000</value>
    </property>
    <property>
      <name>dfs.qjournal.write-txns.timeout.ms</name>
      <value>20000</value>
    </property>
</configuration>

Mapred-site.xml文件配置

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
	<name>mapreduce.map.memory.mb</name>
	<value>3072</value>
  </property>
  <property>
	<name>mapreduce.reduce.memory.mb</name>
	<value>6144</value>
  </property>
  <property>
	<name>mapreduce.map.java.opts</name>
	<value>-Xmx3072m</value>
  </property>
  <property>
	<name>mapreduce.reduce.java.opts</name>
	<value>-Xmx6144m</value>
  </property>
</configuration>

yarn-site.xml文件配置

资源管理器负责配置调控CPU,内存,磁盘等分配和使用

分为节点资源管理和任务资源分配

单节点推荐内存设置如下(主要为系统预留)

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_32


每个container则根据任务需要设置最大最小分配资源

<?xml version="1.0"?>
<configuration>
<!--是否将对容器实施物理内存限制-->
  <property>
     <name>yarn.nodemanager.pmem-check-enabled</name>
     <value>true</value>
  </property>
<!--是否将对容器实施虚拟内存限制-->
  <property>
     <name>yarn.nodemanager.vmem-check-enabled</name>
     <value>true</value>
  </property>
<!--物理核心和虚拟核心比率-->
  <property>
     <name>yarn.nodemanager.vmem-pmem-ratio</name>
     <value>2.1</value>
  </property>
<!--将逻辑处理器(例如超线程)视为核心-->
  <property>
     <name>yarn.nodemanager.resource.count-logical-processors-as-cores</name>
     <value>false</value>
  </property>
<!--scheduler给每个容器可分配资源-->
  <!------表示每个container的最大物理内存------->
  <property>
     <name>yarn.scheduler.maximum-allocation-mb</name>
     <value>3072</value>
  </property>
  <property>
     <name>yarn.scheduler.minimum-allocation-mb</name>
     <value>256</value>
  </property>
  <!------表示每个container的最大CPU核心数------->
  <property>
     <name>yarn.scheduler.maximum-allocation-vcores</name>
     <value>3</value>
  </property>
  <property>
     <name>yarn.scheduler.minimum-allocation-vcores</name>
     <value>1</value>
  </property>
<!--单个节点可用资源-->
  <!------表示该节点可使用的物理内存------->
  <property>
     <name>yarn.nodemanager.resource.memory-mb</name>
     <value>2400</value>
  </property>
  <!------表示该节点可使用的CPU核心数------->
  <property>
     <name>yarn.nodemanager.resource.cpu-vcores</name>
     <value>2</value>
  </property>
  
<!--resourcemanager地址-->
  <property>
     <name>yarn.resourcemanager.hostname.rm1</name>
     <value>ha001</value>
  </property>
  <property>
     <name>yarn.resourcemanager.hostname.rm2</name>
     <value>ha002</value>
  </property>
<!--指定zookeeper集群地址-->
  <property>
     <name>yarn.resourcemanager.zk-address</name>
     <value>ha001:2181,ha002:2181,ha003:2181</value>
  </property>
  <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
  </property>

 <!--开启resourcemanager高可用-->
  <property>
     <name>yarn.resourcemanager.ha.enabled</name>
     <value>true</value>
  </property>
<!--指定cluster ID-->
  <property>
     <name>yarn.resourcemanager.cluster-id</name>
     <value>yrc</value>
  </property>
  <property> 
     <name>yarn.resourcemanager.ha.rm-ids</name>
     <value>rm1,rm2</value>
  </property>
</configuration>

Slaves文件配置

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_33


将主节点内容分发到子节点

分发profile配置

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_34


同步分发、export下的文件

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_35

zookeeper安装并配置

1.下载并解压

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_36

配置环境变量

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_37

配置zoo.cfg

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_38

添加myid文件

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_39


Ha-01输入值1,ha-02输入值为2,ha-03输入值为3

Hadoop模块

common 公共模块
HDFS 文件存储
YARN 资源管理
MapReduce 计算框架

Hadoop集群启动测试

1.启动各个节点的zookeeper服务

zkServer.sh start

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_40


2.启动集群监控namenode的管理日志journalNode

hadoop-daemons.sh start journalnode

说明:该命令不推荐使用,系统会提示使用新的命令

hdfs –daemon start journalnode

可以不用单独启动,在启动hadoop集群的时候会自动启动(如果配置了的journalnode情况)

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_41


3.在node-01上格式化namenode,并分发到node-02

1.Hadoop namenode –format 提示用:hdfs namenode -format

2.scp –r /export/data/hadoop node-02:/export/data
注意:只分发master和backupmaster
hdfs namenode -format

若初始化时出现下面错误

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_42


错误原因:

我们在执行start-dfs.sh的时候,默认启动顺序是namenode>datanode>journalnode>zkfc,如果journalnode和namenode不在一台机器启动的话,很容易因为网络延迟问题导致namenode无法连接journalnode,无法实现选举,最后导致刚刚启动的namenode会突然挂掉。虽然namenode启动时有重试机制等待journalnode的启动,但是由于重试次数限制,可能网络情况不好,导致重试次数用完了,也没有启动成功。

解决方法:
方法①:手动启动namenode,避免了网络延迟等待journalnode的步骤,一旦两个namenode连入journalnode,实现了选举,则不会出现失败情况。
方法②:先启动journalnode然后再运行start-dfs.sh。
方法③:把namenode对journalnode的容错次数或时间调成更大的值,保证能够对正常的启动延迟、网络延迟能容错。在hdfs-site.xml中修改ipc参数,namenode对journalnode检测的重试次数,默认为10次,每次1000ms,故网络情况差需要增加。具体修改信息为:

<property>
     <name>ipc.client.connect.max.retries</name>
     <value>100</value>
     <description>Indicates the number of retries a client will make to establish
      a server connection.
     </description>
</property>
<property>
     <name>ipc.client.connect.retry.interval</name>
    <value>10000</value>
    <description>Indicates the number of milliseconds a client will wait for
  before retrying to establish a server connection.
    </description>
</property>

原文链接:link

4.在node-01上格式化ZKFC
这个命令必须自己敲出来不能复制

hdfs zkfc –formatZK

5.在node-01上启动hadfs

start-dfs.sh

6.在node-01上启动yarn

start-yarn.sh

一键启动 终止

start-dfs.sh start-yarn.sh

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_43


结果 3台均正常启动dfs 和yarn

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_44


如果有漏掉的机器没有启动

则可以用

hadoop-daemon.sh start namenode

hadoop-daemon.sh start datanode

yarn-daemon.sh start resourcemanager

yarn-daemon.sh start secondarymanager

yarn-daemon.sh start nodemanager

在漏掉的机器上执行启动

一键终止 stop-dfs.sh stop-yarn.sh

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_45

通过UI查看hadoop集群

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_46


三台集群均成功通信展示在UI界面

在UI界面创建添加文件

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_47


解决办法:在linux系统中hadoop fs -chmod -R 777 /释放权限(实际生产应该不会让这样做)

Hadoop运行mapreduce 使用基础jar包统计词频

前提条件:

1.dfs、yarn已运行

2.在hadoop文件系统创建如下文件夹

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_48


3.在input目录下上传word.txt.txt文件

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_49


4.防火墙50070、8088、9000、50075端口放开

运行统计词频案例

在/export/servers/hadoop2.9.2/share/hadoop/mapreduce/目录下有一些简单例子的jar包如统计词频、计算Pi值等,下面演示一个词频统计进入到/export/servers/hadoop2.9.2/share/hadoop/mapreduce/目录下

hadoop jar hadoop-mapreduce-examples-2.9.2.jar wordcount /data/input/word.txt.txt /data/output/result

输出文件在hadoop文件系统的/data/output/result目录下

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_50


查看下输出结果

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_51


输出为各个词的词频

在网页端查看输出结果

需要防火前放开50075端口

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_52

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_53

Hadoop - JavaAPI (with IDEA in Windows)

Windows 安装hadoop

(hadoop-2.5.2.tar.gz解压到本地)

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_54


Windows配置hadoop环境变量

HADOOP_HOME

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_55


添加path

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_56


winutils工具包

解压下载的winutils,找到对应或邻近版本的Hadoop,进入其bin目录,将其中的hadoop.dll和winutils.exe拷贝到C:\Windows\System32目录创建maven project

配置pom.xml

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_57


配置core-site.xml、hdfs-site.xml、log4j.properties

将远程集群的Hadoop安装目录下hadoop/hadoop-2.7.7/etc/hadoop目录下的core-site.xml、hdfs-site.xml两个文件通过Xftp等SFTP文件传输软件将两个文件复制,并移动到上述src/main/resources目录中(拖拽即可),然后将下载的log4j.properties文件移动到src/main/resources目录中(防止不输出日志文件)

(可以直接从linux的/export/servers/hadoop-2.9.2/etc/hadoop下复制过来)编写java程序相应模块测试创建、上传读取文件

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_58


将连接属性前添加@before方法作为连接前提条件

创建、上传文件夹前添加@test方法连接测试

编写经典案例倒排索引(课本Mapreduce案例)

文件准备

首先在/data的目录下创建两个文件

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_59


在mfile里创建三个文件

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_60


编写java类文件

Mapper

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_61


Reducer

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hdfs_62


Combiner

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop_63


Driver

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_64


结果

Hadoop安装与实践 心得体会 安装hadoop的实训心得_Hadoop安装与实践 心得体会_65


文档出现词和文档对应索引

HDFS的Checkpoint

Checkpoint(检查点):因为数据库系统或者像HDFS这样的分布式文件系统,对文件数据的修改不是直接写回到磁盘的,很多操作是先缓存到内存的Buffer中,当遇到一个检查点Checkpoint时,系统会强制将内存中的数据写回磁盘,当然此时才会记录日志,从而产生持久的修改状态。
在介绍Checkpoint之前,先来看看Namenode上面有些什么数据:
edits HDFS操作的日志记录,没此对HDFS进行修改操作后,都会往edits中记录一条日志;
fsimage HDFS中命名空间、数据块分布、文件属性等信息都存放在fsimage中;
edits是在每次修改HDFS时都会插入记录,那么fsimage则在整个HDFS运行期间不会产生变化,用HDFS官方文档的说法就是:NameNode merges fsimage and edits files only during start up。也就是说,只有在每次启动Namenode时,才会把edits中的操作增加到fsimage中,并且把edits清空。所以fsimage总是记录启动Namenode时的状态,而edits在每次启动时也是空的,它只记录本次启动后的操作日志。

为什么需要checkpoint?

按照fsimage和edits的工作机制,在一次启动后,edits的文件可能会增长到很大,这样在下次启动Namenode时需要花费很长时间来恢复;
另一方面,如果在HDFS运行过程中发生Namenode的故障,那么edits中的记录就会丢失。所以,我们需要利用Checkpoint即使将修改操作持久化。

checkpoint触发条件

在配置文件中的参数:
时间维度,默认一小时触发一次工作流程 dfs.namenode.checkpoint.period :3600
次数维度,默认100万次触发一次工作流程 dfs.namenode.checkpoint.txns : 1000000
大小维度,默认64M触发一次工作流程
fs.checkpoint.size:67108864。
也就说触发HDFS中Checkpoint的机制有三种,一是时间、次数和日志的大小

checkpoint做了什么

Chekpoint主要干的事情是,将Namenode中的edits和fsimage文件拷贝到Second Namenode上,然后将edits中的操作与fsimage文件merge以后形成一个新的fsimage,这样不仅完成了对现有Namenode数据的备份,而且还产生了持久化操作的fsimage。最后一步,Second Namenode需要把merge后的fsimage文件upload到Namenode上面,完成Namenode中fsimage的更新。
以上提到的文件都可以在hadoop系统的data目录下找到。

shared.edits.dir 日志文件位置设置

当集群为高可用集群时standbynamenode会读取该目录下edits文件并与fsimage合并为新的fsimage

<!--NAMENODE的元数据在journalnode的存放位置-->
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://ha001:8485;ha002:8485;ha003:8485/ns1</value>
    </property>
  <!--指定journalnode在本地磁盘的存放位置-->
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/export/data/hadoop/journaldata</value>
    </property>

fsimage fsimage文件位置

<!--元数据信息位置-->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/export/data/hadoop/name</value>
  </property>

利用副本机制故障还原

1.删掉Active NameNode的FSimage和Edits_Log模拟数据丢失
记录NN存储 和Edits_Log的路径

2.将Standby NameNode的FSimage和Edits_Log复制到NN的FSimage和Edits_Log对应的目录下

3.启动挂掉的NameNode

HDFS中的fsck命令(检查数据块是否健康)

查看文件目录的健康信息

hdfs fsck /weblog

查看文件中损坏的块 (-list-corruptfileblocks)

hdfs fsck /weblog -list-corruptfileblocks

损坏文件的处理

将损坏的文件移动至/lost+found目录 (-move)

hdfs fsck /user/hadoop-twq/cmd -move

删除有损坏数据块的文件 (-delete)

hdfs fsck /user/hadoop-twq/cmd -delete

打印文件的Block报告(-blocks)

执行下面的命令,可以查看一个指定文件的所有的Block详细信息,需要和-files一起使用:

hdfs fsck /user/hadoop-twq/cmd/big_file.txt -files -blocks

如果,我们在上面的命令再加上-locations的话,就是表示还需要打印每一个数据块的位置信息,如下:

Hadoop安装与实践 心得体会 安装hadoop的实训心得_hadoop_66

hdfs haadmin 命令

-transitionToActive

#/bin/bash
#nn1 -> active
hdfs haadmin -transitionToActive -forcemanual nn1
#nn2 -> standby
hdfs haadmin -transitionToStandby -forcemanual nn1

-getServiceState

#/bin/bash
hdfs haadmin -getServiceState nn1

-checkHealth