云计算期末复习

云计算

  • Hbase应用和Json文件
  • 容器镜像K8S
  • K8S中部署镜像
  • 云计算资源管理
  • 自建一个JSON文件

Hbase应用和Json文件

常用的Hbase shell命令

help - 显示可用的 HBase shell 命令列表。
create - 创建一个新表。
list - 列出 HBase 中的所有表。
put - 向表中插入数据。
get - 从表中检索数据。
scan - 扫描并检索表中的多行数据。
delete - 从表中删除数据。
disable - 禁用一个表。
enable - 启用一个表。
describe - 描述表的结构。
count - 计算表中的行数。
truncate - 截断表,删除所有数据但保留表结构。

(1)建表操作

create '', '', '', ...

table_name是表名
后面column_family是表中的列族

create 'student', 'info', 'grades'

(2)插入记录

put 'table_name', 'row_key', 'column_family:column', 'value'

table_name 是要插入数据的表名。
row_key 是要插入数据的行键,它唯一标识了表中的一行数据。
column_family 是列族名称。
column 是列名。
value 是要插入的值。

put 'student', '001', 'info:name', 'John'
put 'student', '001', 'info:age', '25'
put 'student', '001', 'grades:math', '90'

以上示例向名为 student 的表中插入了一行数据。行键为 001,在 info 列族中插入了 name 和 age 列,并在 grades 列族中插入了 math 列。

(3)浏览/检索表

get 'table_name', 'row_key'

table_name 是要查询数据的表名。
row_key 是要查询数据的行键,它唯一标识了表中的一行数据。

get 'student', '001'

终端打印的结果大概为:

COLUMN                             CELL
 personal:name                     timestamp=1646301037000, value=John
 personal:age                      timestamp=1646301037000, value=25
 contact:email                     timestamp=1646301037000, [email protected]
 contact:phone                     timestamp=1646301037000, value=1234567890
 1   row(s)
 Took 0.356seconds

结构

列族:列                             时间戳=********,值=*******

(4)Hbase删除或更新或插入与关系数据库有何不同

*这里需要写的和李老师想的一致,否则写的再对也没分
以下答案,仅供参考

Hbase 面向列
关系数据库 面向行

删除数据:在关系数据库中,删除数据通常是通过执行 DELETE 语句来完成,将满足特定条件的行从表中删除。而在 HBase 中,删除数据是基于行键(Row Key)进行的。你可以使用 delete 命令指定要删除的行键,并删除该行及其所有列族中的数据。

更新数据:在关系数据库中,更新数据是通过执行 UPDATE 语句来修改行中的某些列的值。而在 HBase 中,更新数据也是基于行键进行的。你可以使用 put 命令指定要更新的行键,并提供新的列值来覆盖旧的值。HBase 会将新的列值插入或更新到相应的列族中。

插入数据:在关系数据库中,插入数据是通过执行 INSERT 语句来将新的行插入到表中。而在 HBase 中,插入数据也是基于行键进行的。你可以使用 put 命令指定要插入的行键,并提供相应的列值来插入新的数据行。

需要注意的是,HBase 是一个分布式、面向列的存储系统,其底层的数据存储方式和操作方式与传统关系数据库略有不同。在 HBase 中,数据以行键为索引进行存储,每一行可以包含多个列族和列。通过指定行键,你可以直接操作某一行的数据,并进行删除、更新和插入操作。

(5)分布式计算spark具体运用
0.json文件的内容

{“name”: "sunjin"   }
{"name":  “sunjin1” ,  "age":30 }
{"name":   “sunjin2” ,  "age":19}

1.利用JSON文件创建DataFrame
其中df是一个DataFrame对象

from pyspark.sql import SparkSession

# 创建SparkSession
spark = SparkSession.builder.getOrCreate()

# 指定JSON文件的路径
path = "/path/to/your/file.json"

# 读取JSON文件并创建DataFrame
df = spark.read.format('json').load(path)

# 显示DataFrame的内容
df.show()

2.画json文件的逻辑结构

+----+------+-----+
| ID | Name | Age |
+----+------+-----+
| 1  | John | 25  |
| 2  | Mary | 30  |
| 3  | Alex | 28  |
+----+------+-----+

3.spark创建临时视图并执行查询操作

创建临时视图 以供查询

df.createTempView("table_name")
df.createOrReplaceTempView("table_name")

查询

spark.sql("SELECT * FROM table_name")

4.DataFrame执行查询

可以用以下命令来选择指定的列并显示结果

老师上课给的,但是我没查到这个命令 ↓

df.select("df("name")").show()

df.select("name").show()
df.select("name", "age").show()

容器镜像K8S

1.Dockerfile文件中的常出现的字段

FROM:指定基础镜像,例如 FROM ubuntu:latest 表示使用最新版的 Ubuntu 作为基础镜像。

RUN:用于在镜像中执行命令,例如 RUN apt-get update && apt-get install -y python3 表示在镜像中执行更新和安装 Python3 的命令。

COPY:将本地文件复制到镜像中,例如 COPY app.py /app/ 表示将本地的 app.py 文件复制到镜像中的 /app/ 目录。

ADD:类似于 COPY,但 ADD 还支持从 URL 下载文件并复制到镜像中。

WORKDIR:设置工作目录,即在容器中执行命令时的默认路径,例如 WORKDIR /app/ 表示将 /app/ 目录设置为默认工作目录。

ENV:设置环境变量,例如 ENV PATH=/usr/local/bin:$PATH 表示将 /usr/local/bin 添加到环境变量 PATH 中。

EXPOSE:指定容器运行时需要暴露的端口,例如 EXPOSE 8080 表示将容器的端口 8080 暴露出来。

CMD:设置容器启动时要执行的命令,可以有多个 CMD 指令,但只有最后一个 CMD 指令生效。

ENTRYPOINT:类似于 CMD,但 ENTRYPOINT 指定的命令不会被覆盖,用于定义容器启动时的入口点。

MAIN TAINER :维护者的信息,但是在高版本中已经被废弃了

下面给出一个chatgpt示例:

# 指定基础镜像
FROM ubuntu:latest

# 设置工作目录
WORKDIR /app

# 复制文件到容器中
COPY . /app

# 运行命令
RUN apt-get update && \
    apt-get install -y python3

# 设置环境变量
ENV LANG=C.UTF-8

# 暴露容器的端口
EXPOSE 8080

# 定义镜像维护者信息
LABEL maintainer="your-name "

# 容器启动时要执行的命令
CMD ["python3", "app.py"]

配置容器,使其可执行化
ENTRY POINT ["java","jar","........jar"]

李老师上课给的例子,参考这个就行

FROM  ubuntu     指定基础镜像
MAIN TAINER  sunjin  维护者信息
RUN  mkdir _path 构建镜像时执行的命令
RUN  ["/etc/execfile","arg1","arg2"]
ADD home* /mydir/  添加到容器中 tar文件自动解压
COPY 类似ADD,但不会自动解压文件和访问网络资源
CMD echo "This is a test." 容器在启动后执行的命令
ENTRY POINT["java","jar","people.jar"]  配置容器,使其可执行化

实例1:

FROM ubuntu
ENTRY POINT["top","-6"]
CMD ["-C"]

实例2:

ENTRY POINT ["java,"jar,"peole.jar]

2.根据dockerfile文件制作镜像

docker build -t  镜像名 .

其中 .是dockerfile文件的路径

3.容器以后台方式运行并把容器8080映射到主机8080

docker run -d -p 8080:8080 镜像名

更多docker命令请查看
docker详解

K8S中部署镜像

1.创建一个部署,并使用某个镜像运行该容器

kubectl create deployment 部署名 --image=镜像名
kubectl create deployment my-deployment --image=my-image:latest

2.暴露应用

将Deployment暴露为 service
部署名要和上一问的部署名一致

kubectl expose deployment 部署名 --port=80 --type=NodePort
kubectl expose deployment my-deployment --port=80 --type=NodePort

3.查询外界访问端口

获取当前集群中所有的服务信息

kubectl get service

云计算资源管理

1.Mesos集群规划

主机名     IP     Mesos守护进程          Yarn守护进程        HDFS守护进程
master                Master           Resouremanager     SecondaryNameNode  NameNode
slave1                slave            Nodemanager        DataNode
slave2                slave            Nodemanager        DataNode

2.Openstack 集群部署

Answer.txt  设置  [general]

下面是一个例子
Answer.txt:

[general]
HOSTNAME=controller
CONTROLLER_PUBLIC_IP=192.168.0.100
ADMIN_PASSWORD=openstack
TIMEZONE=UTC
LANGUAGE=en_US.UTF-8

自建一个JSON文件

JSON文件的结构

这是一个示例,其中 hobbies是一个数组,所以后面是 [
address是一个嵌套的对象,所以后面是 {

{
  "name": "John Smith",
  "age": 30,
  "city": "New York",
  "isStudent": false,
  "hobbies": ["reading", "traveling", "playing music"],
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "state": "NY",
    "zipcode": "10001"
  }
}

自定义一个 JSON文件

Student ={
       "Base":{
       "ID":20202207033, “Name”:“sunjin”
       }
       
       “Grade”:{
       “Math”:90
       "English":80
       “Chinese”:100
       }
}

你可能感兴趣的:(云计算)