大数据集群迁移记录

文章中用到的脚本及脚本的执行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|;\n",$1,$1}' | sed "s/|/'/g" > ~/export.hql
#区分出内部表和外部表
内部表为hive_native_tables.txt
#生成导出脚本(注意换行符要换成linux下的\n)
cat hive_native_tables.txt | awk '{printf "export table %s to |/tmp/dz/%s|;\n",$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



 

posted on 2019-08-13 10:01  sixiiweb  阅读(861)  评论(0编辑  收藏  举报

导航