Hadoop-2.6.0上调用C的API实现类似云盘的功能(上传。下载。删除,重命名)

測试系统:CentOS6.6, hadoop-2.6.0

本次測试是调用hadoop下的C的API来訪问HDFS实现类似云盘的上传。下载,删除,重命名的功能,其他功能还请有意者自行加入,废话少说。開始进入正题。

首先我们要能在hadoop-2.6.0上的C的API訪问HDFS

详情能够訪问:http://blog.csdn.net/u013930856/article/details/47660937

以下開始我们的云盘功能:

首先我们在主函数中连接到我们的hadoopserver,并创建一个用户自己的目录

int main(int argc, char **argv) 

{

char CreatDirName[30];
/*创建目录和路径*/

char DirNamePath[50];

int Create;



hdfsFS fs = hdfsConnect("10.25.100.130", 9000);     //连接到hadoopserver



printf("请输入你想创建的目录和路径:\n");

scanf("%s", CreatDirName);





Create = hdfsCreateDirectory(fs, CreatDirName);



printf("Create = %d\n", Create);

if(Create == -1)

{

printf("创建失败!\n");

exit(1);

}



while(1)

{

int num;



HdfsChoseMenu_Function();

scanf("%d", &num);

switch(num)

{

case 1:HdfsSendFile_Function(fs, CreatDirName);     //Hdfs上传文件Function

break;

case 2:HdfsDownFile_Function(fs, CreatDirName);      //下载文件Function

break;

case 3:HdfsDelete_Function(fs);
//HdfsDelete_Function

break;

case 4:HdfsRename_Function(fs);
//HdfsRename_Function

break;

case 0:HdfsQuit_Function(fs);

break;

default:printf("PLease input Error!!!\n");

}

}

}

上传文件到server:

void HdfsSendFile_Function(hdfsFS fs, char CreatDirName[])     //Hdfs上传文件Function

{

char SendFileName[30];
//FileName

char SendFilePath[50];
//FilePath

char buffer[LENGTH];
//BufferFile



printf("请输入要上传的文件名称: ");

scanf("%s", SendFileName);

sprintf(SendFilePath, "%s/%s", CreatDirName, SendFileName);

hdfsFile OpenFileName = hdfsOpenFile(fs, SendFilePath, O_WRONLY|O_CREAT, 0, 0, 0);





FILE *fp = fopen(SendFileName, "r");   





if(NULL == fp)      

{        

printf("File:%s Not Found\n", SendFileName);      

}    

else

{

bzero(buffer, LENGTH);

tSize length = 0;

while((length = fread(buffer, sizeof(char), LENGTH, fp)) > 0)        



printf("length = %d\n", length);

tSize num_written_bytes = hdfsWrite(fs, OpenFileName, buffer, length);

printf("num_written_bytes = %d\n", num_written_bytes);

if (hdfsFlush(fs, OpenFileName)) 

{

fprintf(stderr, "Failed to 'flush' %s\n", SendFilePath);

exit(-1);

}

bzero(buffer, LENGTH);

}

fclose(fp);  

hdfsCloseFile(fs, OpenFileName);

printf("\n>>>上传文件成功!!!\n\n");

}

}

下载文件:

void HdfsDownFile_Function(hdfsFS fs, char CreatDirName[])      //下载文件Function

{

char DownFileName[30];
//DownFileName

char DownFilePath[50];
//DownFilePath

char buffer[LENGTH];
//BufferFile



printf("请输入要下载的文件名称: ");

scanf("%s", DownFileName);



sprintf(DownFilePath, "%s/%s", CreatDirName, DownFileName);

hdfsFile DownOpenFile = hdfsOpenFile(fs, DownFilePath, O_RDONLY, 0, 0, 0);

if(NULL == DownOpenFile)

{

printf("打开文件失败!\n");

exit(1);

}

else

{

FILE *fp = fopen(DownFileName, "w");    

if(NULL == fp)    

{      

printf("File:\t%s Can Not Open To Write\n", DownFileName);      

exit(1);    

}  

else

{

tSize D_length = 0;


while((D_length = hdfsRead(fs, DownOpenFile, buffer, LENGTH)) > 0)


{

printf("D_length = %d\n", D_length);





if(fwrite(buffer, sizeof(char), D_length, fp) < D_length)      

{        

printf("File:\t%s Write Failed\n", DownFileName);        

break;      

}   

bzero(buffer, LENGTH);

}//sleep(1);

fclose(fp);  

hdfsCloseFile(fs, DownOpenFile);


printf("\n>>>下载文件成功!!!\n\n");


}

}

}

删除文件:

void HdfsDelete_Function(hdfsFS fs)       //HdfsDelete_Function

{

int num_Delete;

char delete_HdfsFilePath[50];



printf("请输入你要删除的文件的名字和路径: ");

scanf("%s", delete_HdfsFilePath);

num_Delete = hdfsDelete(fs, delete_HdfsFilePath, 0);

printf("num_Delete = %d\n", num_Delete);



}

文件重命名:

void HdfsRename_Function(hdfsFS fs) //HdfsRename_Function

{

int num_Rename;

char HdfsFilePath[30] = {0};

char oldHdfsFileName[30] = {0};

char newHdfsFileName[30] = {0};

char oldHdfsFilePath[50] = {0};

char newHdfsFilePath[50] = {0};



printf("请输入要更改的文件路径和文件名称: ");  //中间用空格隔开  example:/xiaodai 1.jpg

scanf("%s%s", HdfsFilePath, oldHdfsFileName);

printf("请输入更改后的文件名称: ");

scanf("%s", newHdfsFileName);



sprintf(oldHdfsFilePath, "%s/%s", HdfsFilePath, oldHdfsFileName);

sprintf(newHdfsFilePath, "%s/%s", HdfsFilePath, newHdfsFileName);



num_Rename = hdfsRename(fs, oldHdfsFilePath, newHdfsFilePath);

printf("num_Rename = %d\n", num_Rename);

}

这仅仅是简单的实现其功能。假设想继续加入其很多其它更能,还请开发人员继续努力

这仅仅是实现其功能的函数核心代码,其完整代码和操作文档详见:

http://download.csdn.net/detail/u013930856/9012061

Hadoop-2.6.0上调用C的API实现相似云盘的功能的更多相关文章

  1. Hadoop-2.6.0上的C的API訪问HDFS

    在通过Hadoop-2.6.0的C的API訪问HDFS的时候,编译和执行出现了不少问题,花费了几天的时间,上网查了好多的资料,最终还是把问题给攻克了 參考文献:http://m.blog.csdn.n ...

  2. 程序员的长安十二时辰:Java实现从Google oauth2.0认证调用谷歌内部api

    最近公司在做一个app购买的功能,主要思路就是客户在app上购买套餐以后,Google自动推送消息到Java后端,然后Java后端通过订单的token获取订单信息,保存到数据库. Java后端要获取订 ...

  3. hadoop 2.6.0上安装sqoop-1.99.6-bin-hadoop200

    第一步:下载sqoop-1.99.6-bin-hadoop200.tar.gz  地址:http://www.eu.apache.org/dist/sqoop/1.99.6/ 第二步:将下载好的sqo ...

  4. [ActionScript 3.0] AS3调用百度地图API

    package { import baidu.map.basetype.LngLat; import baidu.map.basetype.Size; import baidu.map.config. ...

  5. hadoop 2.2.0 关于map和reduce的个数的设置

    关于hadoop中的map过程,我的理解是每一个map系统会开启一个JVM进程来处理,map之间相互并行,map函数内串行.这样的想法是否正确? 由于想在hadoop集群上算一个初始输入数据不多,但是 ...

  6. mac OS X Yosemite 上编译hadoop 2.6.0/2.7.0及TEZ 0.5.2/0.7.0 注意事项

    1.jdk 1.7问题 hadoop 2.7.0必须要求jdk 1.7.0,而oracle官网已经声明,jdk 1.7 以后不准备再提供更新了,所以趁现在还能下载,赶紧去down一个mac版吧 htt ...

  7. 64位CentOS上编译 Hadoop 2.2.0

    下载了Hadoop预编译好的二进制包,hadoop-2.2.0.tar.gz,启动起来后.总是出现这样的警告: WARN util.NativeCodeLoader: Unable to load n ...

  8. CentOS 64位上编译 Hadoop 2.6.0

    Hadoop不提供64位编译好的版本号,仅仅能用源代码自行编译64位版本号. 学习一项技术从安装開始.学习hadoop要从编译開始. 1.操作系统编译环境 yum install cmake lzo- ...

  9. Hadoop 3.1.0 在 Ubuntu 16.04 上的安装过程

    安装过程主要参考官方文档: http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster. ...

随机推荐

  1. Python的并发并行[2] -> 队列[1] -> 使用队列进行任务控制

    使用队列进行任务控制 1 FIFO与LIFO队列 FIFO(First In First Out)与LIFO(Last In First Out)分别是两种队列形式,在FIFO中,满足先入先出的队列方 ...

  2. 固件分析工具Binwalk

    固件分析工具Binwalk   固件是保存在嵌入式设备存储器的程序.它负责设备运行和功能,如路由器等设备.通过分析固件文件,可以了解设备的工作方式,并且确认是否存在漏洞.Binwalk是Kali Li ...

  3. Bluetooth篇 开发实例之五 为什么无线信号(RSSI)是负值?

    原文:http://www.cnblogs.com/lele/articles/2832885.html   为什么无线信号(RSSI)是负值 答:其实归根到底为什么接收的无线信号是负值,这样子是不是 ...

  4. VS2010免费插件

    用惯了VC助手后,突然用裸的VS真不习惯... 1. 在Visual Studio 2010中,我们可以通过在任何代码文件中使用快捷键“Ctrl + ,”(Ctrl键加上逗号键)调出“Quick Se ...

  5. openfire源码研究笔记:对设计模式及原则的学习

    原文:http://blog.csdn.net/jinzhencs/article/details/50522105 一.拦截器的实现 地点:   package org.jivesoftware.o ...

  6. log4j教程 10、PatternLayout

    如果想生成基于模式的特定格式的日志信息,那么可以使用 org.apache.log4j.PatternLayout 格式化日志信息. PatternLayout类扩展抽象 org.apache.log ...

  7. 基于HDFS的SparkStreaming案例实战和内幕源码解密

    一:Spark集群开发环境准备 启动HDFS,如下图所示: 通过web端查看节点正常启动,如下图所示: 2.启动Spark集群,如下图所示: 通过web端查看集群启动正常,如下图所示: 3.启动sta ...

  8. python学习心得

    一,高级特性: 1,切片:[start:stop:step] >>>l=range() >>>l[,-,] resulte is [] 2,迭代 2.1按iterv ...

  9. 新装系统(CentOS7.4)环境初始化配置笔记

    新装系统(CentOS7.4)环境初始化配置笔记 一.概述 设备详情: Dell R730 服务器 (四个网卡,一根网线插在第2个网卡上) CentOS 7.4 x64 最小安装环境 二.网络环境配置 ...

  10. window命令

    查看端口占用命令: 开始--运行--cmd 进入命令提示符 输入netstat -aon 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在 ...