十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

拥抱 Hadoop 生态:Quantcast File System 插件安装与 HDFS 数据迁移实战

拥抱 Hadoop 生态:Quantcast File System 插件安装与 HDFS 数据迁移实战 拥抱 Hadoop 生态Quantcast File System 插件安装与 HDFS 数据迁移实战【免费下载链接】qfsQuantcast File System项目地址: https://gitcode.com/gh_mirrors/qf/qfsQuantcast File SystemQFS是一款高性能、高容错的分布式文件系统它与 Hadoop 生态深度兼容提供了开箱即用的 Hadoop 插件Hadoop QFS Plugin。如果你正计划将 HDFS 数据迁移到 QFS或希望让 Hadoop 作业直接读写 QFS 存储本篇文章将带你一步步完成 QFS Hadoop 插件安装、核心配置以及 HDFS 数据迁移的完整实战。全程无需改一行 Hadoop 源码只需复制一个 jar 包并设置好参数就能让 Hadoop 无缝拥抱 QFS。为什么选择 QFS 作为 Hadoop 的后端存储QFS 最初由 Quantcast 公司为支撑海量 MapReduce 处理而开发专为大文件的顺序读写场景优化。与 HDFS 的3 副本策略不同QFS 默认使用 Reed-Solomon 纠删码RS Erasure Coding用远低于副本策略的存储开销实现同等级别的数据可靠性这也是很多团队把 QFS 作为 HDFS 替代方案的重要原因。如上图所示QFS 采用经典的元数据服务器Metaserver 数据节点Chunk Server架构客户端先向元数据服务器查询文件位置再直接与 Chunk 服务器通信读写数据。这套架构与 Hadoop 的 NameNode/DataNode 模型天然相似因此官方提供了完整的 Hadoop 集成方案。获取 Hadoop QFS 插件 jar 包的两种方式从 QFS 1.0.1 开始官方大大简化了与 Hadoop 的集成流程你只需要拿到hadoop-hadoop版本-qfs-qfs版本.jar插件包即可。获取方式有两种方式一直接下载官方二进制包推荐如果你的平台有官方预编译的二进制发布包解压后在lib/目录下就能看到对应 Hadoop 版本的插件 jarlib/hadoop-0.23.4-qfs-1.0.1.jar lib/hadoop-1.0.2-qfs-1.0.1.jar lib/hadoop-1.0.4-qfs-1.0.1.jar lib/hadoop-2.0.2-alpha-qfs-1.0.1.jar不同平台Ubuntu、Debian、CentOS、Rocky Linux、macOS 等的发布矩阵可参考官方文档 wiki/Binary-Distributions.md。方式二从源码编译生成如果你的平台没有现成的二进制包克隆源码后执行make tarball即可在构建目录中生成发布包git clone https://gitcode.com/gh_mirrors/qf/qfs cd qfs make tarball插件源码位于 src/java/hadoop-qfs/Hadoop 1.x和 src/java/hadoop-qfs-2/Hadoop 2.x核心实现类为 QuantcastFileSystem.java。QFS Hadoop 插件安装三步走拿到插件包后安装只需要三个步骤加入 classpath、让原生库可加载、配置核心参数。第一步把插件 jar 加入 Hadoop classpath两种方式任选其一将hadoop-xxx-qfs-yyy.jar复制到$HADOOP_HOME/lib/目录或在$HADOOP_HOME/conf/hadoop-env.sh中追加export HADOOP_CLASSPATH/absolute/path/to/hadoop-xxx-qfs-yyy.jar第二步让 QFS 原生库可被加载QFS 插件通过 JNI 调用 C 客户端库因此需要让 JVM 找到libqfs_client.so等原生库。设置JAVA_LIBRARY_PATH或java.library.path指向 QFS 安装目录的lib/export JAVA_LIBRARY_PATH${QFSTAR}/lib若使用 Hadoop 1.x还需把lib/libqfs_*复制到${HADOOP_HOME}/lib/native/平台/并在hadoop-env.sh中追加export LD_LIBRARY_PATH${HADOOP_HOME}/lib/native/平台。第三步配置 core-site.xml 核心参数编辑 Hadoop 的conf/core-site.xml添加如下配置property namefs.qfs.impl/name valuecom.quantcast.qfs.hadoop.QuantcastFileSystem/value descriptionThe FileSystem for qfs: uris./description /property property namefs.default.name/name valueqfs://metahost:20000/value /property property namefs.qfs.metaServerHost/name valuemetahost/value /property property namefs.qfs.metaServerPort/name value20000/value /property各参数含义配置项作用fs.qfs.impl指定 QFS 的 FileSystem 实现类fs.default.name默认文件系统 URI新版 Hadoop 用fs.defaultFSfs.qfs.metaServerHostQFS 元数据服务器地址fs.qfs.metaServerPortQFS 元数据服务器端口注意Hadoop 2.x 环境应使用com.quantcast.qfs.hadoop.QuantcastFileSystem2作为实现类对应源码见 QuantcastFileSystem2.java。验证插件是否安装成功配置完成后无需重启集群直接用hadoop fs命令验证 QFS 是否可访问cd ${HADOOP_HOME} bin/hadoop fs -Dfs.qfs.implcom.quantcast.qfs.hadoop.QuantcastFileSystem \ -Dfs.default.nameqfs://localhost:20000 \ -Dfs.qfs.metaServerHostlocalhost \ -Dfs.qfs.metaServerPort20000 \ -ls /如果能看到 QFS 根目录的目录列表说明插件已经成功接管了qfs://协议的读写。HDFS 数据迁移到 QFS 的实战方法当插件安装完成后迁移 HDFS 存量数据最省力的方式就是使用 Hadoop 自带的distcp 分布式拷贝工具。distcp 本身是一个 MapReduce 作业只要集群里有可用的 JobTracker 和 TaskTracker它就能并行、高效地把 HDFS 上的数据复制到 QFS。一条命令完成 HDFS 到 QFS 迁移假设你的 HDFS NameNode 地址为namehost:8020QFS 元数据服务器位于metahost:20000执行cd ${HADOOP_HOME} bin/hadoop distcp \ -Dfs.qfs.implcom.quantcast.qfs.hadoop.QuantcastFileSystem \ -Dfs.default.nameqfs://metahost:20000 \ -Dfs.qfs.metaServerHostmetahost \ -Dfs.qfs.metaServerPort20000 \ hdfs://namehost:8020/hdfs_dir/70MFile \ qfs://metahost:20000/qfs_dir/70Mcopy这条命令会把hdfs://下的源文件/目录复制到qfs://下的目标路径QFS 会自动完成数据分块与纠删码编码全程无需人工干预。迁移注意事项确保 MapReduce 环境可用distcp 是 MapReduce 作业需要 JobTracker 与 TaskTracker 正常运行且各节点都能加载 QFS 原生库善用通配符与增量同步distcp 支持-update和-overwrite参数后续增量迁移时用-update即可只拷贝新增或变更的文件迁移前先小规模验证建议先用一个 70MB 左右的小文件测试链路确认读写正常后再全量迁移迁移后验证数据完整性拷贝完成后可在两边执行hadoop fs -ls与hadoop fs -du对比文件大小与数量。在 QFS 上直接提交 Hadoop 作业迁移完成后你还可以让 Hadoop 作业直接读写 QFS。例如运行 Hadoop 自带的 randomwriter 示例cd ${HADOOP_HOME} bin/hadoop jar hadoop-examples-1.0.3.jar randomwriter \ -Dfs.qfs.implcom.quantcast.qfs.hadoop.QuantcastFileSystem \ -Dfs.default.nameqfs://metahost:20000 \ -Dfs.qfs.metaServerHostmetahost \ -Dfs.qfs.metaServerPort20000 \ /tmp/randomOut迁移后的日常运维与监控数据迁入 QFS 后建议通过 QFS 自带的 Web 管理界面持续监控集群健康状态。启动 WebUI 后可以实时查看总空间、已用/可用空间、节点存活状态、复制队列、客户端连接数等关键指标快速定位磁盘不足或节点故障等问题。![QFS Web 管理界面实时监控集群空间与节点状态](https://raw.gitcode.com/gh_mirrors/qf/qfs/raw/0edcab0be1c014265668ae4b9f72985f3f13acbf/wiki/images/Administrators Guide/qfs-webui.png?utm_sourcegitcode_repo_files)此外官方文档 wiki/Migration-Guide.md 对 Hadoop 插件安装、distcp 迁移和作业提交有更完整的说明遇到问题时可随时查阅插件的更多高级配置项如fs.qfs.createParams、fs.qfs.euser等可参考 QFSImpl.java 中的源码注释。结语QFS 与 Hadoop 的集成远比想象中简单复制一个插件 jar、配置几个fs.qfs.*参数就能用qfs://协议无缝读写 QFS并通过 distcp 一条命令完成 HDFS 数据迁移。对于希望降低存储成本、提升大文件读写性能的团队来说这套方案值得一试。现在就从一个小文件开始体验 QFS Hadoop 组合带来的存储效率提升吧【免费下载链接】qfsQuantcast File System项目地址: https://gitcode.com/gh_mirrors/qf/qfs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表