hdfs被格式化的后果與補救

?????? 由于集群故障,連接不上hdfs,datanode節點部分掛,重新啟動單個節點和namenode也不好使,給出方法格式化namenode,之后啟動namenode和datanode,但是由于hdfs中有數據,格式化前沒有備份數據,導致了數據塊全部丟失,至此,整個集群中表數據都沒有了,悲劇的開始。

?????? 為了處理這個問題,評估了事件,由于元數據存儲在mysql中,所以表還在,只是hdfs表數據存儲在hdfs中的路徑和文件沒有了。

1.業務數據補充

?????? hive庫的訪問通過etl工具,所以業務數據的補充,直接通過etl工具。

?????? 由于hdfs文件目錄被刪除,所以第一步,建立目錄:

?????? hadoop fs -mkdir /user/hive/warehouse/hive_test_table

刪分區,建立分區:

?????? hive -e "alter table hive_test_table drop partition (op_month=201702,op_time= 20170215,op_hour=2017021514);"

?????? hive -e "alter table hive_test_table add partition (op_month=201702,op_time= 20170215,op_hour=2017021514);"

把etl生成的文件put到hdfs文件目錄:

?????? hdfs dfs -put /test/hive_test_table.txt /user/hive/warehouse/hive_test_table/op_month=201702/op_time=20170215/op_hour=2017021514

把表數據添加到其他表:

??????? INSERT INTO hive_test PARTITION (op_month=201702,op_time=20170215,op_hour=2017021514)

??????? SELECT CUST_ID,USER_ID,ACCT_ID? from? hive_test_table where? op_month='201702' AND op_time= '20170215' AND op_hour='2017021514';


2.維度表數據導入

查詢維度表的表結構:

??????? hive -e "desc formatted bts_type;"

顯示:

分割符

所以在生成導入文件的時候需要按照;分割,生成文件bts_type.txt

對bts_type.txt轉碼:

?????? iconv -f GBK -t UTF-8 bts_type.txt? -o? ? bts_type.txt

建立文件目錄:

?????? hadoop fs -mkdir? /user/hive/warehouse/bts_type

put文件到hdfs指定路徑下:

?????? hdfs dfs -put /test/bts_type.txt? /user/hive/warehouse/bts_type/bts_type.txt

?????? 由于集群中hdfs數據塊都被刪除了,維度表數據手動導入,業務數據表數據可以通過etl工具導入,為了避免類似問題發生,對集群數據的備份,和集群監控還需要完善現有的維護方案。

?????? 1. 采用svn管理備份元數據與維度表數據文件

?????? 2. 集群中獲取zookeeper中namenode的狀態,并監控namenode,datanode,zookeeper存活節點,出問題立刻發短信告警

?????? 3. 在生產選取一臺主機備份維表數據和元數據, 并寫批量腳步,如果以后發生類似事情,直接跑腳步,來修復

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容