通过管道向 hadoop put 文件
来源:互联网 发布:钱夫人淘宝店真实销量 编辑:程序博客网 时间:2024/05/16 08:15
使用 hadoop file shell 可以方便地向 hdfs put 文件,但是,该 shell 不支持从管道读取数据并放到 hdfs 文件中。它仅支持这样的 put 命令:
- cd $HADOOP_HOME
- bin/hadoop fs -put localfile $hdfsFile
- bin/hadoop fs -put localfiles $hdfsDir
cd $HADOOP_HOMEbin/hadoop fs -put localfile $hdfsFilebin/hadoop fs -put localfiles $hdfsDir
幸好,主流的 unix (linux,bsd等)都有一个 /dev/fd/ 目录,可以用它实现从管道 put 文件
- cd $HADOOP_HOME
- if bin/hadoop fs -test -d $hdfsFile
- then
- echo "$hdfsFile is a directory" >&2
- exit 1
- fi
- cat localfileS | bin/hadoop fs -put /dev/fd/0 $hdfsFile
- if [[ "0 0" == ${PIPESTATUS[*]} ]]
- then
- echo success
- else
- bin/hadoop fs -rm $hdfsFile
- echo failed >&2
- fi
cd $HADOOP_HOMEif bin/hadoop fs -test -d $hdfsFilethen echo "$hdfsFile is a directory" >&2 exit 1ficat localfileS | bin/hadoop fs -put /dev/fd/0 $hdfsFileif [[ "0 0" == ${PIPESTATUS[*]} ]]then echo successelse bin/hadoop fs -rm $hdfsFile echo failed >&2fi
其中,使用 PIPESTATUS 检查错误。
需要注意,使用 /dev/fd/0 put 文件时,hdfsFile 必须事先不存在,并且不能是一个目录,如果hdfsFile实际上是一个目录,那么,put 仍然正确执行,但是,hdfs 中的文件名将是hdfsFile/0
/dev/fd/ 中是进程所有已打开的文件描述符列表,例如 /dev/fd/0 代表标准输入,/dev/fd/1 代表标准输出,/dev/fd/2 代表标准错误输出,等等,打开 /dev/fd/n 相当于调用 dup(n) 。
2014-01-19:不知道从什么时候开始,hadoop fs -put 可以使用 '-' 代表 stdin,不再需要使用 /dev/fd/0
- 通过管道向 hadoop put 文件
- 通过管道向 hadoop put 文件
- hadoop put 强制覆盖文件
- hadoop fs -put 上传文件失败
- 通过webhdfs put文件到hdfs
- 通过管道实现文件复制
- JNI通过管道传输文件
- hadoop上传文件失败 hadoop fs -put 1901 /userdata
- 配置Apache服务器支持向目录PUT文件
- 配置Apache服务器支持向目录PUT文件
- hadoop put内部调用,hdfs写文件流程
- 通过管道向CMD进程写新指令时回显More?
- 通过Ftp put命令上传导致文件损坏的解决办法
- 通过HTTP PUT方法实现文件上传的步骤
- hadoop fs -put 上传文件遇到错误2 hadoop fs -put /opt/exercise/ds.txt ds.txt
- 父子进程通过管道实现文件复制
- Hadoop dfs -put 失败
- hadoop fs -put
- mysql++的编译
- 使用 VMware Server 在 Oracle Enterprise Linux 上安装 Oracle RAC 10g(三)
- EL表达式语言学习应用
- ASP.net编程中遇到的错误及解决方法
- 部分网友会发现Activity在切换到后台或布局从横屏LANDSCAPE切换到PORTRAIT
- 通过管道向 hadoop put 文件
- MySQL++ API的用法
- 2010文章计划
- 单点登录
- NAS和SAN的不同点
- 操作DataTable
- 奥斯陆大学的图像处理库
- FLEX 与现有开发语言的通信全面解析
- ie火狐兼容的几个js问题