公司重新搭建CDH6.3.0,并把舊集群Hive1.1遷移新集群Hive2.1,記錄一下過程。
一. 遷移Hive數據和MySQL中的matastore
通過DistCp拷貝Hive數據到新集群,并從MySQL中導出Hive的元數據上傳到新集群,最后在新集群MySQL中導入Hive元數據,并更新Hive版本,修改信息。
1. 遷移Hive數據和MySQL中的matastore
版本差異大,使用htfp
hadoop distcp -skipcrccheck -update htfp://hadoop-master-001:50070/user/hive/*
hdfs://cdh-master-001:8020/user/hive
hadoop distcp -skipcrccheck -update webhdfs://hadoop-master-001:50070/user/hive/*
webhdfs://cdh-master-001:50070/user/hive
2. 在源集群上MySQL導出Hive metastore
mysqldump -uroot -p123456 --databases hive > mysql_hive.sql
3. 在新集群使用Hive用戶導入metastore
mysql -uhive -p123456 --default-character-set=utf8 hive < mysql_hive.sql
4. 升級Hive庫
Hive版本相同不用升級。要根據版本序列升級,不能跨版本。
mysql -uroot -proot risk -hcdh-master < mysqlupgrade-1.1.0-to-1.2.1.mysql.sql
mysql -uroot -proot risk -hcdh-master < mysqlupgrade-1.2.1-to-2.0.0.mysql.sql
mysql -uroot -proot risk -hcdh-master < mysqlupgrade-2.0.0-to-2.1.1.mysql.sql
5. 修改metastore的集群信息
如果新集群名字跟源集群相同可以不用修改,否則需要修改hive庫的DBS和SDS表內容。
use hive;
select * from DBS;
update DBS set DB_LOCATION_URI = replace(DB_LOCATION_URI,
'hdfs://hadoop-master-001:8020',
'hdfs://cdh-master-001:8020') ;
update SDS set LOCATION = replace(LOCATION ,
'hdfs://hadoop-master-001:8020',
'hdfs://cdh-master-001:8020') ;
二. export / import +?distcp
使用export將Hive表及元數據文件導出到HDFS文件系統,通過Distcp命令將導出的元數據文件遷移到新集群的HDFS文件中,最后在新集群中通過import命令導入表。
1. 導出Hive數據到HDFS
導出的數據包括_metadata和data文件夾,如果有分區,data為分區文件夾
#!/bin/bash
DB=$1
tables=$(hive -e "use $DB; show tables;")
hive -e "use $DB;show tables" | awk '{printf "export table %s to |/tmp/bak/hive-export/%s|;
",$1,$1}'
| sed "s/|/'/g" > /user/bak/hive/hive-export.hql
hive -database $DB -f "/hadoop/bak/hive/hive-export.hql"
2. 拷貝導出的Hive數據到新集群
注意:導出數據之前,需要先確認hive的數據格式是orc還是parquet格式,因為orc格式hive的高版本不兼容低版本
原集群是CDH5.7、Hadoop2.6、HDFS端口50070,新集群是CDH6.3.0、Hadoop3.0、HDFS端口9870。采用webhdfs協議傳輸,記得原集群HDFS集群需要添加新集群服務器的host。
hadoop distcp webhdfs://hadoop-master-001:50070/tmp/hive-export/
webhdfs://cdh-master-001:9870/tmp/hive-export/
3. 修改導出腳本為導入腳本
cp hive_export.hql hive_import.sql
sed -i 's/export table/import table/g' hive-import.hql
sed -i 's/ to / from /g' hive-import.hql
4. 上傳導入腳本后在新集群執行
hive -database cp_data -f hive-import.sql
三、數據遷移(因為新集群和阿里云的對象存儲打通了,所以我的數據都放到了oss上)
1.按項目遷移代碼
-----------------------格式轉換后臺shell腳本
#!/bin/bash
echo 'start'
for t in `cat flag.txt`
do
echo "$t"
table=$t
echo '' >./$table.sql
echo '
use tools;
set spark.dynamicAllocation.enabled=false;--關閉executor動態分配功能,防止單個任務分配的資源太多
set spark.executor.instances=3;--設置可用的executor個數(3個)
set spark.executor.cores=5;--設置executor擁有的core數(5C)
set spark.executor.memory=8000000000b;--設置executor擁有的內存數(8G)
set mapreduce.map.memory.mb=3072;
set mapreduce.reduce.memory.mb=3072;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=10000;
set hive.exec.max.dynamic.partitions=10000;
set hive.exec.max.created.files=10000;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set mapred.max.split.size=50000000;
set mapred.min.split.size.per.node=50000000;
set mapred.min.split.size.per.rack=50000000;
' >>./$table.sql
echo "insert overwrite table ${table}_tran partition(pt) select * from $table;" >>./$table.sql
done
echo 'end'
--------------------------------把hdfs文件從老集群遷移到新集群--------------------------------
--在新集群worker節點上執行
--刪除新集群上的路徑
#!/bin/bash
echo 'start'
for t in `cat move_flag.txt`
do
echo "$t"
table=$t
hadoop distcp hdfs://hadoop-master-001:50070/group/user/tools/meta/hive-temp-table/${table}_tran/* oss://bigdata/group/user/tools/meta/hive-temp-table/${table}
done
echo 'end'
nohup ./move.sh &> move.log &
nohup ./move2.sh &> move2.log &
2.重新建表及導入數據?
--重新創建表
drop table if exists xxx;
create external table if not exists xxx (
`xxx` string comment 'xxx',
`xxx` string comment 'xxx'
`xxx` string comment 'xxx',
`xxx` string comment 'xxx',
`xxx` string comment 'xxx',
`xxx` string comment 'xxx',
`xxx` string comment 'xxx',
`xxx` string comment 'xxx'
)
comment 'xxx'
PARTITIONED BY (pt STRING)
row format delimited
fields terminated by '国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码