NET实现Hadoop增删改查

【Hadoop】Hadoop 机架感知配置、原理 Hadoop机架感知1.背景Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份。这样如果本地数据损坏,节点可以从同一机架内的相邻节点拿到数据,速度肯定比从跨机架节点上拿数据要快;同时,如果整个机架的网络出现异常,也能保证在其它机架的节点上找到数据。为了降低整体的带宽消耗和读取延时,HDFS会尽量让读... 阅读详情

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.AspNet.WebApi.Client" version="4.0.20505.0" targetFramework="net46" />
  <package id="Microsoft.Data.Edm" version="5.2.0" targetFramework="net46" />
  <package id="Microsoft.Data.OData" version="5.2.0" targetFramework="net46" />
  <package id="Microsoft.Hadoop.WebClient" version="0.12.5126.42915" targetFramework="net46" />
  <package id="Microsoft.Net.Http" version="2.0.20505.0" targetFramework="net46" />
  <package id="Microsoft.WindowsAzure.ConfigurationManager" version="1.8.0.0" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="4.5.11" targetFramework="net46" />
  <package id="System.Spatial" version="5.2.0" targetFramework="net46" />
  <package id="WindowsAzure.Storage" version="2.0.4.1" targetFramework="net46" />
</packages>

HDFSAccess.cs

using Microsoft.Hadoop.WebHDFS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;

namespace Physical
{
    public sealed class HDFSAccess
    {
        private readonly WebHDFSClient webHDFSClient;

        public HDFSAccess(string uriString, string userName)
        {
            this.webHDFSClient = new WebHDFSClient(new Uri(uriString), userName);
        }

        public List<string> GetDirectories(string path)
        {
            var directoryStatus = this.webHDFSClient.GetDirectoryStatus(path).Result;

            return directoryStatus.Directories.Select(d => d.PathSuffix).ToList();
        }

        public List<string> GetFiles(string path)
        {
            var directoryStatus = this.webHDFSClient.GetDirectoryStatus(path).Result;

            return directoryStatus.Files.Select(d => d.PathSuffix).ToList();
        }

        public bool CreateDirectory(string path)
        {
            // 传入路径不包含根目录时,预设会在根目录「/」底下
            return this.webHDFSClient.CreateDirectory(path).Result;
        }

        public bool DeleteDirectory(string path)
        {
            // 传入路径不包含根目录时,预设会在根目录「/」底下
            return this.webHDFSClient.DeleteDirectory(path).Result;
        }

        public string CreateFile(string localFile, string remotePath)
        {
            // 传入远端路径不包含根目录时,预设会在根目录「/」底下
            return this.webHDFSClient.CreateFile(localFile, remotePath).Result;
        }

        public bool DeleteFile(string path)
        {
            // 传入路径不包含根目录时,预设会在根目录「/」底下
            return this.webHDFSClient.DeleteDirectory(path).Result;
        }

        public HttpResponseMessage OpenFile(string path)
        {
            // 传入路径不包含根目录时,预设会在根目录「/」底下
            return this.webHDFSClient.OpenFile(path).Result;
        }
    }
}

Program.cs

using Physical;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MyTest
{
    class Program
    {
        // HDFS cluster 客户端进入端点设定于 主机上
        // 预设端点:http://[主机名称]:50070
        // 预设帐号:Wu
        private static HDFSAccess access = new HDFSAccess(@"http://127.0.0.1:50070", "Wu");

        static void Main(string[] args)
        {
            GetDirectoriesTest();
            Console.WriteLine("----------------------------------------------");
            GetFilesTest();
            Console.WriteLine("----------------------------------------------");
            DirectoryTest();
            Console.WriteLine("----------------------------------------------");
            FileTest();
            Console.WriteLine("----------------------------------------------");
            OpenFileTest();
            Console.ReadKey();
        } 

        public void TestCleanup()
        {
            //取得根目录资料夹
            var directories = access.GetDirectories(@"/");

            // 移除预设目录:tmp、user 外的目录
            foreach (var directory in directories)
            {
                if ("tmp".Equals(directory) || "user".Equals(directory))
                {
                    continue;
                }
                else
                {
                    access.DeleteDirectory(directory);
                }
            }

            // 取得根目录档案
            var files = access.GetFiles(@"/");

            // 移除所有档案
            foreach (var file in files)
            {
                access.DeleteFile(file);
            }

            // 移除 OpenFile 转存档案
            File.Delete(Path.Combine(Directory.GetCurrentDirectory(), "Test.jpg"));
        }

        //_传入根目录_预期回传预设目录
        public static void GetDirectoriesTest()
        {
            // 预设根目录下有两个目录:tmp、user
            var expected = new List<string>() { "tmp", "user", };

            var actual = access.GetDirectories(@"/");

            foreach (var item in actual)
            {
                Console.WriteLine(item);
            }

        }

        //_传入根目录_预期回传空集合
        public static void GetFilesTest()
        {
            // 预设根目录下没有档案
            var expected = new List<string>();

            var actual = access.GetFiles(@"/");
            foreach (var item in actual)
            {
                Console.WriteLine(item);
            }

        }

        //_建立zzz目录_预期成功_预期根目录下有zzz目录_删除zzz目录_预期成功_预期根目录下无zzz目录
        public static void DirectoryTest()
        {
            var directoryName = "zzz";

            // 建立zzz目录
            var boolCreateDirectory = access.CreateDirectory(directoryName);

            Console.WriteLine("建立zzz目录_预期成功:"+boolCreateDirectory);

            // 建立zzz目录_预期成功_预期根目录下有zzz目录
            // 预设根目录下有三个目录:tmp、user、zzz
            var expectedCreateDirectory = new List<string>() { "tmp", "user", directoryName, };

            var actualCreateDirectory = access.GetDirectories(@"/");


            foreach (var item in actualCreateDirectory)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("********************************************");
            // 删除zzz目录
            var boolDeleteDirectory = access.DeleteDirectory(directoryName);

            Console.WriteLine("删除zzz目录_预期成功:" + boolDeleteDirectory);


            // 删除zzz目录_预期成功_预期根目录下无zzz目录
            // 预设根目录下有两个目录:tmp、user
            var expectedDeleteDirectory = new List<string>() { "tmp", "user", };

            var actualDeleteDirectory = access.GetDirectories(@"/");

            foreach (var item in actualDeleteDirectory)
            {
                Console.WriteLine(item);
            }
        }

        //_建立Test档案_预期根目录下有Test档案_删除Test档案_预期成功_预期根目录下无Test档案
        public static void FileTest()
        {
            var localFile = Path.Combine(Directory.GetCurrentDirectory(), "TestFolder", "Test.jpg");

            var remotePath = "Test.jpg";

            // 建立Test档案
            var boolCreateFile = access.CreateFile(localFile, remotePath);

            // 建立Test档案_预期根目录下有Test档案
            var expectedCreateFile = new List<string>() { remotePath, };

            var actualCreateFile = access.GetFiles(@"/");

            foreach (var item in actualCreateFile)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("********************************************");
            // 删除Test档案
            var boolDeleteFile = access.DeleteDirectory(remotePath);

            Console.WriteLine("删除Test档案_预期成功:"+boolDeleteFile);

            // 删除Test档案_预期成功_预期根目录下无Test档案
            var expectedDeleteFile = new List<string>();

            var actualDeleteFile = access.GetFiles(@"/");

            foreach (var item in actualDeleteFile)
            {
                Console.WriteLine(item);
            }
        }

        //_建立Test档案_预期根目录下有Test档案_取得Test档案_预期成功_预期回传Test档案Stream并转存成功
        public static void OpenFileTest()
        {
            var localFile = Path.Combine(Directory.GetCurrentDirectory(), "TestFolder", "Test.jpg");
            var remotePath = "Test.jpg";
            var saveFile = Path.Combine(Directory.GetCurrentDirectory(), "Test.jpg");

            Console.WriteLine("saveFile:" + saveFile);
            Console.WriteLine("********************************************");
            // 建立Test档案
            var boolCreateFile = access.CreateFile(localFile, remotePath);

            // 建立Test档案_预期根目录下有Test档案
            var expectedCreateFile = new List<string>() { remotePath, };

            var actualCreateFile = access.GetFiles(@"/");

            foreach (var item in actualCreateFile)
            {
                Console.WriteLine(item);
            }


            Console.WriteLine("********************************************");
            // 取得Test档案
            var response = access.OpenFile(remotePath);

            // 取得Test档案_预期成功
            response.EnsureSuccessStatusCode();

            // 取得Test档案_预期成功_预期回传Test档案Stream并转存成功
            using (var fs = File.Create(saveFile))
            {
                response.Content.CopyToAsync(fs).Wait();
            }

            Console.WriteLine(File.Exists(saveFile));

        }
    }
}

运行结果如图:

这里写图片描述

使用C#实现Hadoop的增删改查操作 通过以上步骤,我们可以在ASP.NET应用程序中使用C#编程语言实现与Hadoop集群的交互,并进行数据的增删改查操作。请确保在使用代码之前,进行了必要的引用和安装相关的NuGet包,并替换代码中的连接字符串、文件路径等参数,以适应实际的环境和需求。在ASP.NET应用程序中,我们可以使用C#编程语言来实现与Hadoop集群的交互,并进行数据的增删改查操作。本文将详细介绍如何使用C#编写代码来实现这些操作。要将数据添加到Hadoop集群中,我们需要使用Hadoop的分布式文件系统(HDFS)提供的API。 阅读详情

相关推荐

C#与大数据利器Spark、Hadoop的深度融合:开启数据处理与分析新纪元

首先,C#与Hadoop的结合使用主要通过Hadoop的编程接口实现。虽然MapReduce本身是用Java编写的,但C#开发者可以通过调用Hadoop的MapReduce接口或使用其他支持MapReduce的库来实现类似的功能。通过利用这些工具的分布式计算能力和丰富的数据处理功能,C#开发者可以更加高效地处理和分析大规模数据集,从而为企业和组织提供有价值的数据洞察和决策支持。C#作为一种强大的编程语言,与大数据分析工具如Spark和Hadoop的结合使用,为数据处理和分析提供了广阔的可能性。

java专栏 1103

.Net Core 操作 Hadoop HDFS --- 学习记录

Nuget 安装包 Hadoop.WebHdfs.Client 以下代码仅仅在dfs.permissions.enabled = false 的情况下做了简单测试,仅作为备忘录。 上传文件代码 public void UploadFileTest() { string srcPath = @"D:\素材\logo\linux.jpg"; string destPath = "/TestPhoto/linux.jpg"; .

HongzhuoO的专栏 2225

DP链路训练从HPD触发到通道对齐:原理与调试实战

高速数字接口的稳定工作依赖物理层信号的精确协商,链路训练正是DisplayPort接口中确保源端与接收端在速率、摆幅和时序上达成一致的关键机制。HPD作为链路状态变化的触发信号,与通道对齐一同构成了训练流程的首尾环节。理解从时钟恢复到均衡再到多通道对齐的完整过程,有助于快速定位显示异常问题。在工程实践中,借助DPCD寄存器交互和AUX通道日志,可以系统性地排查训练失败原因。围绕链路训练全流程进行剖析,重点探讨HPD触发机制、训练图案选择、寄存器配置以及链路降级策略,为显示方案开发与调试提供工程参考。

weixin_30110543的博客 233

Hadoop for .NET Developers(十二):实现简单的MapReduce作业

在本练习中,我们将使用C#和.NET SDK编写并执行非常简单的MapReduce作业。本练习的目的是说明MapReduce背后的最基本概念。 我们将创建的作业将在以前的博客文章中加载到本地桌面开发环境的integers.txt示例文件中运行。您可能会记得该文件由1到10,000之间的整数值列表组成,每个整数占据自己的行。 我们将写的map函数将接受一行(一个整数),确定该值是偶数还是奇数,并

极客神殿 4137

Ansys Zemax | 多模光纤耦合效率优化与IMAE操作数实战解析

本文详细解析了在Ansys Zemax(OpticStudio)中优化多模光纤耦合效率的实战流程。通过几何图像分析诊断初始效率,并重点介绍了如何利用IMAE操作数将分析工具转化为自动化优化引擎,实现从2%到54%的几何效率飞跃。文章还探讨了引入菲涅尔损耗与偏振计算以逼近真实效率,并分享了关键的避坑指南与高阶技巧。

xk7n92h3p5m的博客 747

FPGA笔试题知识点汇总(21~40)

FPGA笔试题知识点汇总(21~40)

weixin_52487896的博客 5870

如何使用.NET/C通过hive与Hadoop连接

连接到蜂巢中的数据库 介绍 在我开始告诉你我的问题之前,我已经把某些与我的问题相关的术语写下来了。所有的定义基本上都是维基百科的摘录。 什么是大数据? 大数据是收集如此庞大和复杂的数据集的术语,因此很难使用手动数据库管理工具或传统数据处理应用程序进行处理。挑战包括捕获、策划、存储、搜索、共享、传输、分析和可视化。大数据很难与使用大多数关系数据库管理系统以及桌面统计和可视化包配合使用,而是需要在数十台、数百台甚至数千台服务器上运行大规模并行软件。 什么是哈杜普? 哈多普是阿帕奇软件基金会的开源框架。它成为存储

Maynor的博客 1622

Nacos 2.3.2实战:5分钟搞定达梦数据库插件配置(含避坑指南)

本文详细介绍了在Nacos 2.3.2中配置达梦数据库数据源插件的完整实战流程。通过解析SPI插件机制,提供从环境准备、插件编译部署到核心配置的逐步指南,并重点分享了驱动加载、SQL兼容性等高频问题的避坑解决方案,助力开发者高效完成国产化数据库适配。

weixin_29200485的博客 498

Hadoop for .NET Developers(十四):了解MapReduce和Hadoop流

在Hadoop中,通过MapReduce作业解决数据处理。作业由基本配置信息组成,例如输入文件和输出文件夹的路径,由Hadoop的MapReduce层执行一系列任务。这些任务负责首先执行map和reduce功能,以便将输入数据转换为输出结果。为了说明MapReduce如何工作,请考虑一个简单的输入文件,其中包含制表符分隔的记录(在下图的最左侧)。为了说明的目的,每一行将被标记为A到F。MapRedu

极客神殿 2478

java实现自动发送微信QQ消息(可发图片)

自动发送微信/QQ/微博等消息 一:功能:实现发送QQ/微信/微博消息,程序控制。 效果演示(实现自动发生QQ微信消息给女友,发微博信息也可以就不演示了) 二:原理讲解:将剪贴板的内容给发送到QQ微信中去,复制粘贴发送。 模拟真实操作进行发送信息。 三:前期准备,软件安装,及初步测试。...

XURUNFA950827的博客 1万+

RIGOL DS1102E示波器新手必看:从开机到捕获第一个波形的5分钟指南

本文为RIGOL DS1102E示波器新手提供了一份快速上手指南。内容涵盖从开机、探头校准到捕获第一个波形的完整流程,重点解析了触发设置、自动测量等核心操作,并指出了探头衰减比设置等常见误区,帮助用户快速掌握这款经典数字示波器的基本使用方法。

dream的博客 737

php连接webhdfs,ASP.NET实现Hadoop增删改查的示例代码

本文介绍了ASP.NET实现Hadoop增删改查的示例代码,分享给大家,具体如下:packages.configHDFSAccess.csusing Microsoft.Hadoop.WebHDFS;using System;using System.Collections.Generic;using System.Linq;using System.Net.Http;namespace Phys...

weixin_33296185的博客 161

我的python学习之路

Python 是一门功能强大且易于学习的编程语言,广泛应用于数据分析、人工智能、Web 开发、自动化等领域。以下是一个 Python 学习路径的总结,帮助你系统地掌握 Python 编程。

数据知道的博客 3万+

一键通过大数据毕设答辩:基于Hadoop的旅游保险数据可视化系统完整实现、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学

一键通过大数据毕设答辩:基于Hadoop的旅游保险数据可视化系统完整实现、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学

卫星:biyesheji88的博客 708

【实战】YOLOv5/v8模型→RK3588 NPU高效部署:模型转换/量化/精度调优完整指南​

摘要: 本教程详细介绍了YOLOv5模型在RK3588 NPU上的优化部署流程,重点解析了架构转换与量化技术。通过将检测头输出结构与decode操作分离,显著提升了模型在NPU上的兼容性和计算效率。LetterBox预处理方案有效保持图像宽高比,相比直接resize提升检测精度。INT8量化技术采用非对称量化策略,通过scale和zero_point参数实现浮点到整数的转换,在保证精度的同时大幅提升推理速度。实验表明,优化后的模型在RK3588上实现了高效的实时目标检测性能,为边缘AI部署提供了完整解决方案

LXY_LOVE36的博客 624

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

.Net中初步了解ORM框架

转载自:.Net中初步了解ORM框架 1.新建 一个控制台项目 2.添加一个数据项 a.选择数据库 注:数据库中的表如下: b.选择EF版本 c.选择表 3.初步了解EF框架 看到了多了一个以 edmx后缀的文件 在edmx文件上,右击打开方式,选择 XML(文本)编辑器 打开 该xml主要包含三部分:(数据库存储模型,实体模型,关系映射) edmx还

SCGH_Fx的专栏 867

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

基于ASP.NET的社区流动人口户籍迁入迁出管理系统的设计与实现vue

HDFS放宽了POSIX的要求,可以以流的形式访问文件系统中的数据。2、同时增加文字触发提醒,设置提醒语,有相同字段的数据,会触发弹框提醒,例如设置状态提醒:特急/加急/一般 增加自定义提醒语(如:库存不足,请补货)8、AI续写、AI优化、AI校对、AI翻译:新增AI接口,编辑器接入AI,可以实现AI续写、AI优化、AI校对、AI翻译,可以帮你实现自动化,ai帮你完成文档。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。

QQ188083800的博客 403

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

室友还在做简单的增删改查,我却用Hadoop构建了基于Python+大数据的餐饮服务许可证数据关系可视化分析系统的设计与实现

本文介绍了一个基于Python和大数据技术的餐饮服务许可证数据可视化分析系统。该系统通过Hadoop技术处理海量数据,提供多维度分析功能,包括区域企业分布、行业趋势、连锁品牌对比等可视化模块。系统采用Java/SpringBoot后端和Python数据分析组件,包含10个核心功能:行政区企业分布、年度趋势分析、企业命名词云、连锁品牌排行、经营项目分析等。页面设计采用现代化数据看板,支持图表交互。系统可帮助餐饮企业优化经营策略,提升监管效率,并提供源码咨询服务。参考文献涵盖大数据分析、Python技术

m0_72599287的博客 977

第一章:初识Hadoop大数据技术

(1)hadoop是一个由Apache基金会所开发的分布式计算基础框架。(2)主要解决,海量数据的存储和海量数据的分析计算问题。(3)广义上来讲,Hadoop通常是指一个更广泛的概念--Hadoop生态圈。②Hadoop根据是Google的三篇论文实现HDFS → GFS(1)HDFS:Hadoop Distributed File System,是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础。

high33的博客 149

基于 ASP.NET的教材管理信息系统 可视化vue

HDFS放宽了POSIX的要求,可以以流的形式访问文件系统中的数据。2、同时增加文字触发提醒,设置提醒语,有相同字段的数据,会触发弹框提醒,例如设置状态提醒:特急/加急/一般 增加自定义提醒语(如:库存不足,请补货)8、AI续写、AI优化、AI校对、AI翻译:新增AI接口,编辑器接入AI,可以实现AI续写、AI优化、AI校对、AI翻译,可以帮你实现自动化,ai帮你完成文档。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。

QQ188083800的博客 551

【Python大数据+AI毕设实战】水质数据可视化分析系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop、实战教学

【Python大数据+AI毕设实战】水质数据可视化分析系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop、实战教学

biyesheji88的博客 965

【Python大数据+AI毕设实战】谷物农作物数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学

【Python大数据+AI毕设实战】谷物农作物数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学

卫星:biyesheji88的博客 1067

【Python大数据+AI毕设实战】上海餐饮数据可视化分析系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop、实战教学

【Python大数据+AI毕设实战】上海餐饮数据可视化分析系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop、实战教学

biyesheji88的博客 866

【Python大数据+AI毕设实战】农作物需水量数据可视化分析系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop、实战教学

【Python大数据+AI毕设实战】农作物需水量数据可视化分析系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop、实战教学

biyesheji88的博客 900

【Python大数据+AI毕设实战】农作物需水量数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学

【Python大数据+AI毕设实战】农作物需水量数据可视化分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学

卫星:biyesheji88的博客 591
上一篇: Hadoop 文件查看工具
下一篇: MVC 5中Async和await使用
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值