【Hadoop-Distcp】通过Distcp的方式迁移Hive中的数据至存储对象

【Hadoop-Distcp】通过Distcp的方式迁移Hive中的数据至存储对象

  • 1)了解 Distcp
    • 1.1.Distcp 的应用场景
    • 1.2.Distcp 的底层原理
  • 2)使用 Distcp
  • 4)S3 可视化 App 下载
  • 4)S3 可视化 App 使用
  • 5)跨集群迁移 HDFS 数据

1)了解 Distcp

1.1.Distcp 的应用场景

DistcpHadoop自带的分布式复制程序,该程序可以从Hadoop文件系统间复制大量数据,也可以将大量的数据复制到Hadoop中。

一般情况下Distcp在企业中的应用场景:

  • Distcp 的典型应用场景是在两个HDFS集群之间传输数据(如果两个集群运行相同版本的 Hadoop,就非常适合使用 HDFS 方案)

  • Distcp还可以将HDFS中的数据和存储对象中的数据进行相互迁移

1.2.Distcp 的底层原理

Distcp是作为一个MapReduce作业来实现的,该复制作业是通过集群中并行运行的 map 来完成,此过程中没有 reduce

map的数量如何确定:

  • 常规情况下,每个 map 至少复制256MB数据(除非输入的总数据量较少,否则一个 map 就可以完成所有的复制)

    例如:

    将 1GB 大小的文件分给4个map任务。

  • 如果数据非常大则有必要限制 map 的数量进而限制带宽和集群的使用(默认情况下,每个集群节点最多分配20个map任务)

    例如:

    将 1000GB 的文件复制到一个由 100 个节点组成的集群,一共分配 2000 个 map 任务(每个节点 20 个 map 任务)所以每个map任务平均复制 512MB 数据。

  • 通过对 distcp 指定 -m 参数,可以减少分配的map任务数。

    例如:

    -m 1000 将分配 1000 个 map 任务,每个平均复制 1GB 数据

2)使用 Distcp

(1)获取Hive数据在HDFS中对应的location路径

  • 通过查看建表语句的方式

    show create table tableName;
    
  • 通过查看表详细信息的方式

    desc formatted tableName;
    

(2)通过distcp对获取到的location中的数据进行数据迁移(以S3为例)

参数说明

  • -D mapred.task.timeout:允许超时时间
  • -D mapreduce.job.name:任务名称
  • -Dfs.s3a.access.key:S3存储对象的accesskey
  • -Dfs.s3a.secret.key:S3存储对象的secretkey
  • -Dfs.s3a.endpoint:S3存储对象的endpoint
  • -Dfs.s3a.connection.ssl.enabled:是否关闭ssl连接
  • -Dfs.s3a.signing-algorithm:S3的操作算法,选择S3SignerType即可
  • HDFS的location路径
  • S3存储对象的路径
hadoop distcp \
-D mapred.task.timeout=60000000 \
-D mapreduce.job.name=%s \
-Dfs.s3a.access.key=B4840CE7567123456789 \
-Dfs.s3a.secret.key=123456789eYEh9+4h01ch123456789123456789 \
-Dfs.s3a.endpoint=192.168.1.1 \
-Dfs.s3a.connection.ssl.enabled=false \
-Dfs.s3a.signing-algorithm=S3SignerType \
hdfs://nameserver/warehouse/tablespace/external/hive/test.db/tableName \
s3a://s3-bucket-test/tableName

(3)登录S3可视化界面查看数据是否成功写入

【Hadoop-Distcp】通过Distcp的方式迁移Hive中的数据至存储对象_第1张图片

4)S3 可视化 App 下载

S3可视化App下载地址:https://s3browser.com/

【Hadoop-Distcp】通过Distcp的方式迁移Hive中的数据至存储对象_第2张图片

4)S3 可视化 App 使用

【Hadoop-Distcp】通过Distcp的方式迁移Hive中的数据至存储对象_第3张图片

【Hadoop-Distcp】通过Distcp的方式迁移Hive中的数据至存储对象_第4张图片

5)跨集群迁移 HDFS 数据

1、如果集群版本不同,不能用hdfs协议直接拷贝,需要用http协议。

即不能用:distcp hdfs://src:50070/foo /user

而要用:distcp hftp://src:50070/foo /user

最终的命令为:hadoop distcp hftp://192.168.57.73:50070/hive3/20171008 /hive3/

2、如果两个集群的版本相同,则可以使用hdfs协议,命令如下:

hadoop distcp hdfs://namenodeip:9000/foo hdfs://namenodeip:9000/foo

你可能感兴趣的:(Hadoop,hadoop,hive,大数据)