文章中用到的腳本及腳本的執行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