大數據平台Hive數據遷移至阿里雲ODPS平台流程與問題記錄


一、背景介紹

  最近幾天,接到公司的一個將當前大數據平台數據全部遷移到阿里雲ODPS平台上的任務。而申請的這個ODPS平台是屬於政務內網的,因考慮到安全問題當前的大數據平台與阿里雲ODPS的網絡是不通的,所以不能使用數據采集工作流模板。

  然而,考慮到原大數據平台數據量並不是很大,可以通過將原大數據平台數據導出到CSV文件,然后再將CSV文件導入到ODPS平台。在這個過程中踩的坑有點多,所以想寫篇文檔作為記錄。

二、大數據平台Hive數據導出到本地

  編寫export_data.sh腳本如下:

#!/bin/bash
#
#導出數據
hive -e "use swt_ods; show tables;" > /root/hive_data/table_names.txt
for table_name in `cat /root/hive_data/table_names.txt`
do
  hive -e "select * from swt_ods.$table_name;" > /root/hive_data/export_data/$table_name".csv"
  sed -i 's/\t/,/g' /root/hive_data/export_data/$table_name".csv"
done

  執行腳本,並將數據/root/hive_data/export_data/目錄下載到本地。

三、ODPS平台創建對應表

3.1 導出原大數據平台Hive建表語句

  編寫export_create_table_sql.sh腳本如下:

#!/bin/bash
#
#導出DDL
hive -e "use swt_ods; show tables;" > /root/hive_data/table_names.txt
for table_name in `cat /root/hive_data/table_names.txt`
do
  hive -e "show create table swt_ods.$table_name;" > /root/hive_data/export_create_table_sql/$table_name
  tac $table_name| sed 1,14d| tac > /root/hive_data/export_create_table_sql/$table_name".sql"
  rm -f $table_name
  echo ";" >> /root/hive_data/export_create_table_sql/$table_name".sql"
  cat /root/hive_data/export_create_table_sql/$table_name".sql" >> /root/hive_data/export_create_table_sql/all.sql
done

  執行腳本,並將/root/hive_data/export_create_table_sql/all.sql下載到本地。

3.2 在ODPS中創建對應的表

3.2.1 下載並配置MaxCompute 命令行工具

  點擊壓縮包鏈接下載

  在Windows中,解壓即安裝。在解壓目錄中配置odps_config.ini文件

  在解壓目錄odpscmd_public\bin目錄下,雙擊運行odpscmd.bat。

3.2.2 使用命令行創建表

  將all.sql中的建表語句粘貼到命令行執行即可創建表。

3.2.3 建表過程遇到的問題

   主要問題:
  一是,hive中建表的屬性的數據類型和MaxCompute的數據類型不對應。可以參考數據類型說明文檔, https://help.aliyun.com/document_detail/27821.html?spm=a2c4g.11186623.2.5.X8fmyl  。例如:decimal類型不需要添加精度,如果寫成decimal(a,b)則會報錯;MaxCompute沒有date類型,只有datetime類型;沒有char類型。所以要根據MaxCompute的數據類型,對hive的建表語句進行調整。

  二是,涉及到新數據類型(TINYINT、SMALLINT、 INT、 FLOAT、VARCHAR、TIMESTAMP BINARY),需在SQL語句前加語句set odps.sql.type.system.odps2=true;,執行時set語句和SQL語句一起提交執行。
  在解決完上述兩個問題后,在重復步驟二,在命令行中批量執行建表語句。

四、本地數據導入到ODPS平台

4.1 命令行使用tunnel命令導入數據

   使用命令行的方式批量導入數據到對應的表中。

        tunnel上傳數據的命令為:tunnel upload [options] <path> <[project.]table[/partition]>。詳見: https://help.aliyun.com/document_detail/27833.html?spm=a2c4g.11186623.2.1.rLlM5i  
        例如:tunnel upload C:\PATH\table_name.csv project_name.table_name;

4.2 導入數據遇到的主要問題

4.2.1 decimal類型數據無法插入空值

  問題描述:
  在導入數據時報format error, decimal nullcontent錯誤。

  可能需要加什么選項或者參數可以解決,但是在查看tunnel upload命令的詳細介紹后也沒有找到使用命令行來解決這個問題的方法。

  解決方法:
       使用MaxCompute Studio 導入數據可以解決上述問題。MaxCompute Studio安裝及介紹可參看文檔, https://help.aliyun.com/document_detail/50889.html?spm=a2c4g.11186623.6.745.ZVGpPm

4.2.2 原始數據存在的問題

  問題描述:

  在導入數據時報column missmatch錯誤。

  解決方法:
  經檢查原始數據,可以發現數據中存在列,該列的值中含有逗號。而數據導入按逗號作為列分隔符,所以會出現數據列數大於表的列數。因為這樣的表比較少,所以直接修改數據中那一列中的逗號為其他符號,然后再導入。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM