Juicesync实现对腾讯云CHDFS存储的数据迁移

news2024/11/14 15:42:59

文章目录

  • 前言
  • 一、Juicesync准备
  • 二、Hadoop准备
  • 三、迁移实验
  • 四、实现思路


前言

近年来,云计算越来越流行,企业从自身利益出发,或是不愿意被单一云服务商锁定,或是业务和数据冗余,或是出于成本优化考虑,会尝试将部分或者全部业务从线下机房迁移到云或者从一个云平台迁移到另一个云平台。

本期跟大家分享我在使用Juicesync工具实现对腾讯云CHDFS存储的数据迁移的实验过程及思路。


一、Juicesync准备

  • Juicesync介绍

Juicesync是一个用来拷贝任意云以及地域对象存储数据的工具,它同样支持本地文件,SFTP,HDFS等系统。

这个工具的代码和 juicefs sync 代码相同,Juicesync代码基本引用 juicefs sync部分的代码。

官网:https://juicefs.com/

GitHub:https://github.com/juicedata/juicesync

这个工具不依赖于Juicefs文件系统,可以进行单独使用,并且可以用作于跨云,跨平台,跨地域进行对象数据的迁移复制等场景。

此工具可以支持以下存储:

在这里插入图片描述
本次我们的目的就是尝试使用Juicesync工具,进行对腾讯云CHDFS存储的数据迁移。

  • 安装Juicesync

· 环境:Linux x86_64 centos7.6

Step1:下载地址:

https://github.com/juicedata/juicesync/releases

在地址中选择对应的系统版本,使用命令下载压缩包 ⬇

wget:https://github.com/juicedata/juicesync/releases/download/v1.0.2/juicesync_1.0.2_Linux_x86_64.tar.gz

Step2:解压:

tar -zxvf juicesync_1.0.0_Linux_x86_64.tar.gz

Step3:配置

mv juicesync /usr/local/bin

在这里插入图片描述


二、Hadoop准备

由于在实践过程中,我们需要在 Hadoop 的环境中hdf数据来实现,所以先讲一讲 Haddop系统(本次主要不对细节做介绍,主要介绍整体结构以及服务)。

  • Hadoop 介绍

Haddop系统本身并不是一个单一的系统,而是由3个系统共同组成:HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统)。

而这3个系统又分别由不同的服务组成:HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统);

· Hadoop HDFS 分布式文件系统

NameNode:管理元数据(fsimage) ,文件属性,节点属性,文件在哪些节点

DataNode:存储数据,文件块,block 128M 心跳(状态,资源信息)

SecondaryNameNode :合并元数据信息,fsimage—>NameNode

· Hadoop MapReduce 分布式计算系统

JobTracker:作业的管理和调度、资源分配

TaskTracker:作业的具体执行,发送心跳机制JobTracker汇报

MapTask :Mapper.map() 执行用户自定的map函数

ReduceTask:Reduce.reduce() 执行用户自定义的reduce函数

· Hadoop Yarn 分布式资源管理系统

ResourceManager:资源调度,管理集群中所有的物理机(内存、计算资源)

NodeManager:当前物理机上的管理者,用来创建具体执行任务进程。

  • 安装 Hadoop

由于最终目的是对CHDFS 数据迁移,所以为了适配CHDFS,这里选择在腾讯云的 CVM 上进行安装。

因为 CHDFS 只能支持同VPC网络内,通过同地域访问CHDFS。

在这里插入图片描述

Step1: 准备

Java环境:
在这里插入图片描述
Step2:下载hadoop压缩包

地址:
https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz

wget https://archive.apache.org/dist/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz

Step3:解压

mv hadoop-2.8.5.tar.gz /data/
cd /datatar -zxvf
hadoop-2.8.5.tar.gz
在这里插入图片描述

Step4:修改hadoop配置

修改Hadoop安装目录下 etc/haddop 下的 haddop-env.sh

指定 java_home 到具体目录。
在这里插入图片描述
修改Hadoop安装目录下的 etc/hadoop 下的 core-site.xml

<configuration>
    <!-- 指定HDFS老大(namenode)的通信地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://服务器的真实ip:9002</value>
    </property>
    <!-- 指定hadoop运行时产生文件的存储路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop/tmp</value>
    </property>
</configuration>

在这里插入图片描述
修改Hadoop安装目录下 etc/hadoop 下的 hdfs-site.xml 内容

<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/data/hadoop/hadoop/hdfs/nn</value>
        </property>
        <property>
                <name>fs.checkpoint.dir</name>
                <value>/data/hadoop/hdfs/snn</value>
        </property>
        <property>
                <name>fs.checkpoint.edits.dir</name>
                <value>/data/hadoop/hdfs/snn</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/data/hadoop/hdfs/dn</value>
        </property>
         <property>
            <name>dfs.name.dir</name>
            <value>/data/hadoop/name</value>
        </property>
        <property>
            <name>dfs.data.dir</name>
            <value>/data/hadoop/node</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.http.address</name>
            <value>服务器的真实ip:9000</value>
        </property>
        <property>
             <name>ipc.maximum.data.length</name>
             <value>134217728</value>
        </property>
</configuration>

在这里插入图片描述
在这里插入图片描述

修改Hadoop安装目录下 etc/hadoop 下的 yarn-site.xml 内容


<configuration>
<!-- Site specific YARN configuration properties -->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.application.classpath</name>
    <value>
        /data/hadoop-2.8.5/etc/*,
        /data/hadoop-2.8.5/etc/hadoop/*,
        /data/hadoop-2.8.5/lib/*,
        /data/hadoop-2.8.5/share/hadoop/common/*,
        /data/hadoop-2.8.5/share/hadoop/common/lib/*,
        /data/hadoop-2.8.5/share/hadoop/mapreduce/*,
        /data/hadoop-2.8.5/share/hadoop/mapreduce/lib/*,
        /data/hadoop-2.8.5/share/hadoop/hdfs/*,
        /data/hadoop-2.8.5/share/hadoop/hdfs/lib/*,
        /data/hadoop-2.8.5/share/hadoop/yarn/*,
        /data/hadoop-2.8.5/share/hadoop/yarn/lib/*
    </value>
</property>
 </configuration>

在这里插入图片描述
Step4:配置免密登录

1)到 root 目录下:cd /root

2——执行生成密钥命令:ssh-keygen -t rsa

3)然后三个回车

4)复制公钥追加到第一台节点的公钥文件中:

ssh-copy-id -i /root/.ssh/id_rsa.pub root@master01

5)选择 yes

6)输入登录第一台节点的密码(操作完成该节点公钥复制到第一台节点中)

Step5:配置环境变量

在这里插入图片描述

Step6:初始化节点

执行Hadoop目录下的bin/hdfs

./bin/hdfs namenode -format

Step7:安装

执行Hadoop安装目录下的sbin执行start-all.sh

.sbin/start-all.sh

使用jps验证是否安装成功。

在这里插入图片描述

执行Haddop命令验证

在这里插入图片描述


三、迁移实验

云HDFS(Cloud HDFS,简称:CHDFS)是腾讯云一种提供标准HDFS访问协议、卓越性能、分层命名空间的分布式文件系统。

本次实践的目的就是尝试使用Juicesync工具实现对腾讯云CHDFS存储的数据迁移。

  • 实验过程

使用 Juicesync 尝试对接 CHDFS:

在这里插入图片描述
在这里插入图片描述
我们发现,并不像预想的一样,可以直接对接。

这里的ofs串是腾讯云CHDFS的挂载点,并不能直接作为hdfs串来使用,因为Juicesync工具不能识别这个串。

但是如果将ofs换为hdfs,也不能使用。因为后边的域名Juicesync无法解析。

那么尝试手动解析域名,然后再尝试,可以发现程序直接发生了panic。

在这里插入图片描述
通过查看Juicesync源码发现,Juicesync这里连接HDFS是通过colinmarc/hdfs包实现的。

在这里插入图片描述

猜测有可能是HDFS包使用的时候,有默认配置,导致的无法连接或者报错。这里编写go程序来使用HDFS包。

在这里插入图片描述

连接本地HDFS

这里尝试连接本地的HDFS服务,并获取 test/text.txt 的内容。

在这里插入图片描述

然后,将连接地址改为CHDFS挂载点解析后的IP。

在这里插入图片描述

现在连接的时候,可以连接成功,但是仍然panic。

通过查看HDFS包的代码,可以发现HDFS包连接HDFS服务的方式,是通过RPC的方式来连接Hadoop HDFS 的Namenode的。
在这里插入图片描述
在这里插入图片描述

通过文献查询以及查看Hadoop的源码,可以了解到Hadoop的命令行与HDFS命令进行调用也是通过与Namenode通过RPC的方式。

Hadoop 中是在 Hadoop 项目的 hadoop-common 中src/main/java/org/apache/haddop 中的 fs 中的FsShell.java 中的 main 函数作为 hadoop fs 命令的入口。

在这里插入图片描述

在这里插入图片描述
这里先调用ToolRunner.run;

在这里插入图片描述

再调用到tool.run,即FsShell.run。

在这里插入图片描述
那么,同样是通过RPC的方式,为什么一个可以,另一个不可以?

这里推测是CHDFS的问题。

还有一种可能就是命令行的RPC调用层级高于HDFS,即命令行调用了RPC的时候,在Namenode内部,仍然执行了在挂载CHDFS的JAR包逻辑,而HDFS包则没有执行这部分逻辑。


四、实现思路

通过上边的推断,实现 Juicesync 调用 CHDFS 的思路就是查看 Hadoop 的 FsShell.java 部分的代码。

以此来查看命令行是通过哪个RPC接口来进行调用的,并将对应的proto文件拷贝到HDFS包内,然后通过 protobuf 命令来生成go文件,从而来调用与FsShell.java部分相同的RPC接口来实现仿照命令行的RPC调用,最终来实现对CHDFS的操作。

以上就是本期关于使用Juicesync工具实现对腾讯云CHDFS存储的数据迁移全部思考实现的过程啦~如果你更好的思路,欢迎跟我们留言分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Electron + vite + vue3简单实现

文章目录一、创建Electron应用程序1. 初始化vite项目2. 安装electron3. 修改配置文件4. 编写electron文件5. npm run dev 运行二、打包1. 安装包2. 配置打包脚本3. 渲染进程和主进程的通信渲染进程主进程一、创建Electron应用程序 Electron官网 1. 初始化vite项目 npm creat…

【区块链技术前沿】可下载内容与NFT

发表时间&#xff1a;2022年3月29日 信息来源&#xff1a;coingeek.com 目前&#xff0c;DLC&#xff08;可下载内容&#xff09;仍然是备受争议的话题&#xff0c;但却是电子游戏世界在2010年代选择的一个非常成功的市场方向。许多游戏玩家继续抱怨着电子游戏发行商在敲诈用户…

认识Panda3D引擎bam相关命令

看一下Panda自带命令&#xff0c;其中有bam相关的&#xff0c;来了解一下&#xff1b; 输入一个命令看一下&#xff0c;提示需要输入一个bam文件名&#xff1b; 查一下&#xff0c;查到一个介绍一种bam文件的资料如下&#xff0c; SAM (Sequence Alignment/Map) 格式是一种通用…

Springboot +Shiro +VUE 前后端分离式权限管理系统

前言前后端分离&#xff0c;一般都是通过token实现&#xff0c;本项目也是一样&#xff1b;用户登录时&#xff0c;生成token及 token过期时间&#xff0c;token与用户是一一对应关系&#xff0c;调用接口的时候&#xff0c;把token放到header或 请求参数中&#xff0c;服务端就…

ROS2机器人编程简述humble-第二章-Publishing and Subscribing .3.2

ROS2机器人编程简述humble-第二章-Controlling the Iterative Execution .3.1官方示例pub和sub使用std_msgs/msg/string.hpp&#xff0c;数据类型std_msgs::msg::String。这本书中使用是std_msgs/msg/int32.hpp&#xff0c;数据类型&#xff1a;std_msgs::msg::Int32。对于机器…

Servlet —— Servlet API

JavaEE传送门JavaEE Servlet —— Tomcat, 初学 Servlet 程序 Servlet —— Smart Tomcat,以及一些访问出错可能的原因 目录Servlet APIHttpServletHttpServletRequest获取 GET 请求中的参数获取 POST 请求的参数HttpServletResponseServlet API 虽然 Servlet 提供的类和方法…

【UE4 第一人称射击游戏】53-制作烟雾弹

上一篇&#xff1a;【UE4 第一人称射击游戏】52-手榴弹攻击丧尸本篇效果&#xff1a;按F键掷出烟雾弹&#xff0c;伴随产生音效和烟雾效果本篇步骤&#xff1a;拷贝一份“GrenadeActor”命名为“SmokeGrenadeActor”双击打开“SmokeGrenadeActor”&#xff0c;删除如下节点改变…

尚医通-医院详情功能(二十七)

目录&#xff1a; &#xff08;1&#xff09;前台用户系统-医院详请-情接口开发 &#xff08;2&#xff09;前台用户系统-技术点-nuxt路由 &#xff08;3&#xff09;前台用户系统-医院详情-前端整合 &#xff08;1&#xff09;前台用户系统-医院详-情接口开发 现在做在页面…

13 Java异常(异常过程解析、throw、throws、try-catch关键字)

文章目录13 异常13.1 异常概念13.2 异常的产生过程解析13.3 异常的阐释和处理13.3.1 throw关键字13.3.2 throws关键字13.3.3 try-catch代码块13.3.4 try-catch-finally代码块Java中final、finally和finalize相似点和区别13.3.5 自定义异常13 异常 13.1 异常概念 异常&#xff…

SpringCloud(12):Zuul路由网关

1 为什么需要服务网关 在分布式系统系统中&#xff0c;有商品、订单、用户、广告、支付等等一大批的服务&#xff0c;前端怎么调用呢&#xff1f;和每个服务一个个打交道&#xff1f;这显然是不可能的&#xff0c;这就需要有一个角色充当所有请求的入口&#xff0c;这个角色就是…

【C++】从0到1入门C++编程学习笔记 - 实战篇:通讯录管理系统

文章目录一、需求分析二、创建项目2.1 创建新项目2.1 添加文件三、菜单功能四、退出功能五、添加联系人5.1 设计联系人结构体5.2 设计通讯录结构体5.3 main 函数中创建通讯录5.4 封装添加联系人函数5.5 测试添加联系人功能六、显示联系人6.1 封装显示联系人函数6.2 测试显示联系…

STM32F103和AIR32F103的FreeRTOS中断优先级

关于 Arm Cortex M 系列内核的中断优先级 Cortex M 的中断和优先级 首先要区分开 中断 和 中断优先级 这是两个不同的东西, 不要搞混了 对于 Cortex-M0 和 Cortex-M0 内核, 除了系统内建中断外, 支持最多 32 个中断对于 Cortex-M3 内核, 除了 16 个内核中断外, 支持最多 240…

前端初学者的Ant Design Pro V6总结(上)

前端初学者的Ant Design Pro V6总结&#xff08;上&#xff09; 一、UI组件开发流程 () > {} 通用&#xff08;异步&#xff09;函数useEmotionCss 定义CSSuseModel获取全局状态useCallback 处理React合成事件JSX 拆分组件initiateState 中CurrentUser空值处理initiateSta…

8. 数字类型讲解

python3 数字类型的使用 1. 基础知识 Python 数字数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值&#xff0c;将重新分配内存空间。 可以使用del语句删除一些数字对象的引用。 del var1[,var2[,var3[....,varN]]]Python 支持三种不同的…

计算机视觉算法——基于深度学习的高精地图算法(HDMapNet / VectorMapNet / MapTR / VectorNet)

计算机视觉算法——基于深度学习的高精地图算法&#xff08;HDMapNet / VectorMapNet / MapTR / VectorNet&#xff09;计算机视觉算法——基于深度学习的高精地图算法&#xff08;HDMapNet / VectorMapNet / MapTR / VectorNet&#xff09;1. HDMapNet1.1 网络结构及特点1.1.1…

SAP SD 自定义销售订单审批状态

自定义销售订单审批状态 销售订单可以在其抬头或者项目中定义审批状态&#xff0c;一般在抬头定义的话就相当于针对整单的审批&#xff0c;可以实现多级审批&#xff0c;每级审批设置能进行何种操作&#xff0c;这里就需要在IMG中定义审批状态参数文件。 一、定义状态参数文件…

[精] MySQL和Oracle下Mybatis批量操作示例和获取影响行数介绍

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/117933877 目录 前言 Mybatis 执行器 表结构定义 Mybatis批量新增 批量新增——Mysql写法 批量新增——Oracle写法 Mybatis批…

【甄选靶场】Vulnhub百个项目渗透——项目五十四:jarbas-1(类git反弹shell,计划任务提权)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目五十四&#xff1a;jarbas-1&#xff08;类git反弹shell,计划任务提权&#xff09; &#x1f525;系列专栏&#xff1a;Vulnhub百个项目渗透 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; …

SpringMvc源码分析(四) 请求执行过程之执行MethodHandler

在上文SpringMvc源码分析&#xff08;三&#xff09;中我们分析了DispatcherServlet类中的doDispatcher方法&#xff0c; 并通过分析方法1和方法2了解了请求执行时是怎么获取MethodHandler链的&#xff0c;本文接上文继续分析方法3、方法4和方法5了解MethodHandler是如何执行的…

springboot rabbitmq 非阻塞重试机制实现

重试的应用场景 比如&#xff0c;系统之间同步数据&#xff0c;A系统发送数据给B系统&#xff0c;因为网络原因或者B系统正在重启&#xff0c;可能收不到信息&#xff0c;为了确保B能收到消息就得重试几次&#xff1b;经典的比如&#xff0c;微信支付回调 对后台通知交互时&am…