c语言或者其他语言的程序可以使用streaming方式来运行。
streaming的执行方法如下:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar [options]
Options:
-input<path>任务的输入路径
-output <path>任务的输出路径,需要是一个还不存在的目录。否则任务不能执行。
-mapper <cmd|JavaClassName> mapper的程序(可以是java的类,也可以是编译好的其他语言的程序)
-combiner <JavaClassName>Combiner的程序
-reducer <cmd|JavaClassName> reducer的程序
-file <file>程序运行所需要的文件或目录,会在执行消帆任务前拷贝到所有节点机器上
-inputformat TextInputFormat(default)|SequenceFileAsTextInputFormat|JavaClassName Optional.输入文件的格式一般保持默认(默认可以不写这个参数)即可。
-outputformat TextOutputFormat(default)|JavaClassName Optional.输出文件的格式
-partitioner JavaClassName 这个是决定根据key值制定处理数据用哪个reducer的那个类。
-numReduceTasks <num> reducer的数目(这只是任务分配的数目,具体能否并行执行还看hadoop配置的最大并发reducer数目)
-inputreader <spec> 这个参数没用过。。。。。
-cmdenv <n>=<v> 运行程序需要的一些环境变量
-mapdebug <path> 远程调试用,不明白是怎么用的。。。
-reducedebug <path> 远程调试用
实际使用中至少需要指定输入、输出目录和mapper程序
例子:$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar -input test -output out -mapper cat
注意:hadoop-streaming.jar默认并不在$HADOOP_HOME中,你可以在$HADOOP_HOME/contrib/streaming/中找到漏桥罩这个jar包,或者直接使用$HADOOP_HOME/contrib/streaming/hadoop-0.20.2-streaming.jar
hadoop提供了许多文件系统的接口,用户可使用URI方案选取合适的文件系统来实现交互。(1)接口
hadoop是使用Java编写的。而Hadoop中不同文件系统之间的交互是由Java API进行源旅调节的。事实上,前面使用的文件系统的shell就是一个java应用,它使用java文件系统来提供文件系统 *** 作。即使其他文件系统比如FTP、S3都有自己的访问工具,这些接口在HDFS中还是广泛使用,主要用来进行hadoop文件系统之间的协作。
(2)Thrift
上面提到可以通过java API 与Hadoop的文件系统进行交互,而对于其它非java应用访问hadoop文件系统则比较麻烦。Thriftfs分类单元中的Thrift API 可通过将Hadoop文件系统展示为一个Apache Thrift服务来填补这个不足,让任何有Thrift绑定的语言都能轻松地与Hadoop文件系统进行交互。Thrift是由Facebook公司开发的一种可伸缩的跨语言服务的发展软件框哗高架。Thrift解决了各系统间大数据量的传输通信,以及系统之间语言环境不同而需要跨平台的问题。在多种不同的语言之间通信时,Thrift可以作为二进制的高性能的通信中间件,它支持数据序列化和多种类型的RPC服务。
(3)C语言库
hadoop提供了映射java文件系统接口的c语言库----libhdfs。libhdfs可以编写为一个访问HDFS的C语言库,实际上,它可以访问任意的Hadoop文件系统,也可以使用JNI(Java Native Interface)来调用java文件系统的客户端。
(4)FUSE
FUSE允许文件系统整合为一个Unix文件系统并在用户空间中执行。通过使用Hadoop Fuse-DFS的contrib模块支持任意的Hadoop文件系统作为一个标准文件系统进行挂载,便可以使用UNIX的工具和文件系统进行交互,还可以通过任意一种编程语言使用POSIX库来访问文件系统。
(5)WebDAV
WebDAV是一系列支持编辑和更新文件的HTTP扩展。在大部分的 *** 作系统中,WebDAV共享都可以作为文件系统进行挂载,因此,通过WebDEV向外提供HDFS或其它Hadoop文件系统,可以将HDFS作为一个标准的文件系统进行访问。
(6)其他HDFS接口
HTTP-HDFS定义了一个只读接口,用来在HTTP上检索目录列表和数据。NameNode的嵌入式Web服务器运行在50070端口上,以XML格式提供服务,文件数据DataNood通过它们的Web服务器50075端口向NameNode提供。这个协议并不局限于某个HDFS版本,所以用户可以自己编写使用HTTP从运行不同版本的Hadoop的HDFS中读取数据。HftpFileSystem就是其中一种实现,它是一个通过HTTP和HDFS交流的hadoop文件雹芦凳系统,是HTTPS的变体。
= =你可以用脚本在namenode上访问御颤管理hadoop,离开namenode就需要通过程序远程访问hadoop,这时候就需要访问接口,是管理脚本的远程版本,也是programatically,意味可编程的。这个比脚本更加重要,可谓是管理hadoop的唯镇基败一功能,总不至于你懂不懂就上锋旁服务器 *** 作吧。。。不方便的欢迎分享,转载请注明来源:内存溢出
评论列表(0条)