【源】从零自学Hadoop(17):Hive数据导入导出,集群数据迁移下

阅读目录

  • 将查询的结果写入文件系统
  • 集群数据迁移一
  • 集群数据迁移二
  • 系列索引

本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

文章是哥(mephisto)写的,SourceLink

上一篇,我们介绍了Hive的数据多种方式导入,这样我们的Hive就有了数据来源了,但有时候我们可能需要纯粹的导出,或者集群Hive数据的迁移(不同集群,不同版本),我们就可以通过这两章的知识来实现。

   下面我们开始介绍hive的数据导出,以及集群Hive数据的迁移进行描述。

将查询的结果写入文件系统

一:说明

  将上篇中从其他表导入语法进行简单的修改,就可以将查询的结果写入到文件系统。

二:语法:

Standard syntax:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
  [ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
  SELECT ... FROM ...

Hive extension (multiple inserts):
FROM from_statement
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1
[INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...

row_format
  : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
        [NULL DEFINED AS char] (Note: Only available starting with Hive 0.13)

三:写入到本地

  如果使用LOCAL,则数据会写入到本地

四:写入到集群

  如果不使用LOCAL,则数据会写到指定的HDFS中,如果没写全路径,则使用Hadoop的配置项fs.default.name (NameNode的URI)。

五:实战

  修改tmp文件夹权限(这里只是测试,所以使用最大权限)

chmod 777 tmp

  进入Hive

sudo -u hdfs hive

  将上一篇中的score表数据导出到本地

insert overwrite local directory  ‘/data/tmp/score‘ select * from score;

  我们可以看到/data/tmp/score/目录下有文件。

cd /data/tmp/scorell

  这样我们就把hive的数据导出到本地了。

  下面我们使用不带local参数的命令,将hive表数据导到hdfs中

insert overwrite  directory  ‘/data/tmp/score‘ select * from score;

  我们使用hdfs的ls命令查看

hadoop fs -ls /data/tmp/score

  这里文件只有一个,和上面的不一样,但总的内容是一样的,上面同样的数据导出,有时候也只有一个文件。这里就不做考究了。

集群数据迁移一

一:介绍

  在官网里,我们可以看到EXPORT和IMPORT,该功能从Hive0.8开始加入进来。

二:Export/Import

  导出命令根据元数据导出表或者分区,输出位置可以是另一个Hadoop集群或者HIVE实例。支持带有分区的表。导出的元数据存储在目标目录,数据文件存储在子目录。

  导入导出的源和目标的元数据存储DBMS可以是不同的关系型数据库。

三:Export语法

EXPORT TABLE tablename [PARTITION (part_column="value"[, ...])]
  TO ‘export_target_path‘

四:Import语法

IMPORT [[EXTERNAL] TABLE new_or_original_tablename [PARTITION (part_column="value"[, ...])]]
  FROM ‘source_path‘
  [LOCATION ‘import_target_path‘]

五:官方例子

  简单导入导出

export table department to ‘hdfs_exports_location/department‘;
import from ‘hdfs_exports_location/department‘;

  改名导入导出

export table department to ‘hdfs_exports_location/department‘;
import table imported_dept from ‘hdfs_exports_location/department‘;

  分区导出

export table employee partition (emp_country="in", emp_state="ka") to ‘hdfs_exports_location/employee‘;
import from ‘hdfs_exports_location/employee‘;

  分区导入

export table employee to ‘hdfs_exports_location/employee‘;
import table employee partition (emp_country="us", emp_state="tn") from ‘hdfs_exports_location/employee‘;

  指定导入位置

export table department to ‘hdfs_exports_location/department‘;
import table department from ‘hdfs_exports_location/department‘
       location ‘import_target_location/department‘;

  作为外部表导入

export table department to ‘hdfs_exports_location/department‘;
import external table department from ‘hdfs_exports_location/department‘;

集群数据迁移二

一:介绍

  虽然官方的Export/Import命令很强大,但在实际使用中,可能是版本的不同,会出现无法导入的情况,自己在这块也琢磨了下,总结出自己的一套带有分区的Hive表数据迁移方案,该方案在Cloudera和Hontorworks的集群中成功迁移过,Hive版本也不一致。

二:导出数据

  由于Cloudera的发行版本CDH-5.3.3的Hive版本低于0.8所以用这个作为数据源。

  创建带分区表score

create table score (
  id                int,
  studentid       int,
  score              double
)
partitioned by (openingtime string);

  根据上一篇中导入数据的方式导入7,8月数据

load data local inpath ‘/data/tmp/score_7.txt‘ overwrite into table score PARTITION (openingtime=201507);

  参考我们上面的导出到本地还是放在/data/tmp/score下

insert overwrite local directory  ‘/data/tmp/score‘ select * from score;

三:迁移数据

  在另外一个集群新建/data/tmp目录

 mkdir  -p /data/tmp/score

  拷贝数据

 scp /data/tmp/score/* [email protected]:/data/tmp/score/

  查看

cd /data/tmp/score
ll

四:创建分区表和没有分区的临时表

  被导入的集群是Hortonworks的HDP-2.7.1发行版本。

  分区表就是我们最终的目标表,没有分区的临时表时过度用的。

  进入Hive

sudo -u hdfs hive

  创建带分区的表

create table score (
  id                int,
  studentid       int,
  score              double
)
partitioned by (openingtime string);

  创建不带分区的临时表

 create table score1(
     id int,
     studentid int,
     score double,
     openingtime string);

五:将数据导入临时表

load data local inpath ‘/data/tmp/score‘ into table score1;

  我们查下导进来的数据

select * from score1;

六:从临时表导入到分区表

set  hive.exec.dynamic.partition=true;
set  hive.exec.dynamic.partition.mode=nonstrict;
set  hive.exec.max.dynamic.partitions.pernode=10000;
#导入
insert overwrite table score partition(openingtime) select * from score1;

查询

select * from score;

我们在hdfs中查看下hive的文件

hadoop fs -ls -R /apps/hive/warehouse/score

可以明显的看到根据openingtime分区了。

七:删除临时表

drop table score1

八:删除临时数据

rm -rf /data/tmp/score

这样我们的Hive集群数据迁移告一段落。

--------------------------------------------------------------------

  到此,本章节的内容讲述完毕。

系列索引

  【源】从零自学Hadoop系列索引

本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

文章是哥(mephisto)写的,SourceLink

时间: 2024-10-09 10:22:27

【源】从零自学Hadoop(17):Hive数据导入导出,集群数据迁移下的相关文章

将数据导入MongoDB集群

import sys import json import pymongo import datetime from pymongo import MongoClient client = MongoClient('mongodb://192.168.1.31:20000,192.168.1.34:20000') db = client.RHY collection = db.ST_RIVER_R f = open("D:/bigdata/st_river_r.CSV") line =

Redis异构集群数据在线迁移工具Redis-Migrate-Tool【转】

摘要:Redis-Migrate-Tool(后面都简称RMT),是唯品会开源的redis数据迁移工具,主要用于异构redis集群间的数据在线迁移,即数据迁移过程中源集群仍可以正常接受业务读写请求,无业务中断服务时间.这篇blog主要内容包括工具特性简介.使用方法以及注意的要点.关于实现的原理,可以自行阅读源码理解或者联系我们交流. 目前该项目已经开源在GitHub上(https://github.com/vipshop/redis-migrate-tool 链接入口可点击原文阅读). 一.RMT

Oracle数据导入导出基本操作示例

Oracle数据导入导出基本操作示例 数据导出 a.将数据库orcl完全导出,用户名user 密码password 导出到D:\dc.dmp中 exp user/[email protected]   file=d:\dc.dmp    full=y full=y   表示全库导出 b.将数据库中user1和user2用户导出 exp user/[email protected]  file=d:\dc.dmp    owner=(user1,user2) full方式可以备份所有用户的数据库对

搭建 MongoDB 服务器,MongoDB 基本使用,数据导入导出

MongoDB 1.1软件介绍 ? 介于关系数据库和非关系数据库之间的产品 – 一个基于分布式文件存储的数据库. – 由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. – MongoDB 将数据存储为一个文档,数据结构由键值(key=>value) 对组成. – MongoDB 文档类似于 JSON 对象.字段值可以包含其他文档,数组及文档数组. 1.2软件特点 – 安装简单 – 面向文档存储,操作比较简单容易 – 支持丰富的查询表达 – 可以设置任何属性的索引 –

【源】从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上

阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇,我们介绍了Hive的表操作做了简单的描述和实践.在实际使用中,可能会存在数据的导入导出,虽然可以使用sqoop等工具进行关系型数据导入导出操作,但有的时候只需要很简便的方式进行导入导出即可   下面我们开始

【源】从零自学Hadoop(15):Hive表操作

阅读目录 序 创建表 查看表 修改表 删除表 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇,我们介绍了Hive和对其进行了安装,下面我们就初步的使用hive进行讲解.   下面我们开始介绍hive的创建表,修改表,删除表等. 创建表 一:Hive Client 在Terminal输入hive命令需要安装Hive Client. 二:进入 切换用户,进入hive su h

【源】从零自学Hadoop(14):Hive介绍及安装

阅读目录 序 介绍 安装 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 本系列已经有一个多月没更新了,期间涉及到找相关对应的工作,所幸的事,得到了几个offer,后来综合考虑来到了目前这家工作.希望在接下来的时间里,能融入整个社区中去,做出自己略微的贡献. 上一篇,我们列举了hadoop常用的命令,本应该给大家实战下命令的使用的,后来还是想大家自己下去试验试验,接下来开始初略介

【源】从零自学Hadoop(12):Hadoop命令中

阅读目录 序 HDFS Commands User Commands Administration Commands Debug Commands 引用 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇,我们对Hadoop命令进行了简略的列举,但是Hadoop命令特多,还有一部分没有列举完,官网基本都是英文的,所以只能拙略的翻译下,妄大家见谅. 下面,我们就开始对Hadoo

【源】从零自学Hadoop(08):第一个MapReduce

阅读目录 序 数据准备 wordcount Yarn 新建MapReduce 示例下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇,我们的Eclipse插件搞定,那开始我们的MapReduce之旅. 在这里,我们先调用官方的wordcount例子,然后再手动创建个例子,这样可以更好的理解Job. 数据准备 一:说明 wordcount这个类是对不同的word进行统计个