一、背景介绍

  最近几天,接到公司的一个将当前大数据平台数据全部迁移到阿里云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 ,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错误。

  解决方法:
  经检查原始数据,可以发现数据中存在列,该列的值中含有逗号。而数据导入按逗号作为列分隔符,所以会出现数据列数大于表的列数。因为这样的表比较少,所以直接修改数据中那一列中的逗号为其他符号,然后再导入。 

大数据平台Hive数据迁移至阿里云ODPS平台流程与问题记录的更多相关文章

  1. 直压到亚马逊AWS平台,阿里云OSS平台或者腾讯云COS平台

    GTX Compressor (直压上云技术预览版) Powered by GTXLab of Genetalks. 技术预览版本下载地址: https://github.com/Genetalks/ ...

  2. 实战:基于 Spring 的应用配置如何迁移至阿里云应用配置管理 ACM

    最近遇到一些开发者朋友,准备将原有的Java Spring的应用配置迁移到 阿里云应用配置管理 ACM 中.迁移过程中,遇到不少有趣的问题.本文将通过一个简单的样例来还原迁移过程中遇到的问题和相关解决 ...

  3. 阿里云物联网平台体验(NetGadgeteer+C#篇)

    目前对接阿里云物联网平台有多种软件和硬件,可以有多种不同语言来实现对接,比如c/c++,Java,JS,Python,C#等等,不过C#版本只有PC对接云平台的代码,嵌入式的目前还没有看到,所以本篇文 ...

  4. 阿里云物联网平台体验(树莓派+Nodejs篇)

    我们在<阿里云物联网平台体验(树莓派+python篇)>里,写了通过Python语言开发云到端的物联网程序,本篇文章将介绍通过nodejs来实现类似功能. 同样在阿里云官方文档里已经有了一 ...

  5. 阿里云物联网平台体验(树莓派+Python篇)

    阿里云物联网平台体验(树莓派+Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作.但是同时也见证了 ...

  6. 阿里云 IOT 对接设备开发 C# 开发设备对接阿里云 IOT平台

    一,创建阿里云 IOT 产品.设备 目前阿里云每月赠送 100 万条流量,可以免费使用基础版.高级版,开通后即可免费使用. 阿里云 IOT 平台地址 https://iot.console.aliyu ...

  7. 阿里云物联网平台: Android 连接阿里云物联网平台

    说明 这节是是为下一节做铺垫的 只要是按照我提供的学习路线一节一节的认认真真学过来的,这节就十分的简单 有了前两节的基础,这节呢咱让Android 连接阿里云物联网平台 使用这节的代码  https: ...

  8. 将个人博客从GitHub迁移至阿里云服务器过程总结

    让我们先回顾下前两篇博客: 程序员如何从0到1搭建自己的技术博客 在个人博客中优雅的使用Gitalk评论插件 通过前两篇博客,我们了解了如何快速的从0到1搭建一个个人博客并使用了Gitalk评论插件, ...

  9. 阿里云ODPS <====>蚂蚁大数据

    1.命令行客户端工具的安装参考文档:http://repo.aliyun.com/odpscmd/?spm=a2c4g.11186623.2.17.5c185c23zHshCq 2.创建和查看表:ht ...

随机推荐

  1. dsp实验一 常见问题教程

    1.选择合适阅读材料:卖油翁.将进酒,等. 2.录音设备三选一:某种电脑声卡+线上convert/楼月mp3录音软件+格式工厂(我选的)/Matlab (注:这是目前已知的方法,我只用了第二个) 3. ...

  2. MySQL数据库 Too many connections

    出现这种错误明显就是 mysql_connect 之后忘记 mysql_close:当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个, ...

  3. javascript基础 之 jQuery教程

    1,jQuery是js的一个库 基本功能: HTML元素获取和操作,html事件操作. css操作. js特效和动画 DOM遍历和修改 ajax Utilities 特性: js2以上的版本不支持ie ...

  4. 2018-2019-2 网络对抗技术 20165237 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165237 Exp3 免杀原理与实践 一.实践目标 1.1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳 ...

  5. PostgreSQL学习笔记(二)-安装pgAdmin

    继上篇安装PostgreSQL后,我们需要安装一个PostgreSQL的图形化管理工具. pgadmin管理工具 创建Python的虚拟环境 cd /root/venv python -m venv ...

  6. L2-013 红色警报 (25 分) (并查集)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805063963230208 题目: 战争中保持各个城市间的连通性非 ...

  7. Python字符串的两种方式——百分号方式,format的方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  8. hikey960编译记录

    arm64内核编译命令: 1 make ARCH=arm64 hikey960-defconfig 2 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- ...

  9. Centos7安装JDK+部署Tomcat8

    Centos7下JDK+Tomcat的部署: 1.安装JDK 1.1 通过以下命令获得java JDK列表 yum -y list java* 1.2 通过yum安装JDK yum -y instal ...

  10. C# 最全的文件工具类FileHelper

    using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Lin ...