如何使用Scala写入HDFS
发布时间:2020-12-16 08:49:46 所属栏目:安全 来源:网络整理
导读:我正在学习 Scala,我需要为HDFS编写一个自定义文件.我在笔记本电脑上使用vmware fusion在Cloudera映像上运行自己的HDFS. 这是我的实际代码: package org.glassfish.samplesimport org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSy
我正在学习
Scala,我需要为HDFS编写一个自定义文件.我在笔记本电脑上使用vmware fusion在Cloudera映像上运行自己的HDFS.
这是我的实际代码: package org.glassfish.samples import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.PrintWriter; /** * @author ${user.name} */ object App { def main(args : Array[String]) { println( "Trying to write to HDFS..." ) val conf = new Configuration() val fs= FileSystem.get(conf) val output = fs.create(new Path("hdfs://quickstart.cloudera:8020/tmp/mySample.txt")) val writer = new PrintWriter(output) try { writer.write("this is a test") writer.write("n") } finally { writer.close() } print("Done!") } } 我得到这个例外: Caused by: java.lang.IllegalArgumentException: Wrong FS: hdfs://quickstart.cloudera:8020/tmp,expected: file:/// at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:645) at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:80) at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:414) at org.apache.hadoop.fs.ChecksumFileSystem.mkdirs(ChecksumFileSystem.java:588) at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:439) at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:426) at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:908) at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:889) at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:786) at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:775) at org.glassfish.samples.App$.main(App.scala:19) at org.glassfish.samples.App.main(App.scala) ... 6 more 我可以使用终端和Hue访问hdfs [cloudera@quickstart ~]$hdfs dfs -ls /tmp Found 3 items drwxr-xr-x - hdfs supergroup 0 2015-06-09 17:54 /tmp/hadoop-yarn drwx-wx-wx - hive supergroup 0 2015-08-17 15:24 /tmp/hive drwxr-xr-x - cloudera supergroup 0 2015-08-17 16:50 /tmp/labdata 这是我的pom.xml 我使用命令运行项目: mvn clean包scala:运行 我做错了什么?先感谢您! 在@jeroenr建议之后编辑 这是实际代码: package org.glassfish.samples import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.PrintWriter; /** * @author ${user.name} */ object App { //def foo(x : Array[String]) = x.foldLeft("")((a,b) => a + b) def main(args : Array[String]) { println( "Trying to write to HDFS..." ) val conf = new Configuration() //conf.set("fs.defaultFS","hdfs://quickstart.cloudera:8020") conf.set("fs.defaultFS","hdfs://192.168.30.147:8020") val fs= FileSystem.get(conf) val output = fs.create(new Path("/tmp/mySample.txt")) val writer = new PrintWriter(output) try { writer.write("this is a test") writer.write("n") } finally { writer.close() println("Closed!") } println("Done!") } } 解决方法
看看这个
this example here.我认为问题是你没有使用配置默认文件系统
conf.set("fs.defaultFS","hdfs://quickstart.cloudera:8020") 并传递相对路径,如下所示: fs.create(new Path("/tmp/mySample.txt")) 写入文件,直接在fs.create返回的输出流上调用’write’,如下所示: val os = fs.create(new Path("/tmp/mySample.txt")) os.write("This is a test".getBytes) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- vim – 如果filetype == tex
- 在Angular2基于Animate的动画之后立即返回初始状态,以便能够
- 定时调用WebService方法同步数据
- 基于Metronic的Bootstrap开发框架经验总结(14)--条码和二
- bootstrap3的.tabel .danger
- angularjs – $http获取参数不工作
- BootStrap Validator对于隐藏域验证和程序赋值即时验证的问
- 阅读bootstrap2 中的bootstrap-responsive.css源文件总结的
- [angular]路由与include的选择
- bash – 如何传递“one”参数并在“xargs”命令中使用它两次