zoukankan      html  css  js  c++  java
  • 相同版本的CDH集群间迁移hdfs以及hbase

    前言

      由于项目数据安全的需要,这段时间看了下hadoop的distcp的命令使用,不断的纠结的问度娘,度娘告诉我的结果也让我很纠结,都是抄来抄去,

    还好在牺牲大量的时间的基础上还终于搞出来了,顺便写这个随笔,记录下。

    环境

      目前我们是两套同版本的CDH集群,集群内的节点通信使用的私网,提供浮动ip对外通信,也就是说,两个集群间的私网是不互通的,只能通过浮动ip

    进行通信。

    操作

    使用hadoop提供的distcp命令进行数据迁移 (数据源集群source和目标集群target版本相同)

    迁移hdfs的文件

    1)、将source的hosts配置复制到target的hosts中  , 注意使用source的节点的浮动ip

    2)、由于集群的节点是以私网的方式通信,如果是这种情况,必须开启namenode和datanode都绑定到了0.0.0.0 ,不然会报连接拒绝的异常

    2)、在target的namenode中进入hdfs用户 (为的是避免写hdfs出现 权限问题 ) 

    3)、在tartget的namenode中使用命令 hadoop distcp -overwrite -i webhdfs://sourceNN:50070/solr webhdfs://targetNN:50070/ 

      (说明: 中间的参数 不明白 ,可以问度娘或自己看官方文档,

     sourceNN source集群的NameNode, 由于不能使用私网通信,所以只能选择 webhdfs, 端口是cdh默认的端口50070)

    迁移hbase   推荐使用方案二 简单 效率高

    方案1

    4)、直接使用HBASE提供的exort和import工具,这些工具包含在HBASE的jar包中。他们使用MAPREDUCE进行导入导出操作,可以将部分或全部表写入到HDFS文件中。
    hadoop jar hbase-0.94.10.jar export -Dhbase.client.scanner.caching=100 weather_data /weather_data
    export命令后面,用户必须从左到右指定参数,不能省略这中间任何一个参数。

    5)、使用distcp命令将导出的文件复制到目标集群以后再使用导入命令进行导入。

    6)、HBASE数据导入
    hadoop jar hbase-0.94.10.jar import weather_data /weather_data


    方案2:

    7)、在tartget的namenode中执行 hadoop distcp webhdfs://sourceNN:50070/hbase/data/default hdfs://targetNN:50070/hbase/data/       迁移hbase中命名空间是default的所有的表

    8)、迁移完成之后,启动hbase集群服务,并执行如下的两个命令,恢复元数据,否则hbase集群不会识别新迁移过来的表:
    hbase hbck -fix
    hbase hbck -repairHoles
    注意 : 可能会有权限问题, 通过提升权限或换用户解决)


    总结

    1)、出现异常,根据异常问度娘,有条件最好问谷歌, 多看官方文档,检查是否参数使用正确。


    2)、假如distcp一个目录时出现 file not exist 异常,有可能是目录过大导致的,可以试着减少distcp的文件目录数量,假如还报异常,那还是检查下是不是参数有问题。

    3)、认真分析自己使用distcp碰到的问题, 不可盲从百度出的结果。

  • 相关阅读:
    dataGridView 滚动条 同步
    TextBox 只读
    grid 数据绑定后
    iframe 跳转问题
    TextBox 不可编辑
    C# 添加Excel 批注、如何在Excel的单元格里面增加批注
    dataSet 比较
    sql 游标、sql server 游标使用、实例
    Tab键
    计算文本框的字算、计算TextBox的字数长度
  • 原文地址:https://www.cnblogs.com/jechedo/p/5675862.html
Copyright © 2011-2022 走看看