大數據集羣遷移記錄

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

相關文章
相關標籤/搜索