zoukankan      html  css  js  c++  java
  • 大数据集群迁移记录

    文章中用到的脚本及脚本的执行log在文末的附件中应该能找到。

    nohup sh /tmp/discp/distcp.sh

    nohup sh /tmp/distcp/distcp.sh &>/tmp/distcp/distcp.log &

    hadoop distcp -update -log hdfs://master1:8020/discpLogs hdfs://slave11:8020/cdn hdfs://master1:8020/cdn

    #!/bin/bash
    hadoop distcp -update -log hdfs://master1:8020/discpLogs/ha hdfs://slave11:8020/ha hdfs://master1:8020/ha

    #迁移HBase

    hadoop distcp -log hdfs://master1:8020/discpLogs/hbase  webhdfs://slave11:50070/hbase/data/default hdfs://master1:50070/hbase/data/


    #snapsot方式:
    hbase shell

    snapshot  'myTable', 'myTableSnapshot-122112'

    hdfs dfs -du -h /hbase/data/

    #列出所有的HBase表:
    #!/bin/sh


    TMP_FILE=tmp_hbase_tables
    TABLES_FILE=hbase_tables.txt
     
    echo "list" | hbase shell > tmp_hbase_tables
    sleep 2
    sed '1,6d' $TMP_FILE | tac | sed '1,2d' | tac > $TABLES_FILE
    sed -i '$d' $TABLES_FILE
    sleep 2



    #创建HBase表快照
    count 'myTable', 'myTableSnapshot-122112'

    vim createSnapshot.sh


    #!/bin/sh

    TABLES_FILE=hbase_tables.txt
    snapshot=_snapshot_20190625

    #echo "list" | hbase shell > tmp_hbase_tables
     
    for table in $(cat $TABLES_FILE); do
            snapshotTable=$table$snapshot
            snapshotTable=${snapshotTable#*:}
            echo "snapshot '$table', '$snapshotTable'"  | hbase shell
            sleep 5
    done

    #后台执行
    nohup sh /tmp/distcp/hbase/createSnapshot.sh &>//tmp/distcp/hbase/createSnapshot.log &

    #查看snapshot
    hbase shell list_snapshots
    vim listSnapshots.sh


    #!/bin/sh


    TMP_FILE=tmp_hbase_snapshots
    TABLES_FILE=hbase_snapshots.txt
     
    echo "list_snapshots" | hbase shell > tmp_hbase_snapshots
    sleep 2
    sed '1,6d' $TMP_FILE | tac | sed '1,2d' | tac > $TABLES_FILE
    sed -i '$d' $TABLES_FILE
    sleep 2

    #然后执行脚本,导出HBase中的快照
    再在windows中删除第一列的空格,将文件重新传回linux(可以修改shell后省掉这一步骤<写文件时不要写第一列的空格>)

    #增加HBase配置(禁止自动的majorcompaction):
      <property>
        <name>hbase.hregion.majorcompaction</name>
          <value>0</value>
      </property>

    #迁移一张表:
    #   -copy-from hdfs://src-hbase-root-dir/hbase

    #表:cdn:AddDomainUseCDNDetail  33154 row(s) in 4.1160 seconds
    #在集群2执行 迁移snapshot
    hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot
     -snapshot AddDomainUseCDNDetail_snapshot_20190625
     -copy-from hdfs://slave11:8020/hbase
     -copy-to hdfs://master1:8020/hbase
     -mappers 20
     -bandwidth 500

    #echo '快乐大本营 2014 第1集'|cut -d' ' -f1

    #编写批量迁移快照的脚本
    vim sendSnapshots.sh


    #!/bin/bash
    snapshotListFile=hbase_snapshots.txt
    for line in $(cat $snapshotListFile |awk '{print $1}')
    do
        hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot $line -copy-from hdfs://slave11:8020/hbase -copy-to hdfs://master1:8020/hbase -mappers 20 -bandwidth 500
    done

    #在集群1后台执行
    nohup sh /tmp/distcp/hbase/sendSnapshots.sh &>//tmp/distcp/hbase/sendSnapshots.log &



    #在集群1执行
    hbase shell
    #先创建namespace
    create_namespace 'cdn'
    #再创建表
    create 'cdn:AddDomainUseCDNDetail', {NAME => 'd'}
    #禁用表
    disable 'cdn:AddDomainUseCDNDetail'
    #更改文件权限
    hdfs dfs -chmod -R 777 /hbase/archive/data/cdn
    hdfs dfs -chmod -R 777 /hbase/.hbase-snapshot
    #恢复快照
    restore_snapshot 'AddDomainUseCDNDetail_snapshot_20190625'
    #重新使能表
    enable 'cdn:AddDomainUseCDNDetail'
    #确认表是否恢复成功
    count 'cdn:AddDomainUseCDNDetail'
    #显示
    33154 row(s) in 5.3510 seconds

    hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles
     -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024
     hdfs://master1:8020/hbase/archive/data/cdn/AddDomainUseCDNDetail

     
    #恢复cnzz 快照  
    #先创建namespace
    create_namespace 'cnzz'
    #依次在HBase shell中(以hdfs用户执行)执行下列文本中的所有语句
    cnzz_tables_create.txt
    disable_cnzz_tables.txt
    alter_cnzz_table_TTL.txt

    #迁移Hive
    #在集群2执行
    hadoop fs -mkdir /tmp/dz

    #在namenode/second namenode中:
    su hdfs
    vi ~/.hiverc
    use cnzz;
    #生成导出脚本
    hive -e "show tables " | awk '{printf "export table %s to |/tmp/dz/%s|; ",$1,$1}' | sed "s/|/'/g" > ~/export.hql
    #区分出内部表和外部表
    内部表为hive_native_tables.txt
    #生成导出脚本(注意换行符要换成linux下的 )
    cat hive_native_tables.txt | awk '{printf "export table %s to |/tmp/dz/%s|; ",$1,$1}' | sed "s/|/'/g" > ~/export_native_tables.hql
    #导出Hive数据到hdfs(全量表,实际上操作的时候,遇到外部表会停止,所以上一步要区分出内部表,本步骤不做)
    nohup hive --hivevar hive.security.authorization.enabled=false -f ~/export.hql>~/export.log 2>&1 &
    #导出Hive内部表
    nohup hive --hivevar hive.security.authorization.enabled=false -f ~/export_native_tables.hql>~/export_native_tables..log 2>&1 &
    #将集群2的hive导出文件拷贝到集群1
    #创建集群1上的目录(集群1执行)
    hadoop fs -mkdir /tmp/dz

    #创建脚本 distcpHiveExportFiles.sh
    #!/bin/bash
    hadoop distcp -update -log hdfs://master1:8020/discpLogs/hiveExport_distCPFiles hdfs://slave11:8020/tmp/dz hdfs://master1:8020/tmp/dz

    #后台运行拷贝数据脚本
    nohup sh distcpHiveExportFiles.sh > /tmp/export_hive/hiveExport_distCPFiles_nohup.log 2>&1 &
    #监控后台运行日志
    tail -100f /tmp/export_hive/hiveExport_distCPFiles_nohup.log
    #拷贝完毕后,构造导入hive语句

    cp export_native_tables.hql import_native_tables.hql
    sed -i 's/export table/import table/g' import_native_tables.hql
    sed -i 's/ to / from /g' import_native_tables.hql

    #设置导入到新换进下的默认库
    #在集群1 namenode/second namenode中:
    su hdfs
    vi ~/.hiverc
    use cnzz;

    #导入数据
    nohup hive --hivevar hive.security.authorization.enabled=false -f ~/import_native_tables.hql>~/import_native_tables.log 2>&1 &

    #查看日志
    tail -100f import_native_tables.log
    grant all on database default to user hdfs;

    #由于集群1的Hive和集群2的Hive为同一个服务。所以重装了集群1的Hive(管理界面直接操作)
    #集群1的Hive创建cnzz表
    create database cnzz;
    #创建cnzz库的外部表(slave1执行hive)
    su hdfs
    mkdir /tmp/hiveImport
    cd /tmp/hiveImport/
    #slave1中设置默认数据库
    vi ~/.hiverc
    use cnzz;

    #将hive_external_table_DDL.txt 上传至/tmp/hiveImport
    #后台执行创建外部表的hql
    nohup hive --hivevar hive.security.authorization.enabled=false -f /tmp/hiveImport/hive_external_table_DDL.txt >hive_external_table_DDL.log 2>&1 &
    #观察日志输出确认创建完毕
    tail -100f hive_external_table_DDL.log

    #验证外部表是否创建成功,有数据表明创建成功
    select * from `hive_to_ha_source_dis_day` limit 1;
    select * from `ha_visit_page_day` limit 1;


    #将import_native_tables.hql上传至/tmp/hiveImport
    #后台导入Hive内部表
    nohup hive --hivevar hive.security.authorization.enabled=false -f /tmp/hiveImport/import_native_tables.hql >import_native_tables.log 2>&1 &
    #观察日志输出确认创建完毕
    tail -100f import_native_tables.log

    #确认表是否导入成功
    #hive shell中执行
    desc `ss_session_search_temp`;
    select * from `ss_session_search_temp` limit 1;












    #以下为测试,不做
    #先创建namespace
    create_namespace 'cnzz'
    #再创建表
    create 'cnzz:HA_EXIT_COLUMN_DAY', {NAME => 'd'}
    #禁用表
    disable 'cnzz:HA_EXIT_COLUMN_DAY'

    #更改文件权限
    hdfs dfs -chmod -R 777 /hbase/archive/data/cnzz
    hdfs dfs -chmod -R 777 /hbase/.hbase-snapshot
    #恢复快照
    restore_snapshot 'HA_EXIT_COLUMN_DAY_snapshot_20190625'
    #重新使能表
    enable 'cnzz:HA_EXIT_COLUMN_DAY'
    #确认表是否恢复成功
    count 'cnzz:HA_EXIT_COLUMN_DAY'
    #显示
    5661445 row(s) in 275.0210 seconds

    create 'cnzz:HA_EXIT_COLUMN_HOUR', {NAME => 'd'}


    附件列表:

    其他脚本及分析结果.7z

    脚本及执行结果.7z



  • 相关阅读:
    mysql------Windows7 64bit安装教程------下载mysql
    [org.springframework.context.annotation.ComponentScanBeanDefinitionParser] are only available on JDK 1.5 and higher 问题--MyEclipse设置JDK版本
    码云Gitee上新建项目教程
    远程桌面无法复制粘贴
    Submine Text3格式化HTML/CSS/JS代码
    FTP上传文件,报错java.net.SocketException: Software caused connection abort: recv failed
    在MyEclipse使用Git新建分支,并上传分支---图文教程
    使用Git Bash上传代码到新的分支
    使用Git Bash从Git上下载代码到本地以及上传代码到码云Git
    安装Git Bash图文教程
  • 原文地址:https://www.cnblogs.com/sixiweb/p/11344125.html
Copyright © 2011-2022 走看看