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

1、背景介紹

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

  然而,考慮到原大數據平臺數據量並非很大,能夠經過將原大數據平臺數據導出到CSV文件,而後再將CSV文件導入到ODPS平臺。在這個過程當中踩的坑有點多,因此想寫篇文檔做爲記錄。sql

2、大數據平臺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/目錄下載到本地。bash

3、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中的建表語句粘貼到命令行執行便可建立表。spa

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語句一塊兒提交執行。
  在解決完上述兩個問題後,在重複步驟二,在命令行中批量執行建表語句。

4、本地數據導入到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錯誤。

  解決方法:
  經檢查原始數據,能夠發現數據中存在列,該列的值中含有逗號。而數據導入按逗號做爲列分隔符,因此會出現數據列數大於表的列數。由於這樣的表比較少,因此直接修改數據中那一列中的逗號爲其餘符號,而後再導入。 
相關文章
相關標籤/搜索