说实话,云计算的代码确实有点棘手,所以想简单的总结一下,便于大家理解。顺便找到一个好的记忆方法,而不是去死记硬背。前面的未标注的代码段是帮助理解和铺垫的内容,特殊标注考试的代码段考察可能性较大。另外,代码都是手码,麻烦有错误或者疑惑及时告知。
首先是hbase模块
先写API的使用,因为这几段长代码如果不去了解就比较难以记忆。
Hbase API
在使用hbase前,我们应该去考虑建立链接,之后再进行DDL操作(DDL:可以简单理解成对表的操作,DML是对表内的操作)。
则有获取Configuration对象(考)
public static Configuration conf;
{
//1.使用hbase的Configuration的方法进行实例化
conf.Hbase=HbaseConfiguration.create();
//2.填写链接的ip地址和端口号,获取配置文件信息
conf.set("hbase.zookeeper.quorm","192.166.1.102");
conf.set("hbase.zookeeper.property.clientPort","2181");
}
之后我们需要判断表是不是存在,在hbase中存在着新旧两种接口,为了简化学习,和下面的学习内容结合。我们直接选取新接口。
//1获取配置文件信息
Configuration configuration=HbaseConfoguration.create();
configuration.set("hbase.zookeeper.quorum","hadoop102,hadoop103,hadoop104");
//2.根据上面拿到的链接,获取管理员对象
Connection = connection ConnectionFactory.createConnection(configuration);
Admin admin=connection.getAdmin;
//3.判断表是否存在
boolean exists =admin.tableExists(Table.valueof(tableName));
//特别记忆 判断表存在的方法传入的参数(表名)需要利用valueof方法提供对象
//可以理解为tablename在这里视为table而不是一串名字,需要进行valueof的转化
//4.关闭连接
admin.close();
//5.返回结果
return exists;
接下来就到了创建表模块了,
创建表(考)
public static createTable(String tableName,String... cfs)//不需要返回值,直接打印成功信息结果,string...是多个形参,不确定形参的个数
{
//命令行中可以建立多个列族,但只有一个表名
TableName tableName=TableName.valueof(tableName);
//转化
//1.获取管理员对象
Admin admin = connection.getAdmin();
//2.判断是否存在表
if(admin.tableExists(tableName)){
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println(Table+"表已删除!")
//disableTable+deleteTable可以删除表,后面有补充
return;}
//3.创建表描述器
HtableDescriptor hTableDescriptor =new HtableDescriptor (TableName.valueof(tableName);
//4.循环添加列族信息
for(String cf : cfs){
//5.创建列族描述器
HColumnDescriptor hColumnDescriptor = new ColumnDescriptor(cf);
//6.添加具体的列族信息
hTableDescriptor.addFamily(hColumnDescriptor);
//4.创建表
//建议从这句开始往上推,推出系统运行需要的代码
admin.createTable(hTableDescriptor);//需要传入表描述器 HTableDescriptor
//main函数内 使用 createTable(tableName:“表名”,...cfs:“info1","info2");传参数建表
}
了解了创建表,我们继续下一个,是删除表代码,同样也在考察范围之内
public static void dropTable(String tableName) throws IOException{
TableName tableName=TableName.valueof(tableName);
Admin admin = connection.getAdmin();
//1.判断表是否存在
if(!admin.tableExists(tableName)){
System.out.println("表不存在!");
return ;
}
//2.使表下线
admin.disableTable(tablename);
//3.删除表
admin.deteleTable(tablename);
admin.close();
}
了解了建表概念后,我们开始了解向表里插入数据(考察)
public static void putData(String tableName,String rowKey,String cf,String cn,String value){
//参数有表名、行键、列族 、列名、值,要记熟练需要的参数,是对hbase表结构的考察
//1.获取表对象
Table table=connection.getTable(TableName.valueof(tableName));
//2.创建put对象,扔进去rowKey
Put p1=New Put(Bytes.toBytes(rowKey);
//3.给put对象赋值
p1.addColumn(Bytes.toBytes(cf),Bytes.toBytes(cn),Bytes.toBytes(value));
//批量插入可以不用传的参,直接赋值,确定cf,直接加就好,也可以构建多个rowkey
//4.插入数据
table.put(p1);
//5.关闭表链接
table.close();//需要自己关闭链接
//main中 putData("tableName:"",rowKey:"",cf:"",cn:"",value:"")
}
最后是浏览操作(考察)
浏览操作分为get查询特定条件和scan扫描表操作
//get获取数据
public static void getData(String tableName,String rowKey,String cf,String cn)
{//为了就是拿value,所以不需要传入value参数
//1.获取表对象
Table.table=connection.getTable(TableName.valueof(tableName));
//2.创建get对象
Get get=new(Bytes.toBytes(rowKey));
//3.获取数据
Result result =table.get(get)
//4.解析Result 并打印
for(Cell cell : result rawCells()){
//5.打印数据
System.out.println("CF:"+Bytes.toString(CellUtil.cloneFamily(cell))+
"CN:"+Bytes.toString(CellUtil.cloneQualifier(cell))+"Value:"+Bytes.toString(CellUtil.cloneValue(cell)));
//关闭表链接
table.close
//测试:getData()同上传参即可
}
}
//获取数据scan
public static void scanTable(String tableName){
//1.获取表对象
Table table =conneciton.getTable(TableName.valueof(tableName));
//2.构建scan对象
Scan scan=new Scan();//空参构造
//Scanner 扫描器
//3.扫描表
ResultScanner.resultScanner=table.getScanner(scan)
//4.解析resultScanner并打印
for (Result result:resultScanner){
for(Cell cell : result rawCells()){
//5.打印数据
System.out.println("CF:"+Bytes.toString(CellUtil.cloneFamily(cell))+
"CN:"+Bytes.toString(CellUtil.cloneQualifier(cell))+"Value:"+Bytes.toString(CellUtil.cloneValue(cell)));
}
}
//6.关闭表链接
table.close
//测试扫描数据 scanTable(String tableName)
}
接下来的就比较简单了,主要是hbase和spark的shell语句
HBase shell语句
- 建表
- 插入数据
- 浏览操作
create <'table name'>,<'column family'>
#创建表,需要加入表名参数和列族参数
create 'student','info'
put 'table name','rowID','Column family:column name','new value'
#插入数据,需要表名,行键,列族,列名,以及值
put 'student','1001','info:sex','male'
#浏览操作,分get和scan
get <'table name'>,'rowID'
get 'student', '1'
get 'table name', 'rowID', {COLUMN => 'column family:column name'}
#上面是读取某一行或者列
scan <'table name'>
scan 'student'
Sparkshell语句
#从外部源创建dataframe
val df
=spark.read.format("json").load("file:///usr/local/spark/examples/src/main/resources/people.json")
#确定读取形式,文件的位置即可
#SparkSQL
df.createTempView("Tabel")
#建立新表,记住TempView
df.show#展示表
spark.sql("select * from Tabel").show()
#直接利用普通的sql语句查看所有信息
df.select(df("name")).show()
//输出表内所有人名,df是上文所确定的dataframe
shell的操作基本结束了,接下来是k8s的三行代码
K8S代码
#创建在镜像中的应用
kubectl create deploy 应用name --image=镜像name
#暴露外部接口,以便外界访问
kubectl expose deploy 应用name --port=80 --type=NodePort
#查询访问外部接口
kubectl get services
DockerFIle知识铺垫
=======================================
DockerFile是相当于构建docker镜像的配置文件,最重要的是FROM参数,指定了镜像来源于哪一个文件
最常用的五个参数:
FROM
WROKDIR
COPY
RUN
CMD
Dockerfile 首字母要大写
FROM alpine#一行足以构建镜像,其他都是非必须的
WORKDIR /app #指定shell语句运行位置,镜像内会自动创建该目录
COPY src/ /app#拷贝宿主软件到镜像中
RUN echo 321>>1.txt #运行shell语句
CMD tail -f 1.txt #生命周期末尾 阻塞式结尾
docker pull alpine#拉取镜像
build -t test .#.表示Dockerfile文件位于当前目录下 test是指镜像 未指定版本
docker run test#运行镜像成为容器
#输出结果:321
EXPOSE指定当前镜像暴露的端口
VOLUME /a/b 映射作用,了解即可
ENV A=10
CMD echo $A
#输出结果:10
ARG B=11#构建参数,构建时才生效, 若直接CMD echo为空
总结如下
From XXX(基于什么镜像)
WORKDIR(指定shell语句运行在那个路径下)
COPY(将宿主机的文件拷贝到某路径下)
RUN(运行shell语句,只要构建就会运行,如echo 321 >> 1.txt)
CMD (指定镜像启动运行的脚本,只有容器真正运行的时候才会运行的脚本,执行后容器的生命周期即结束,且一般为阻塞式语句,如tail语句)
一般语句为:
FROM WORKDIR COPY-ADD RUN CMD-ENTRYPOINT
ENTRYPOINT非json则以ENTRYPOT为准,如果ENTRYPOINT和CMD都是JSON则ENTRYPOINT+CMD拼接成shell
EXPOSE---暴露镜像的指定端口
VOLUME---指定映射文件
ENV---指定doker的环境变量,运行时一直生效
ARG---构建参数,运行时无效,可以构建时候临时修改变量
LABEL---指定元数据,便于找到docker
ONBUILD---当前镜像构建的时候不会执行,基于当前镜像的镜像去构建的时候才会执行
STOPSIGNAL---指定容器使用什么信号,一般指定信号名
HEALTHCHECK---检查容易的健康状态
SHELL---指定linux为/bin/sh,windows为cmd
Dockerfile文件考察
#local 文件路径 视题目要求而定
FROM Centos:latest
MAINTAINER QQ:738441412#维护者信息
ADD jdk-8u251-linux-x64.tar.gz /usr/local/java#拉取JDK
ENV JAVA_HOME /usr/local/java/jdk1.8.0_251#配置环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
RUN MKDIR localhost
ADD ./test.sh /test.sh
RUN chmod +x /test.sh
CMD ["/bin/sh", "-c", "/test.sh"]#不执行test.sh直接只有第一个可执行文件的参数即可
#ADD命令可以直接在url拉取并解压,而copy命令需要解压并且不能通过url
#tar -zxvf 解压命令
最后一题
应该是需要填表格,加上配置文件的补充,配置文件与ppt中的内容相辅相成,不需要重复记忆。