使用Java API将数据上传到HDFS

2023-11-30

我已经搜索了一段时间,但似乎没有一个解决方案适合我。

非常简单 - 我想使用 Java API 将数据从本地文件系统上传到 HDFS。 Java 程序将在已配置为通过 shell 与远程 Hadoop 集群通信的主机上运行(即hdfs dfs -ls, etc.).

我在我的项目中包含了以下依赖项:

hadoop-core:1.2.1
hadoop-common:2.7.1
hadoop-hdfs:2.7.1

我的代码如下所示:

 File localDir = ...;
 File hdfsDir = ...;
 Path localPath = new Path(localDir.getCanonicalPath());
 Path hdfsPath = new Path(hdfsDir.getCanonicalPath());
 Configuration conf = new Configuration();
 conf.set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
 conf.set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());
 Filesystem fs = FileSystem.get(configuration);
 fs.getFromLocalFile(localPath, hdfsPath);

本地数据没有复制到Hadoop集群,但没有报错,也没有抛出异常。我已启用TRACE记录为org.apache.hadoop包裹。我看到以下输出:

 DEBUG Groups:139 -  Creating new Groups object
 DEBUG Groups:139 -  Creating new Groups object
 DEBUG Groups:59 - Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
 DEBUG Groups:59 - Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
 DEBUG UserGroupInformation:147 - hadoop login
 DEBUG UserGroupInformation:147 - hadoop login
 DEBUG UserGroupInformation:96 - hadoop login commit
 DEBUG UserGroupInformation:96 - hadoop login commit
 DEBUG UserGroupInformation:126 - using local user:UnixPrincipal: willra05
 DEBUG UserGroupInformation:126 - using local user:UnixPrincipal: willra05
 DEBUG UserGroupInformation:558 - UGI loginUser:<username_redacted>
 DEBUG UserGroupInformation:558 - UGI loginUser:<username_redacted>
 DEBUG FileSystem:1441 - Creating filesystem for file:///
 DEBUG FileSystem:1441 - Creating filesystem for file:///
 DEBUG FileSystem:1290 - Removing filesystem for file:///
 DEBUG FileSystem:1290 - Removing filesystem for file:///
 DEBUG FileSystem:1290 - Removing filesystem for file:///
 DEBUG FileSystem:1290 - Removing filesystem for file:///

任何人都可以帮助我解决这个问题吗?

编辑 1:(2015 年 9 月 15 日)

我已经删除了 2 个 Hadoop 依赖项 - 我现在只使用一个:

hadoop-core:1.2.1

我的代码现在如下:

File localDir = ...;
File hdfsDir = ...;
Path localPath = new Path(localDir.getCanonicalPath());
Path hdfsPath = new Path(hdfsDir.getCanonicalPath());
Configuration conf = new Configuration();
fs.getFromLocalFile(localPath, hdfsPath);

我之前使用以下命令执行我的应用程序:

$ java -jar <app_name>.jar <app_arg1> <app_arg2> ...

现在我用这个命令执行它:

$ hadoop jar <app_name>.jar <app_arg1> <app_arg2> ...

通过这些更改,我的应用程序现在可以按预期与 HDFS 交互。据我所知,hadoop jar命令仅适用于打包为可执行 jar 的 MapReduce 作业,但这些更改对我来说很有效。


我不确定您所遵循的方法,但以下是使用 java libs 将数据上传到 hdfs 的一种方法:

//imports required 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;

//some class here .....
Configuration conf = new Configuration();
conf.set("fs.defaultFS", <hdfs write endpoint>);
FileSystem fs = FileSystem.get(conf);
fs.copyFromLocalFile(<src>, <dst>);

另外,如果您本地有 hadoop conf xml,则可以将它们包含在类路径中。然后 hadoop fs 详细信息将在运行时自动获取,并且您不需要设置 "fs.defaultFS" 。另外,如果您在旧的 hdfs 版本中运行,您可能需要使用“fs.default.name”而不是“fs.defaultFS”。如果您不确定 hdfs 端点,它通常是 hdfs namenode url 。这是之前类似问题的示例将目录从本地系统复制到hdfs java代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Java API将数据上传到HDFS 的相关文章

  • Java 7 默认语言环境

    我刚刚安装了 jre7 我很惊讶地发现我的默认区域设置现在是 en US 对于jre6 它是de CH 与jre7有什么不同 默认区域设置不再是操作系统之一吗 顺便说一句 我使用的是Windows7 谢谢你的回答 编辑 我已经看到了语言环境
  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • 文本在指定长度后分割,但不要使用 grails 打断单词

    我有一个长字符串 需要将其解析为长度不超过 50 个字符的字符串数组 对我来说 棘手的部分是确保正则表达式找到 50 个字符之前的最后一个空格 以便在字符串之间进行彻底的分隔 因为我不希望单词被切断 public List
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • 在 Struts 2 中传递 URL 参数而不使用查询字符串

    我想使用类似的 URL host ActionName 123 abc 而不是像这样传递查询字符串 host ActionName parm1 123 parm2 abc 我怎样才能在 Struts 2 中做到这一点 我按照下面的方法做了
  • 您建议使用哪种压缩(GZIP 是最流行的)servlet 过滤器?

    我正在寻找一个用于大容量网络应用程序的 GZIP servlet 过滤器 我不想使用容器特定的选项 要求 能够压缩响应负载 XML Faster 已在大批量应用的生产中得到验证 应适当设置适当内容编码 跨容器移植 可选择解压缩请求 谢谢 我
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • Talend 和 Apache Spark?

    我对 Talend 和 Apache Spark 在大数据生态系统中的定位感到困惑 因为 Apache Spark 和 Talend 都可以用于 ETL 有人可以用一个例子解释一下吗 Talend 是一种基于工具的大数据方法 通过内置组件支
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • 是否可以从 servlet 内部以编程方式设置请求上下文路径?

    这是一个特殊情况 我陷入了处理 企业 网络应用程序的困境 企业应用程序正在调用request getContext 并将其与另一个字符串进行比较 我发现我可以使用 getServletContext getContextPath 获取 se
  • 通过 appassembler-maven-plugin 生成的脚本无法在 Spring Boot 应用程序中找到主类

    我使用 appassembler maven plugin 生成的启动脚本有问题 我有一个基本的 spring boot 应用程序 只有一个类 SpringBootApplication public class ScriptDemoApp
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me

随机推荐

  • 列出 AWS .NET SDK 中的实例

    我正在编写代码以使用适用于 AWS 的 net SDK 列出实例 ID 和实例类型 我知道我需要使用DescribeInstancesRequest 类 我还认为我需要使用 ArrayList 来存储字符串输出和 foreach 循环来获取
  • 在单个产品页面上显示类别和品牌名称

    在 Woocommerce 中 我正在使用YITH WooCommerce 品牌插件处理产品品牌 我目前正在努力解决 WooCommerce 中我的简短描述下想要的固定文本 我想动态显示产品名称在那段文字中 有效 也是产品类别名称 CATE
  • SVN中的结果代码是什么意思?

    SVN中的结果代码是什么意思 我需要一个快速参考 有关更多详细信息 请参阅 SVNBook 工作副本文件和目录的状态 常见状态 U 工作文件已更新 G 存储库上的更改会自动合并到工作副本中 M 工作副本已修改 C 该文件与repo中的版本冲
  • CMake - 使用错误数量的参数调用 add_executable

    我正在尝试组织一个 C 项目 该项目开始有很多文件 我想创建两个使用 Cmake 共享一些源文件的可执行文件 我在这里发现了一个有趣的过程 如何将源文件添加到另一个文件夹中 以下是我的版本 file GLOB Common sources
  • Google 地图 API 无法绘制不同大陆

    我已经使用谷歌地图 API 在谷歌地图上绘制了一个路径点 我参考了以下页面 https developers google com maps documentation javascript directions 在路线部分中使用航点 并对
  • 如何更改指向已删除的 android-ndk-r9 安装的内置 C/C++ 路径?

    我最近将 NDK 从 android ndk r9 升级到 android ndk r10 确切地说是 r10d Eclipse 是 4 4 Luna Luna 服务版本 1 4 4 1 构建 ID 20140925 1800 Eclips
  • XDocument 获取 XML 文件的一部分

    我有一个很大的 xml 文件 想要获取指定数量的
  • 数组初始化的差异

    在查看源文件时 我看到了两种数组初始化的方法 我想知道之间有什么区别 int value new int 0 and int value next new int 其实没有什么区别 它是Syntactic sugar在java数组声明中 第
  • PHP正则表达式最后一次出现的单词

    我的字符串是 var www domain com public html foo bar folder another 我想从此字符串中删除根文件夹 以仅获取公共文件夹 因为某些服务器内部有多个网站 我的实际正则表达式是 www publ
  • 将文本与 a 标签的底部对齐

    如何将文本置于 li 内的 a 标签的底部 这是我的代码 div ul li a href ter a li li a href redg a li li a href ryer More a li li a href More a li
  • VSCode 中多命令的快捷方式

    我有一个现有的快捷方式可以最大化终端窗口 key ctrl command workbench action toggleMaximizedPanel 我想在快捷方式中添加一个附加命令 以便在终端窗口最大化时将焦点转移到终端窗口 在最小化时
  • 测试两个函数变量是否指向同一个函数?

    如何测试两个函数变量是否指向同一个函数 test lm test2 lm test lm error comparison 1 is possible only for atomic and list types test test2 er
  • MVC 剃刀@foreach

    我听说在视图中使用 foreach 是禁忌 意思是 视图中不应该有任何逻辑 foreach 的逻辑应该位于何处的最佳实践是什么 foreach foreach 的逻辑应该位于何处的最佳实践是什么 无处可去 只能摆脱它 您可以使用编辑器或显示
  • BlackBerry - 如何在 Android 中传递 Intent.putExtra() 等数据

    我是黑莓手机的新手 我如何实现 在黑莓手机中 与 Android 相同的功能 intent putExtra key value 将可以接收到的值放在下一个推屏在黑莓手机中 就像在 Android 中一样ActivityOne Intent
  • 有没有办法访问iphone/ipad(真机,无模拟器)中的文档文件夹?

    有没有办法访问真实设备 iphone ipad 文档文件夹 我意识到一个应用程序在该文件夹中存储了一些数据 我想检查一切是否都以正确的方式进行 即使文件位于沙盒中文档之外的其他位置 您也可以在没有 iTunes 的情况下执行此操作 转到 X
  • “出于安全原因,proc_open() 已被禁用”- PHP 错误

    出于安全原因 proc open 已被禁用 我目前使用免费托管 Hostinger 制作一个仅供我和其他人使用的个人网站 我知道我应该删除proc open来自php ini但由于我的共享托管计划 我无法访问它 周围的代码proc open
  • 为什么 Inno Setup 忽略 DefaultDirName

    运行 Inno Setup 5 5 6 我更正了我的错误默认目录名值 但无论我做什么 程序都会继续尝试安装在旧的错误位置 即使我将其设置为与示例之一匹配的值 DefaultDirName pf My Program 程序继续选择旧的 不正确
  • 当我编译这段代码时发生错误C6308,说realloc可以返回NULL,并且可能导致内存泄漏

    void inf int Sub const char num const unsigned int index if this gt length lt index this gt digits char realloc this gt
  • 结构体变量初始化

    我尝试按如下方式初始化结构变量 struct Abc char str 10 int main struct Abc s1 s1 str Hello error 我可以理解这种行为 因为它与 char str 10 str Hello in
  • 使用Java API将数据上传到HDFS

    我已经搜索了一段时间 但似乎没有一个解决方案适合我 非常简单 我想使用 Java API 将数据从本地文件系统上传到 HDFS Java 程序将在已配置为通过 shell 与远程 Hadoop 集群通信的主机上运行 即hdfs dfs ls