文章中用到的脚本及脚本的执行log在文末的附件中应该能找到。node
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
linux