hadoop学习记录

虚拟机安装

第一步:创建新的虚拟机
在这里插入图片描述
第二步:选择“自定义向导”
在这里插入图片描述
第三步:
在这里插入图片描述
第四步:选择操作系统的类型
在这里插入图片描述
第五步:安装及位置
在这里插入图片描述
第六步:cpu及核心数 建议最少2核
在这里插入图片描述
第七步:内存 建议最少4G
在这里插入图片描述
第八步:网络类型选择桥接或NAT都可(建议NAT模式)
选择nat模式

创建好了虚拟机 图中CPU核心和内存都是为简化流程没有改
在这里插入图片描述
安装一台centos7并克隆两台共三台机器
在这里插入图片描述

linux网络配置

1.修改主机名称
将克隆的2、3主机分别改名为hadoop02、hadoop03
Vi /etc/hostname
在这里插入图片描述
2.主机名和ip映射配置

此处设置IP时注意

在这里插入图片描述

Host文件配置 三台虚拟机之间通信名称代替ip
在这里插入图片描述

2.网络参数配置 配置静态ip
在这里插入图片描述
3.测试网卡配置
若修改vmware默认初始网段,出现无法ping通外网在上图虚拟网络编辑器还原默认配置,使用还原后的网段即可.
在这里插入图片描述

SSH服务配置 免密登录

1.生成私匙 和公匙
在这里插入图片描述
将共匙 加入authorized_keys 文件(如没有touch创建该文件) 实现自我登录
cat id_rsa.pub >> authorized_keys
在这里插入图片描述
复制共匙到hadoop02和hadoop03 实现免密登录
在这里插入图片描述

防火墙配置

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
在这里插入图片描述
常用的端口如下
在这里插入图片描述

Jdk安装

上传
在这里插入图片描述
解压
在这里插入图片描述
重命名
在这里插入图片描述

配置环境变量

在这里插入图片描述
验证安装完成
在这里插入图片描述

Hadoop安装和集群配置

上传
在这里插入图片描述
解压
在这里插入图片描述

配置环境变量

在这里插入图片描述
需要注意的是配置环境变量的时候若有两个path 一定要记得两个都要在前面加$符号
验证安装成功
在这里插入图片描述

主节点配置

core-site.xml 配置 此地fs需注意value值开头需添加hdfs 非高可用
官网core-default
在这里插入图片描述
高可用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

官网hdfs-default
在这里插入图片描述
高可用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>

官网mapred-site

yarn-site.xml文件配置

资源管理器负责配置调控CPU,内存,磁盘等分配和使用
分为节点资源管理和任务资源分配
单节点推荐内存设置如下(主要为系统预留)
在这里插入图片描述
每个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>

yran常用参数参考

Slaves文件配置

在这里插入图片描述
将主节点内容分发到子节点
分发profile配置
在这里插入图片描述
同步分发、export下的文件
在这里插入图片描述

zookeeper安装并配置

1.下载并解压
在这里插入图片描述

配置环境变量

在这里插入图片描述

配置zoo.cfg

在这里插入图片描述

添加myid文件

在这里插入图片描述
Ha-01输入值1,ha-02输入值为2,ha-03输入值为3

Hadoop模块

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

Hadoop集群启动测试

1.启动各个节点的zookeeper服务
zkServer.sh start
在这里插入图片描述
2.启动集群监控namenode的管理日志journalNode
hadoop-daemons.sh start journalnode
说明:该命令不推荐使用,系统会提示使用新的命令
hdfs –daemon start journalnode
可以不用单独启动,在启动hadoop集群的时候会自动启动(如果配置了的journalnode情况)
在这里插入图片描述
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

若初始化时出现下面错误
在这里插入图片描述
错误原因:
我们在执行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
在这里插入图片描述
结果 3台均正常启动dfs 和yarn
在这里插入图片描述
如果有漏掉的机器没有启动
则可以用
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
在这里插入图片描述

通过UI查看hadoop集群

在这里插入图片描述
三台集群均成功通信展示在UI界面
在UI界面创建添加文件
在这里插入图片描述
解决办法:在linux系统中hadoop fs -chmod -R 777 /释放权限(实际生产应该不会让这样做)

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

前提条件:
1.dfs、yarn已运行
2.在hadoop文件系统创建如下文件夹
在这里插入图片描述
3.在input目录下上传word.txt.txt文件
在这里插入图片描述
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目录下
在这里插入图片描述
查看下输出结果
在这里插入图片描述
输出为各个词的词频
在网页端查看输出结果
需要防火前放开50075端口
在这里插入图片描述在这里插入图片描述

Hadoop - JavaAPI (with IDEA in Windows)

Windows 安装hadoop
(hadoop-2.5.2.tar.gz解压到本地)
在这里插入图片描述
Windows配置hadoop环境变量
HADOOP_HOME
在这里插入图片描述
添加path
在这里插入图片描述
winutils工具包
解压下载的winutils,找到对应或邻近版本的Hadoop,进入其bin目录,将其中的hadoop.dll和winutils.exe拷贝到C:\Windows\System32目录

创建maven project
配置pom.xml
在这里插入图片描述
配置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程序相应模块测试创建、上传读取文件
在这里插入图片描述
将连接属性前添加@before方法作为连接前提条件
创建、上传文件夹前添加@test方法连接测试
编写经典案例倒排索引(课本Mapreduce案例)
文件准备
首先在/data的目录下创建两个文件
在这里插入图片描述
在mfile里创建三个文件
在这里插入图片描述
编写java类文件
Mapper
在这里插入图片描述
Reducer
在这里插入图片描述
Combiner
在这里插入图片描述
Driver
在这里插入图片描述
结果
在这里插入图片描述
文档出现词和文档对应索引

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的话,就是表示还需要打印每一个数据块的位置信息,如下:
在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一加六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值