hadoop put文件问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop put文件问题。相关的知识,希望对你有一定的参考价值。

[zheng@localhost hadoop]$ hadoop fs -put /usr/local/hadoop/test.txt /input
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(II[BI[BIILjava/lang/String;JZ)V
at org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(Native Method)
at org.apache.hadoop.util.NativeCrc32.calculateChunkedSumsByteArray(NativeCrc32.java:86)
at org.apache.hadoop.util.DataChecksum.calculateChunkedSums(DataChecksum.java:430)
at org.apache.hadoop.fs.FSOutputSummer.writeChecksumChunks(FSOutputSummer.java:202)
at org.apache.hadoop.fs.FSOutputSummer.flushBuffer(FSOutputSummer.java:163)
at org.apache.hadoop.fs.FSOutputSummer.flushBuffer(FSOutputSummer.java:144)
at org.apache.hadoop.hdfs.DFSOutputStream.close(DFSOutputStream.java:2217)
at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.close(FSDataOutputStream.java:72)
at org.apache.hadoop.fs.FSDataOutputStream.close(FSDataOutputStream.java:106)
at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:54)
at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:112)
at
将本地文件test.txt放入HDFS中报的。不知道什么原因,求解答。

参考技术A Hadoop系统为了保证数据的一致性,会对文件生成相应的校验文件,并在读写的时候进行校验,确保数据的准确性。
比如我们遇到的这个Case:
执行的命令:
hadoop jar dw-hadoop-2010_7_23.jar jobDriver -files tb_steps_url_path_dim.txt multisteps_output 2011-01-25

出错日志的提示:
org.apache.hadoop.fs.ChecksumException: Checksum error: file:tb_steps_url_path_dim.txt at 0
at org.apache.hadoop.fs.FSInputChecker.verifySum(FSInputChecker.java:277)
at org.apache.hadoop.fs.FSInputChecker.readChecksumChunk(FSInputChecker.java:241)
at org.apache.hadoop.fs.FSInputChecker.read1(FSInputChecker.java:189)
at org.apache.hadoop.fs.FSInputChecker.read(FSInputChecker.java:158)
at java.io.DataInputStream.read(DataInputStream.java:83)
at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:49)
at org.apache.hadoop.io.IOUtils.copyBytes(IOUtils.java:87)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:209)
at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:142)
at org.apache.hadoop.mapred.JobClient.copyRemoteFiles(JobClient.java:565)
at org.apache.hadoop.mapred.JobClient.configureCommandLineOptions(JobClient.java:627)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:802)
at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:771)
at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1290)
at jobDriver.run(jobDriver.java:85)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
at jobDriver.main(jobDriver.java:124)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)

错误原因:
启动任务的命令中包含一个参数“-files tb_steps_url_path_dim.txt”
Hadoop客户端需要将机器本地磁盘中的tb_steps_url_path_dim.txt文件上传到DFS中。
在上传的过程中,Hadoop将通过FSInputChecker判断需要上传的文件是否存在进行校验的crc文件,即.tb_steps_url_path_dim.txt.crc,如果存在crc文件,将会对其内容一致性进行校验,如果校验 失败,则停止上传该文件。最终导致整个MR任务无法执行。

crc文件来源
DFS命令:hadoop fs -getmerge srcDir destFile
这类命令在执行的时候,会将srcDir目录下的所有文件合并成一个文件,保存在destFile中,同时会在本地磁盘生成一个. destFile.crc的校验文件。
DFS命令:hadoop fs -get -crc src dest
这类命令在执行的时候,会将src文件,保存在dest中,同时会在本地磁盘生成一个. dest.crc的校验文件。
如何避免
在使用hadoop fs -getmerge srcDir destFile命令时,本地磁盘一定会(没有参数可以关闭)生成相应的.crc文件。
所以如果需要修改getmerge获取的文件的内容,再次上传到DFS时,可以采取以下2种策略进行规避:
1. 删除.crc文件
2. 将getmerge获取的文件修改后重新命名,如使用mv操作,再次上传到DFS中。
参考技术B 有结果了吗?我也遇见这个问题了,求解决办法 参考技术C 我也有这个问题,请问怎么解决呢?追问

我的HDFS路径写错了。

参考技术D hadoop其它命令好用吗,感觉是环境出了问题追问

感谢,已经找到原因,冒似是core-site.xml中HDFS路径问题。新手,学习中。

hadoop用put上传文件时报错

用命令-put上传文件

报错0 datanode(s) running

原因是进行了多次格式化

解决办法:

停止集群

删除在hdfs中配置的data目录(即在core-site.xml中配置的hadoop.tmp.dir对应文件件)下面的所有数据;

重新格式化namenode(切换到hadoop目录下的bin目录下)

 

重新启动hadoop集群(切换到hadoop目录下的sbin目录下)

 

以上是关于hadoop put文件问题。的主要内容,如果未能解决你的问题,请参考以下文章

hadoop put文件问题。

hadoop路径下put文件报错

如何基于多个 JSON 文件创建 DataFrame

Jmeter 文件上传场景 - 使用正文发出 PUT

将多个csv文件导入pandas并合并到一个DataFrame中

如何使用 REST API 中的 PUT 方法上传文件?