Hadoop-2.6.0上调用C的API实现相似云盘的功能
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实现相似云盘的功能的更多相关文章
- Hadoop-2.6.0上的C的API訪问HDFS
在通过Hadoop-2.6.0的C的API訪问HDFS的时候,编译和执行出现了不少问题,花费了几天的时间,上网查了好多的资料,最终还是把问题给攻克了 參考文献:http://m.blog.csdn.n ...
- 程序员的长安十二时辰:Java实现从Google oauth2.0认证调用谷歌内部api
最近公司在做一个app购买的功能,主要思路就是客户在app上购买套餐以后,Google自动推送消息到Java后端,然后Java后端通过订单的token获取订单信息,保存到数据库. Java后端要获取订 ...
- 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 ...
- [ActionScript 3.0] AS3调用百度地图API
package { import baidu.map.basetype.LngLat; import baidu.map.basetype.Size; import baidu.map.config. ...
- hadoop 2.2.0 关于map和reduce的个数的设置
关于hadoop中的map过程,我的理解是每一个map系统会开启一个JVM进程来处理,map之间相互并行,map函数内串行.这样的想法是否正确? 由于想在hadoop集群上算一个初始输入数据不多,但是 ...
- 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 ...
- 64位CentOS上编译 Hadoop 2.2.0
下载了Hadoop预编译好的二进制包,hadoop-2.2.0.tar.gz,启动起来后.总是出现这样的警告: WARN util.NativeCodeLoader: Unable to load n ...
- CentOS 64位上编译 Hadoop 2.6.0
Hadoop不提供64位编译好的版本号,仅仅能用源代码自行编译64位版本号. 学习一项技术从安装開始.学习hadoop要从编译開始. 1.操作系统编译环境 yum install cmake lzo- ...
- Hadoop 3.1.0 在 Ubuntu 16.04 上的安装过程
安装过程主要参考官方文档: http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster. ...
随机推荐
- 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)C 勤奋的杨老师【DP/正反LIS/类似合唱队形】
链接:https://www.nowcoder.com/acm/contest/116/C 来源:牛客网 题目描述 杨老师认为他的学习能力曲线是一个拱形.勤奋的他根据时间的先后顺序罗列了一个学习清单, ...
- UVALive 3027 Corporative Network (带权并查集)
题意: 有 n 个节点,初始时每个节点的父节点都不存在,你的任务是执行一次 I 操作 和 E 操作,含义如下: I u v : 把节点 u 的父节点设为 v ,距离为| u - v | ...
- stl set求交集 并集 差集
#include <iostream>#include <set> using namespace std; typedef struct tagStudentInfo{ i ...
- Map泛型集合-显示企鹅信息
package collection; /** * 宠物类 * @author * */ public class Pet { private String name; private String ...
- C语言基础之变量、作用域
1.变量的定义 变量类型 变量名; int score; 2.变量的赋值 score = 100; score = a; score = b = 100; 3.变量的输出 int a = 200; p ...
- 线程同步-CountDownLatch
应用场景: 有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行. 假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行 ...
- 为Chrome多账户添加单独的快捷方式
Chrome的多账户功能非常好用,每个账户都有自己的独立的收藏夹.个人设置等.但是,当你要使用的账户不是默认账户时,必须经过一个切换的操作.本文将简单的介绍一个如何各账户添加快捷方式,从而实现直接登陆 ...
- Unity3d UGUI 界面适配 实例解析 三种适配方式
之前做游戏都是用公司自己的引擎,对于界面的适配分Android和IOS两种系统处理. 对于IOS设备,由于数量有限,只要做到 960x640 1024x769 1136x640 (当时还没有ipho ...
- 如何对POST请求但是URL中也有参数/GET请求但是请求体中也有参数的情况进行安全扫描
通常情况下,GET的参数都在URL中,POST的参数都在请求体中,但是如题的情况也有,像使用方法PUT.DELETE的情况也有,这些情况该如何进行安全扫描呢?
- 联想台式机启天m4350 启用intel vt-x
在vmware workstations10 64位上安装windows server 2012操作系统时,出现例如以下错误: 已将该虚拟机配置为使用 64 位客户机操作系统.可是,无法运行 64 位 ...