zoukankan      html  css  js  c++  java
  • 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("请输入你想创建的目录和路径: ");
    scanf("%s", CreatDirName);


    Create = hdfsCreateDirectory(fs, CreatDirName);

    printf("Create = %d ", Create);
    if(Create == -1)
    {
    printf("创建失败! ");
    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!!! ");
    }
    }
    }

    上传文件到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 ", SendFileName);      
    }    
    else
    {
    bzero(buffer, LENGTH);
    tSize length = 0;
    while((length = fread(buffer, sizeof(char), LENGTH, fp)) > 0)        

    printf("length = %d ", length);
    tSize num_written_bytes = hdfsWrite(fs, OpenFileName, buffer, length);
    printf("num_written_bytes = %d ", num_written_bytes);
    if (hdfsFlush(fs, OpenFileName)) 
    {
    fprintf(stderr, "Failed to 'flush' %s ", SendFilePath);
    exit(-1);
    }
    bzero(buffer, LENGTH);
    }
    fclose(fp);  
    hdfsCloseFile(fs, OpenFileName);
    printf(" >>>上传文件成功!!! ");
    }
    }

    下载文件:

    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("打开文件失败! ");
    exit(1);
    }
    else
    {
    FILE *fp = fopen(DownFileName, "w");    
    if(NULL == fp)    
    {      
    printf("File: %s Can Not Open To Write ", DownFileName);      
    exit(1);    
    }  
    else
    {
    tSize D_length = 0;
    while((D_length = hdfsRead(fs, DownOpenFile, buffer, LENGTH)) > 0)
    {
    printf("D_length = %d ", D_length);


    if(fwrite(buffer, sizeof(char), D_length, fp) < D_length)      
    {        
    printf("File: %s Write Failed ", DownFileName);        
    break;      
    }   
    bzero(buffer, LENGTH);
    }//sleep(1);
    fclose(fp);  
    hdfsCloseFile(fs, DownOpenFile);
    printf(" >>>下载文件成功!!! ");
    }
    }
    }

    删除文件:

    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 ", 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 ", num_Rename);
    }

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

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

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

  • 相关阅读:
    移动Web应用开发入门指南——视觉篇
    Dapper的完整扩展(转)
    Dapper.net 在Parameterized时对于String的扩展(转)
    Entity Framework 5.0
    用事实说话,成熟的ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记(转)
    雅虎团队:网站性能优化的35条黄金守则(转)
    在window server 2008 64位系统上 发布网站的过程中遇到的问题(转)
    sqlserver能否调用webservice发送短信呢?
    数据库优化方案(转)
    SQL点滴之编辑数据(转)
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6824550.html
Copyright © 2011-2022 走看看