?????? 由于集群故障,連接不上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. 在生產選取一臺主機備份維表數據和元數據, 并寫批量腳步,如果以后發生類似事情,直接跑腳步,來修復