工程师计划 大数据 hadoop(集群,hdfs迁移,增加节点)

hadoop(集群,hdfs迁移,增加节点)

hadoop(集群,hdfs迁移,增加节点)

1.准备三台机器(jdk已安装 java version “1.8.0_191”)

192.168.94.10 hp1
192.168.94.11 hp2
192.168.94.12 hp3
#配置免密
三台机器都要执行
ssh-keygen   #生成公钥,私钥
ssh-copy-id hp1
ssh-copy-id hp2
ssh-copy-id hp3

2.在hp1上传解压

tar -xvf hadoop-2.8.5.tar.gz -C /opt
mv hadoop-2.8.5 hadoop

3.配置环境变量

export  HADOOP_HOME=/opt/hadoop
export  PATH=$PATH:$HADOOP_HOME/bin
export  PATH=$PATH:$HADOOP_HOME/sbin

4.配置hadoop环境脚本的java_home

cd /opt/hadoop/etc/hadoop
vim hadoop-env.sh
export JAVA_HOME=/opt/jdk
vim mapred-env.sh
export JAVA_HOME=/opt/jdk
vim yarn-env.sh 
export JAVA_HOME=/opt/jdk

5.创建hadoop存储目录

mkdir -p  /hadoop_data/tmp
mkdir -p  /hadoop_data/dfs/name
mkdir -p  /hadoop_data/dfs/data

6.配置主从节点列表

cd /opt/hadoop/etc/hadoop
vim slaves
hp1
hp2
hp3

7.修改hadoop配置文件

7.1普通集群配置
cd /opt/hadoop/etc/hadoop
#修改core-site.xml----------------------------------------------------------------
vim core-site.xml

<configuration>
    <!-- 指定namenode的hdfs协议的文件系统通信地址,默认是file:///本地文件系统  需要我们改成 hdfs://分布式文件存储系统 -->
    <!-- 可以指定一个主机+端口,也可以指定为一个namenode服务(这个服务内部可以有多台namenode实现ha的namenode服务) -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hp1:9000</value>
    </property>

    <!-- 临时数据存放的位置 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop_data/tmp</value>
    </property>

    <!-- 缓冲区大小,实际工作中根据服务器性能动态调整 -->
    <property>
        <name>io.file.buffer.size</name>
        <value>4096</value>
    </property>
    
    <!--  开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟  10080 相当与7天  60*24*7-->
    <property>
        <name>fs.trash.interval</name>
        <value>10080</value>
    </property>
    
</configuration>

#修改hdfs-site.xml----------------------------------------------------------------
vim hdfs-site.xml

<configuration>
    <!-- NameNode 数据的存放地点。也就是namenode元数据存放的地方,记录了hdfs系统中文件的元数据-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/hadoop_data/dfs/name</value>
    </property>

    <!-- NameNode 的访问地址 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hp1:50070</value>
    </property>
    
    <!-- DataNode 数据的存放地点。也就是block块存放的目录了-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/hadoop_data/dfs/data</value>
    </property>

    <!-- HDFS 的副本数设置。也就是上传一个文件,其分割为block块后,每个block的冗余副本个数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    
    <!-- HDFS 的权限控制 -->
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
    <!-- 文件存储的block块大小 -->
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value>
    </property>
    <property>
        <!-- 开启hdfs的web访问接口。默认端口是50070 , 一般不配 , 使用默认值-->
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

#修改yarn-site.xml----------------------------------------------------------------
vim yarn-site.xml

<configuration>
    <!-- NodeManager的通信方式 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 日志的聚合功能,方便我们查看任务执行完成之后的日志记录 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 聚合日志的保存时长 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

    <!--yarn总管理器的IPC通讯地址-->
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hp1:8032</value>
    </property>

    <!--yarn总管理器调度程序的IPC通讯地址-->
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hp1:8030</value>
    </property>

    <!--yarn总管理器的IPC通讯地址-->
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hp1:8031</value>
    </property>

    <!--yarn总管理器的IPC管理地址-->
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>hp1:8033</value>
    </property>

    <!--yarn总管理器的web http通讯地址-->
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hp1:8088</value>
    </property>
    
</configuration>
#修改mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml 
<configuration>
    <!-- 指定mr框架为yarn方式,Hadoop二代MP也基于资源管理系统Yarn来运行 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    
    <!-- 开启mapreduce的小任务模式,用于调优 -->
    <property>
        <name>mapreduce.job.ubertask.enable</name>
        <value>true</value>
    </property>
    
    <!-- 配置mapreduce的jobhistory内部通讯地址。可以查看我们所有运行完成的任务的一些情况 -->
    <property>  
        <name>mapreduce.jobhistory.address</name>
        <value>hp1:10020</value>    
    </property>

    <!-- 配置mapreduce 的jobhistory的访问地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hp1:19888</value>
    </property>
    
</configuration>

7.2.高可用集群配置与启动方式
#core-site.xml-----------------------------------------------------------------
<configuration> 
  <!-- 指定hdfs的nameservice为ns1 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://ns1/</value>
  </property>
  <!-- 指定hadoop临时目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/hadoop_data/tmp</value>
  </property> 
  <!-- 指定zookeeper地址 --> 
  <property> 
    <name>ha.zookeeper.quorum</name>
    <value>hp1:2181,hp2:2181,hp3:2181</value> 
  </property>
</configuration>
#hdfs-site.xml-------------------------------------------------------------------

<configuration>
  <!-- 设置副本个数 -->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <!-- 设置namenode.name目录 -->
  <property>  
    <name>dfs.namenode.name.dir</name>
    <value>file:/hadoop_data/dfs/name</value>  
  </property> 
  <!-- 设置namenode.data目录 -->
  <property>  
    <name>dfs.datanode.data.dir</name>  
    <value>file:/hadoop_data/dfs/data</value>  
  </property> 
  <!-- 开启webHDFS -->
  <property>
    <name>dfs.webhdfs.enabled</name> 
    <value>true</value> 
  <!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 --> 
  </property>
  <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
  <property>
    <name>dfs.nameservices</name>
    <value>ns1</value>
  </property>
  <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
  <property>
    <name>dfs.ha.namenodes.ns1</name>
    <value>hp1,hp2</value>
  </property>
  <!-- nn1的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.ns1.hp1</name>
    <value>hp1:9000</value>
  </property>
  <!-- nn1的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.ns1.hp1</name>
    <value>hp1:50070</value>
  </property>
  <!-- nn2的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.ns1.hp2</name>
    <value>hp2:9000</value>
  </property>
  <!-- nn2的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.ns1.hp2</name>
    <value>hp2:50070</value> 
  </property>
  <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
   <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://hp1:8485;hp2:8485;hp3:8485/ns1</value>
    </property>
   <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
     <name>dfs.journalnode.edits.dir</name>
      <value>/opt/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> 
   <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
 <property>
    <name>dfs.ha.fencing.methods</name>
    <value>
    sshfence
    shell(/bin/true)
    </value>
  </property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/coffee/.ssh/id_rsa</value>
 </property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
  <name>dfs.ha.fencing.ssh.connect-timeout</name>
  <value>30000</value>
</property>
</configuration>

#mapred-site.xml---------------------------------------------------------------
<configuration>
  <!-- 指定mr框架为yarn方式 -->
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
    </property>
 </configuration>    

#yarn-site.xml----------------------------------------------------------------
<configuration>
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2048</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2048</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>1</value>
  </property>
  <!-- 开启RM高可用 -->
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>
  <!-- 指定RM的cluster id -->
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yrc</value>
  </property>
  <!-- 指定RM的名字 -->
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>
  <!-- 分别指定RM的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>hp1</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hp2</value>
  </property>
  <!-- 指定zk集群地址 -->
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hp1:2181,hp2:2181,hp3:2181</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>

#集群配置启动
#1.分发包
scp /opt/hadoop hp2:/opt
scp /opt/hadoop hp3:/opt
#2.启动journalnode(三个节点都要启动)
cd /opt/hadoop
sbin/hadoop-daemon.sh start journalnode
#运行jps命令检验,JournalNode进程
jps
#3.格式化HDFS
#在hp1上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/hadoop_data/tmp,然后将/hadoop_data/tmp拷贝到hp2的/hadoop_data/tmp/下。
scp -r tmp hp2:/hadoop_data/
##也可以这样,建议   在害hp2 上执行 
hdfs namenode -bootstrapStandby
#4.格式化ZKFC(hp1上执行)
hdfs zkfc -formatZK
#5.启动
sbin/start-all.sh
#到此,hadoop-2.8.5配置完毕,可以统计浏览器访问:
        http://192.168.94.10:50070
        NameNode 'hp1:9000' (active)
        http://192.168.94.11:50070
        NameNode 'hp2:9000' (standby)

8.分发安装包

scp /opt/hadoop hp2:/opt
scp /opt/hadoop hp3:/opt

9.格式化

#在hp1上格式化hdfs
hdfs namenode -format

10.启动hadoop

start-all.sh
#停止命令
stop-all.sh

11.hdfs跨集群迁移

11.1.查看hdfs端口

在Hadoop配置文件中查看core-site.xml

<configuration>
     <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.94.10:9000</value>
    </property>
</configuration>
11.2.查看hdfs文件大小
#列出所有hdfs文件
hdfs dfs -ls /
#查看hdfs文件大小
hdfs dfs -du -h /
11.3.使用distcp迁移数据(如迁移服务器10上的jdk到服务器11)
hadoop distcp hdfs://192.168.94.10:9000/jdk hdfs://192.168.94.11:9000/
11.4.验证
#1.可以在10上的yarn上查看任务是否成功
http://192.168.94.10:8088/cluster/apps
#2.在服务器11上查看文件的大小进行对比
hdfs dfs -du -h /
12.集群增加节点

备份hdfs文件(如增加192.68.94.13 hp4)

hdfs dfs -get [-ignoreCrc] [-crc] < src> < localdst>
12.1.修改每个节点的hosts文件
vim /etc/hosts
#添加新增的节点映射
192.68.94.13 hp4
12.2.在每个节点上配置ssh免密登录,使得namenode登录新节点的时候不需要输入密码。
#原有节点桑执行
ssh-copy-id  ip(新增的IP) 
ssh-copy-id hp4
#新增节点执行
ssh-keygen
ssh-copy-id  ip(原集群节点IP和自身IP)
12.3.修改各节点的slaves文件,加入新节点的名称。
vim /hadoop/etc/hadoop/slaves
hp1
hp2
hp3
hp4
12.4.单独启动该节点上的Datanode进程和NodeManager进程。
 hadoop-daemon.sh start datanode

 yarn-daemon.sh start nodemanager
12.5.在web ui上验证(或者使用 hadoop dfsadmin -report)
12.6.问题,没有在web ui上体现
#刷新节点
hdfs dfsadmin -refreshNodes
#均衡节点数据
start-balancer.sh
#查看集群节点
hdfs dfsadmin -report
本文来自网络,不代表本网站立场,转载请注明出处。http://loadingok.com/2408.html
下一篇

已经没有了

© 2021 京ICP备2021027871号-1
联系我们

联系我们

18513870113

在线咨询: QQ交谈

邮箱: 1140136143@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部