NN DN设置内存

  1. //Hadoop2.X:hadoop-env.sh里设置成3G。默认2000M
  2. HADOOP_NAMENODE_OPTS=-Xmx3072m
  3. HADOOP_DATANODE_OPTS=-Xmx3072m
  4. //Hadoop3.X:hadoop-env.sh里设置成3G 。默认自动分配NN DN内存,但是非常不合理
  5. // NN每增加100万个块 增加1G内存,
  6. // DN单机上块低于400万为4G,每增加100万个块 增加1G内存.
  7. export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Xmx3072m"
  8. export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx3072m"

namenode心跳并发数

hdfs-site.xml 默认是10。修改为:print int(20*math.log(datanode台数))
<property>
<name>dfs.namenode.handler.count</name>
   <value>21</value>
</property>

开启回收站

core-site.xml
<property> 
  <name>fs.trash.interval</name> 
  <value>1</value> 垃圾文件保留时间为一分钟
</property>
 <property>
    <name>fs.trash.checkpoint.interval</name>
    <value>1440</value>检查回收站的间隔时间
</property>

namenode多目录

hdfs-site.xml  每个目录存放内容相同!!!增加可靠性
<property> 
  <name>dfs.namenode.name.dir</name>
    <value>file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp. dir}/dfs/name2</value>
</property>

datanode多目录

hdfs-site.xml 每个目录存储的数据不一样!!!
<property> 
  <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp. dir}/dfs/data2</value>
</property>

hadoop3.X纠删码

RS-3-2-1024k:每个单元大小1024k,使用RS编码,每3个数据单元 生成2个校验单元 共5个单元,只要这5个单元中有任意3个单元存在(数据、校验均可),就可以得到原始数据。 300M的数据 原来需要存储900M,现在需要存储500M。

  • 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策
  • 默认只开启对 RS-6-3-1024k 策略的支持 ```bash hdfs ec # 查看纠删码相关命令

需求:将/input 目录设置为 RS-3-2-1024k 策略

hdfs ec -enablePolicy -policy RS-3-2-1024k # 开启策略 hdfs dfs -mkdir /input # 创建目录 hdfs ec -setPolicy -path /input -policy RS-3-2-1024k # 对目录设置策略

<a name="rG4vj"></a>
### hadoop3.X 冷热数据分离
将不同的数据存储在不同类型的硬盘中<br />还需要修改hdfs.site.xml 标识路径为SSD或DISK
```bash
hdfs storagepolicies -listPolicies # 查看当前有哪些存储策略可用
hdfs storagepolicies -setStoragePolicy -path xxx -policy xxx # 指定路径存储策略
hdfs storagepolicies -getStoragePolicy -path xxx # 获取路径的存储策略

hdfs storagepolicies -unsetStoragePolicy -path xxx # 取消本路径策略

小文件归档

把/input目录里的所有文件归档为 input.har 放到/output
hadoop archive -archiveName input.har -p /input /output

查看有哪些小文件
hadoop fs -ls har:///output/input.har

把里面的一个小文件复制到别处 才能使用
hadoop fs -cp har:///output/input.har/word.txt /other

集群数据迁移

两个namenode地址
bin/hadoop distcp hdfs://hadoop102:8020/user/atguigu/hello.txt hdfs://hadoop105:8020/user/atguigu/hello.txt