提交 4acb58e3 编写于 作者: W wizardforcel

2022-01-08 19:14:18

上级 585debc3
......@@ -943,7 +943,7 @@ public class ProjectsContext : DbContext
实体框架代码的当前版本在本书编写时(5.0),首先伴随着许多约定。当模型的某些方面没有明确定义时,约定规定了 EFCF 将如何配置它们。
包含的约定的完整列表由实现[系统中的](http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions.aspx)[约定](http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions.iconvention.aspx)的类组成。EntityFramework 程序集的 data . entity . model configuration . convents命名空间。你通常可以通过查看每个班级的描述来知道他们应该做什么。
包含的约定的完整列表由实现[系统中的](http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions.aspx)[约定](http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions.iconvention.aspx)的类组成。EntityFramework 程序集的 data . entity . model configuration . convents 命名空间。你通常可以通过查看每个班级的描述来知道他们应该做什么。
最常见的惯例是:
......
......@@ -369,7 +369,7 @@ catch (DbEntityValidationException ex)
### 验证属性
类似于我们可以使用属性来声明映射选项的方式,我们也可以使用属性来声明验证规则。验证属性必须继承自[系统中的](http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx)[验证属性](http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute.aspx)。component model . DataAnnotations命名空间并覆盖其中一个[是有效的](http://msdn.microsoft.com/en-us/library/dd730022.aspx)方法。有一些简单的验证属性,我们可以立即使用,并且与实体框架没有任何关系。
类似于我们可以使用属性来声明映射选项的方式,我们也可以使用属性来声明验证规则。验证属性必须继承自[系统中的](http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx)[验证属性](http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute.aspx)。component model . DataAnnotations 命名空间并覆盖其中一个[是有效的](http://msdn.microsoft.com/en-us/library/dd730022.aspx)方法。有一些简单的验证属性,我们可以立即使用,并且与实体框架没有任何关系。
表 5:验证属性
......
# 九、进一步阅读
希望你喜欢这篇关于 F# 的介绍。如果它启发了你去学习更多关于 F# 的知识,还有很多其他的材料可以用来进一步阅读。官方的 for F# 开发中心有大量关于 F #的资料和许多指向 http://fsharp.net社区资源的跳转点。
希望你喜欢这篇关于 F# 的介绍。如果它启发了你去学习更多关于 F# 的知识,还有很多其他的材料可以用来进一步阅读。官方的 for F# 开发中心有大量关于 F #的资料和许多指向 http://fsharp.net 社区资源的跳转点。
关于 F# 的另一个很好的信息来源是包含 F# 内容的开发者博客。各种各样的博主用不同的观点写 F# 的文章。这里只是几个开始:
......
# 六、.NET 和 Stargate 来连接
Stargate是 HBase REST API 的名称,它使数据可以通过 HTTP 进行读写。Stargate 公开来自与表结构匹配的 URL 的数据(例如,/access-logs/rk1 将从 access-logs 表中获取带有关键字 rk1 的行)。
Stargate 是 HBase REST API 的名称,它使数据可以通过 HTTP 进行读写。Stargate 公开来自与表结构匹配的 URL 的数据(例如,/access-logs/rk1 将从 access-logs 表中获取带有关键字 rk1 的行)。
HTTP 动词 GET、POST 和 DELETE 用于处理作为资源的数据,这给了 Stargate 一个很好的 RESTful 接口。您可以在 JSON 中处理行和单元格,但该应用编程接口的缺点是所有数据都表示为 Base64 字符串,这些字符串是从 HBase 中的原始字节数组编码而来的。如果您只想使用像 Postman 或 cURL 这样的 REST 客户端进行浏览,这将使应用编程接口变得很尴尬。
像节俭应用编程接口一样,星际之门是一个独立的服务,你可以从 hbase-daemon.sh 开始休息。默认情况下,它监听端口 8080(并且已经在 hbase-简洁地说是 Docker 映像上运行)。
在生产环境中,您可以在区域服务器上运行Stargate,但是如果您想将它用作 HBase 的主要接口,您应该考虑使用单独的服务器进行负载平衡。
在生产环境中,您可以在区域服务器上运行 Stargate,但是如果您想将它用作 HBase 的主要接口,您应该考虑使用单独的服务器进行负载平衡。
![](img/00012.jpeg)提示:在[这篇博文](https://blog.sixeyed.com/using-nginx-as-a-load-balancing-proxy-for-stargate)中,我用 Nginx 构建了一个负载平衡反向代理。
您可以使用任何带有 HTTP 客户端的框架来与Stargate对话。在本章中,我们将使用 cURL 来查看原始的 HTTP 数据,并使用. NET 客户端库在更高的抽象级别上工作。
您可以使用任何带有 HTTP 客户端的框架来与 Stargate 对话。在本章中,我们将使用 cURL 来查看原始的 HTTP 数据,并使用. NET 客户端库在更高的抽象级别上工作。
代码清单 48 显示了对根Stargate URL 的 GET 请求(cURL 中的默认动词)。响应与 HBase Shell 中的列表命令相同:
代码清单 48 显示了对根 Stargate URL 的 GET 请求(cURL 中的默认动词)。响应与 HBase Shell 中的列表命令相同:
48:用 cURL 列出表格
......@@ -23,9 +23,9 @@ HTTP 动词 GET、POST 和 DELETE 用于处理作为资源的数据,这给了
```
HTTP GET 请求相当于 HBase 外壳中的 GET 命令。您可以添加一个接受头来指定您想要的响应格式,但是Stargate提供的数据量有一些限制。
HTTP GET 请求相当于 HBase 外壳中的 GET 命令。您可以添加一个接受头来指定您想要的响应格式,但是 Stargate 提供的数据量有一些限制。
如果您试图请求整个表,例如 http://127 . 0 . 0 . 1:8080/access-logs,您将得到一个错误响应,状态代码为 405,这意味着该方法不被允许。你不能在 HBase 中获取整个表,405 是Stargate的实现。
如果您试图请求整个表,例如 http://127 . 0 . 0 . 1:8080/access-logs,您将得到一个错误响应,状态代码为 405,这意味着该方法不被允许。你不能在 HBase 中获取整个表,405 是 Stargate 的实现。
您可以通过在表名后添加行键来获取一整行,但是如果您的行格式中有任何对 HTTP 不友好的字符,您将需要在 URL 中对它们进行转义。您也不能获得一行的纯文本表示;您需要用像 JSON 这样的以数据为中心的格式发出请求。
......@@ -63,11 +63,11 @@ HTTP GET 请求相当于 HBase 外壳中的 GET 命令。您可以添加一个
| 单元格.列 | dDoxMTA2 | t:1106 |
| 手机。$ | MTIw | One hundred and twenty |
6:编码和解码的Stargate
6:编码和解码的 Stargate
请注意,单元格中的列值是全名(列族加上限定符,用冒号分隔),数值单元格值实际上是字符串。
您还可以从 Stargate 获取一行中的单列族(使用 URL 格式/{ table }/{ row-key }/{ column-family }),或者单个单元格值。对于单个单元格,您可以以纯文本方式获取它们,Stargate将在响应中解码该值,如**错误!未找到参考源。**:
您还可以从 Stargate 获取一行中的单列族(使用 URL 格式/{ table }/{ row-key }/{ column-family }),或者单个单元格值。对于单个单元格,您可以以纯文本方式获取它们,Stargate 将在响应中解码该值,如**错误!未找到参考源。**:
代码清单 50:获取单个单元格值
......@@ -83,7 +83,7 @@ HTTP GET 请求相当于 HBase 外壳中的 GET 命令。您可以添加一个
网址格式仍然需要一个行键和一个表,但是使用 PUT,网址中的键被忽略,取而代之的是请求数据中的键。代码清单 51 显示了更新我的行中两个单元格的 PUT 请求:
51:用Stargate更新细胞
51:用 Stargate 更新细胞
```java
$ curl -X PUT -H "Content-Type: application/json" -d '{
......@@ -103,9 +103,9 @@ HTTP GET 请求相当于 HBase 外壳中的 GET 命令。您可以添加一个
```
![](img/00012.jpeg)提示:Stargate对于临时请求非常方便,但是使用 Base64 可能会很困难。我在博客上写了一些简单的工具让它变得更简单。
![](img/00012.jpeg)提示:Stargate 对于临时请求非常方便,但是使用 Base64 可能会很困难。我在博客上写了一些简单的工具让它变得更简单。
该 PUT 请求增加了实际上是我的行中的字符串的数值。通过Stargate不能使用 incr 命令自动增加计数器列,所以如果你需要增加值,那么你必须先读取它们,然后进行更新。
该 PUT 请求增加了实际上是我的行中的字符串的数值。通过 Stargate 不能使用 incr 命令自动增加计数器列,所以如果你需要增加值,那么你必须先读取它们,然后进行更新。
您可以使用 cURL 做更多的事情,比如发送删除请求来删除数据,以及创建扫描仪来获取多行,但是语法变得很麻烦。在星际之门中使用 RESTful API 的包装器是一个更好的选择。
......@@ -115,18 +115,18 @@ NuGet 是的包管理器。NET 应用,还有几个开源包是访问星际之
将该包及其依赖项添加到。NET 应用中,您可以使用代码清单 52 中的 NuGet 包管理器控制台命令:
52:为Stargate添加一个 NuGet 引用
52:为 Stargate 添加一个 NuGet 引用
```java
Install-Package "HBase.Stargate.Client.Autofac"
```
在本书的 GitHub 存储库中,有一个. NET 控制台应用,它使用部落的客户端连接到Stargate,运行在简洁的 Docker 容器中。
在本书的 GitHub 存储库中,有一个. NET 控制台应用,它使用部落的客户端连接到 Stargate,运行在简洁的 Docker 容器中。
要设置Stargate客户端,您需要配置服务器网址并构建容器。代码清单 53 展示了如何使用 Autofac 实现这一点:
要设置 Stargate 客户端,您需要配置服务器网址并构建容器。代码清单 53 展示了如何使用 Autofac 实现这一点:
53:配置Stargate客户端
53:配置 Stargate 客户端
```java
var builder = new ContainerBuilder();
......@@ -140,7 +140,7 @@ NuGet 是的包管理器。NET 应用,还有几个开源包是访问星际之
```
星之门选项对象包含星之门(或代理)网址,星之门模块包含所有其他容器注册。从容器中获得的 IStargate 接口提供了对所有Stargate客户端操作的访问,具有简洁的抽象,并且所有数据项都编码为字符串。
星之门选项对象包含星之门(或代理)网址,星之门模块包含所有其他容器注册。从容器中获得的 IStargate 接口提供了对所有 Stargate 客户端操作的访问,具有简洁的抽象,并且所有数据项都编码为字符串。
星际之门客户端有两种读取数据的方法。最简单的是 ReadValue(),它获取一个特定的单元格值,将表名、行键、列族和限定符传递给它。这在功能上等同于带有包含表名、行键和列名的 URL 的 GET 请求,它返回编码为字符串的单个单元格值,如代码清单 54 所示:
......@@ -168,9 +168,9 @@ NuGet 是的包管理器。NET 应用,还有几个开源包是访问星际之
ReadValue()调用将很快返回,因为它获取的是单个数据,FindCells()调用将很快为 Stargate 服务,但是如果有许多包含大量数据的单元格,客户端可能需要更长时间才能收到。
Stargate获取数据的另一种方法是创建一个行扫描器,它类似于服务器端的游标,您可以使用它来读取多行,并且扫描器可以选择有一个过滤器来限制返回的单元格数量。
Stargate 获取数据的另一种方法是创建一个行扫描器,它类似于服务器端的游标,您可以使用它来读取多行,并且扫描器可以选择有一个过滤器来限制返回的单元格数量。
Stargate扫描行有两个部分。首先,创建运行在服务器上的扫描仪。星际之门给你一个扫描仪的参考,你可以用它来获取行。在。NET 客户端,您可以使用 ScannerOptions 对象来指定扫描的开始和结束行。
Stargate 扫描行有两个部分。首先,创建运行在服务器上的扫描仪。星际之门给你一个扫描仪的参考,你可以用它来获取行。在。NET 客户端,您可以使用 ScannerOptions 对象来指定扫描的开始和结束行。
代码清单 56 显示了如何创建一个扫描器,从 2015 年 10 月开始为一个系统检索一个用户的所有访问日志:
......@@ -207,7 +207,7 @@ ReadValue()调用将很快返回,因为它获取的是单个数据,FindCells
![](img/00015.jpeg)注意:当您通过扫描仪迭代时返回的单元格可能来自多行,因此不要假设 MoveNext(或其他客户端中的等效方法)移动到下一行—它会移动到下一组单元格,这些单元格可能来自多行。
按行键扫描是从Stargate读取数据的最快方法,但是如果需要通过列中的数据(限定符或单元格值)来额外限制结果,则可以在创建扫描仪时指定过滤器。
按行键扫描是从 Stargate 读取数据的最快方法,但是如果需要通过列中的数据(限定符或单元格值)来额外限制结果,则可以在创建扫描仪时指定过滤器。
过滤器也在 Stargate 中运行服务器端,所以它比在客户端获取整行和提取某些列更快,但是它确实使用了额外的服务器资源(如果您在区域服务器上运行 Stargate,这很重要)。
......@@ -235,7 +235,7 @@ column prefixfilter–返回列名与指定前缀匹配的单元格
```
IStargate 接口有两种写入数据的方法。最简单的是 WriteValue(),它相当于对一行中特定单元格的 PUT 请求。如果需要,Stargate会创建行和/或列,并设置值,如代码清单 59 所示:
IStargate 接口有两种写入数据的方法。最简单的是 WriteValue(),它相当于对一行中特定单元格的 PUT 请求。如果需要,Stargate 会创建行和/或列,并设置值,如代码清单 59 所示:
59:用 IStargate 更新单元格值
......@@ -279,7 +279,7 @@ IStargate 接口有两种写入数据的方法。最简单的是 WriteValue(),
```
星际之门 API 是无状态的(即使是扫描器也运行在 Region Server 上,Region Server 不一定是星际之门服务器),客户端也是无状态的,所以本地没有数据缓存,除非你自己在内存中保留单元格。每次调用Stargate客户端读取或写入数据都会导致对Stargate的 REST 调用。
星际之门 API 是无状态的(即使是扫描器也运行在 Region Server 上,Region Server 不一定是星际之门服务器),客户端也是无状态的,所以本地没有数据缓存,除非你自己在内存中保留单元格。每次调用 Stargate 客户端读取或写入数据都会导致对 Stargate 的 REST 调用。
在这一章中,我们看了星际之门,HBase 提供的 REST API。它将行中的数据作为资源公开,使用描述数据路径的 URL 格式,始终包括表名和行键,以及可选的列族和限定符。
......
......@@ -10,7 +10,7 @@
* 使用 Azure Blob 存储来存储输入和输出数据
* 了解 PowerShell 在管理集群和执行作业中的作用
* 在 HDInsight 平台上运行用 C# 编写的 MapReduce 作业
* 高级语言猪和Hive
* 高级语言猪和 Hive
* 与微软商业智能工具连接,以检索、丰富和可视化输出
示例过程不会涵盖 HDInsight 中的所有可用功能。在最后一章,这本书将回顾一些以前没有讨论过的特性,这样读者将对平台有一个完整的了解。
......
# 九、使用Hive存储输出
# 九、使用 Hive 存储输出
根据官方[阿帕奇Hive项目页面](http://hive.apache.org/):
根据官方[阿帕奇 Hive 项目页面](http://hive.apache.org/):
[![http://hive.apache.oimg/hive_logo_medium.jpg](img/image009.jpg)](http://hive.apache.org/)
......
......@@ -12,7 +12,7 @@
只需为客户端机器下载并安装适当的驱动程序。
### 为Hive建立一个 DSN
### 为 Hive 建立一个 DSN
连接到 Hive 的先决条件是设置 Excel 可以引用的 64 位系统数据源名称(DSN)。搜索 ODBC 会出现两个应用:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册