前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HBase使用

HBase使用

作者头像
若与
发布于 2019-06-25 02:25:16
发布于 2019-06-25 02:25:16
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

一、HBase介绍

1、基本概念

HBase是一种Hadoop数据库,经常被描述为一种稀疏的,分布式的,持久化的,多维有序映射,它基于行键、列键和时间戳建立索引,是一个可以随机访问的存储和检索数据的平台。HBase不限制存储的数据的种类,允许动态的、灵活的数据模型,不用SQL语言,也不强调数据之间的关系。HBase被设计成在一个服务器集群上运行,可以相应地横向扩展。

2、HBase使用场景和成功案例

  • 互联网搜索问题:爬虫收集网页,存储到BigTable里,MapReduce计算作业扫描全表生成搜索索引,从BigTable中查询搜索结果,展示给用户。
  • 抓取增量数据:例如,抓取监控指标,抓取用户交互数据,遥测技术,定向投放广告等
  • 内容服务
  • 信息交互

上面简单介绍一下hbase, 至于hbase的原理,以及架构, 后面我整理完, 再发出来。 现在只是对hbase会使用。 就先从使用开始入门。

二、 HBase使用

hbase是数据库, 数据库那就是存储数据的, 那就离不开curd. 类似mysql, 有shell客户端以及语言的sdk方式。

2.1 HBASE shell

hbase shell 类似mysql的客户端

help可以查看所有的命名帮助

下面是命令分组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
COMMAND GROUPS:
  Group name: general
  Commands: processlist, status, table_help, version, whoami

  Group name: ddl
  Commands: alter, alter_async, alter_status, create, create_layered, describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, list, list_regions, locate_region, show_filters

  Group name: namespace
  Commands: alter_namespace, create_namespace, describe_namespace, drop_namespace, list_namespace, list_namespace_tables

  Group name: dml
  Commands: append, count, delete, deleteall, get, get_counter, get_splits, incr, put, scan, truncate, truncate_preserve

  Group name: tools
  Commands: assign, balance_switch, balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, cleaner_chore_enabled, cleaner_chore_run, cleaner_chore_switch, clear_block_cache, clear_compaction_queues, clear_deadservers, close_region, compact, compact_rs, compaction_state, flush, is_in_maintenance_mode, list_deadservers, major_compact, merge_region, move, normalize, normalizer_enabled, normalizer_switch, split, splitormerge_enabled, splitormerge_switch, trace, unassign, wal_roll, zk_dump

  Group name: replication
  Commands: add_peer, append_peer_namespaces, append_peer_tableCFs, disable_peer, disable_table_replication, enable_peer, enable_table_replication, get_peer_config, list_peer_configs, list_peers, list_replicated_tables, remove_peer, remove_peer_namespaces, remove_peer_tableCFs, set_peer_bandwidth, set_peer_exclude_namespaces, set_peer_exclude_tableCFs, set_peer_namespaces, set_peer_replicate_all, set_peer_tableCFs, show_peer_tableCFs, update_peer_config

  Group name: snapshots
  Commands: clone_snapshot, delete_all_snapshot, delete_snapshot, delete_table_snapshots, list_snapshots, list_table_snapshots, restore_snapshot, snapshot

  Group name: configuration
  Commands: update_all_config, update_config

  Group name: quotas
  Commands: list_quota_snapshots, list_quota_table_sizes, list_quotas, list_snapshot_sizes, set_quota

  Group name: security
  Commands: grant, list_security_capabilities, revoke, user_permission

  Group name: procedures
  Commands: abort_procedure, list_locks, list_procedures

  Group name: visibility labels
  Commands: add_labels, clear_auths, get_auths, list_labels, set_auths, set_visibility

  Group name: rsgroup
  Commands: add_rsgroup, balance_rsgroup, get_rsgroup, get_server_rsgroup, get_table_rsgroup, list_rsgroups, move_namespaces_rsgroup, move_servers_namespaces_rsgroup, move_servers_rsgroup, move_servers_tables_rsgroup, move_tables_rsgroup, remove_rsgroup, remove_servers_rsgroup

1. 常规命名:

  1. 集群状态 status
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hbase(main):005:0> status
1 active master, 0 backup masters, 1 servers, 0 dead, 793.0000 average load
Took 0.9453 seconds
  1. 版本 version
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hbase(main):006:0> version
2.0.2, rc6f16dff66b5d7c4fb66d3bf7eda4f56515c63f3, Fri Jan 25 19:23:41 CST 2019
Took 0.0004 seconds

2. DDL命令

命令

命令含义

命令使用示例

alter

修改表的列族的描述属性

aliter 't1',NAME => 'f1',VERSIONS => 5

alter_async

异步修改表的列族的描述属性,并不需要等待所有Region都完成操作。用法和alter命令相同

alter_async 't1',NAME => 'f1',VERSIONS => 5

alter_status

获取alter命令的状态,会标注已经有多少region更改了Schema。 命令的参数是表名

alter_status 't1'

create

创建表

create 't1' ,{NAME => 'f1', VERSIONS => 5}; create 't1','f1','f2', 'f3'

describe

获取表的元数据信息和是否可用的的状态

describe 't1'

disable

禁用某个表

disable 't1'

disable_all

禁用所有正则匹配的表

disable_all 't1.*'

drop

删除表

drop 't1'

enable

启用表

enable 't1'

enable_all

启用正则匹配的表

enable_all 't1.*'

exists

判断表是否存在

exists 't1'

is_disable

判断表是否是禁用的

is_disable 't1'

is_enbale

判断表是否是启用的

is_disable 't1'

show_filter

查看所支持的所有过滤器的名称

show_filters

list

列出所有表的名称

list

DML

  1. count 统计表的总行数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
count 't1'
count 't1', INTERVAL => 1000
count 't1', CACHE => 1000,
count 't1', INTERVAL => 10, CACHE => 1000
  1. delete 删除一个单元格
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delete 't1', 'r1', 'c1', ts1
  1. deleteall 删除一行或一列
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deleteall 't1','r1'
deleteall 't1','r1','c1'
deleteall 't1', 'r1','c1', ts1
  1. get 单行读
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  hbase> get 'ns1:t1', 'r1'
  hbase> get 't1', 'r1'
  hbase> get 't1', 'r1', {TIMERANGE => [ts1, ts2]}
  hbase> get 't1', 'r1', {COLUMN => 'c1'}
  hbase> get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
  hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}
  hbase> get 't1', 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}
  hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4}
  hbase> get 't1', 'r1', {FILTER => "ValueFilter(=, 'binary:abc')"}
  hbase> get 't1', 'r1', 'c1'
  hbase> get 't1', 'r1', 'c1', 'c2'
  hbase> get 't1', 'r1', ['c1', 'c2']
  hbase> get 't1', 'r1', {COLUMN => 'c1', ATTRIBUTES => {'mykey'=>'myvalue'}}
  hbase> get 't1', 'r1', {COLUMN => 'c1', AUTHORIZATIONS => ['PRIVATE','SECRET']}
  hbase> get 't1', 'r1', {CONSISTENCY => 'TIMELINE'}
  hbase> get 't1', 'r1', {CONSISTENCY => 'TIMELINE', REGION_REPLICA_ID => 1}
  1. get_counter 读取计数器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  hbase> get_counter 'ns1:t1', 'r1', 'c1'
  hbase> get_counter 't1', 'r1', 'c1'
  1. incr 自增写入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  hbase> incr 'ns1:t1', 'r1', 'c1'
  hbase> incr 't1', 'r1', 'c1'
  hbase> incr 't1', 'r1', 'c1', 1
  hbase> incr 't1', 'r1', 'c1', 10
  hbase> incr 't1', 'r1', 'c1', 10, {ATTRIBUTES=>{'mykey'=>'myvalue'}}
  hbase> incr 't1', 'r1', 'c1', {ATTRIBUTES=>{'mykey'=>'myvalue'}}
  hbase> incr 't1', 'r1', 'c1', 10, {VISIBILITY=>'PRIVATE|SECRET'}
  1. put 数据写入
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  hbase> put 'ns1:t1', 'r1', 'c1', 'value'
  hbase> put 't1', 'r1', 'c1', 'value'
  hbase> put 't1', 'r1', 'c1', 'value', ts1
  hbase> put 't1', 'r1', 'c1', 'value', {ATTRIBUTES=>{'mykey'=>'myvalue'}}
  hbase> put 't1', 'r1', 'c1', 'value', ts1, {ATTRIBUTES=>{'mykey'=>'myvalue'}}
  hbase> put 't1', 'r1', 'c1', 'value', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
  1. scan 扫描表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  hbase> scan 'hbase:meta'
  // 显示指定列
  hbase> scan 'hbase:meta', {COLUMNS => 'info:regioninfo'}
  
  // limit start
  hbase> scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
  hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
  
 //  时间范围
  hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804000, 1303668904000]}
  hbase> scan 't1', {REVERSED => true}
  hbase> scan 't1', {ALL_METRICS => true}
  hbase> scan 't1', {METRICS => ['RPC_RETRIES', 'ROWS_FILTERED']}
  
  // 使用过滤器, show_filters查看所有可以使用的过滤器
  hbase> scan 't1', {ROWPREFIXFILTER => 'row2', FILTER => "
    (QualifierFilter (>=, 'binary:xyz')) AND (TimestampsFilter ( 123, 456))"}
  hbase> scan 't1', {FILTER =>
    org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}
  hbase> scan 't1', {CONSISTENCY => 'TIMELINE'}
For setting the Operation Attributes
  hbase> scan 't1', { COLUMNS => ['c1', 'c2'], ATTRIBUTES => {'mykey' => 'myvalue'}}
  hbase> scan 't1', { COLUMNS => ['c1', 'c2'], AUTHORIZATIONS => ['PRIVATE','SECRET']}
  1. truncate 清空表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
truncate 't1'

还有其他命令, 就不多介绍了, 自己使用 help查看了

2.2 go操作 hbase

介绍一下go操作hbase

Install

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get github.com/tsuna/gohbase
Create a client
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client := gohbase.NewClient("localhost")
Insert a cell
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Values maps a ColumnFamily -> Qualifiers -> Values.
values := map[string]map[string][]byte{"cf": map[string][]byte{"a": []byte{0}}}
putRequest, err := hrpc.NewPutStr(context.Background(), "table", "key", values)
rsp, err := client.Put(putRequest)
Get an entire row
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
getRequest, err := hrpc.NewGetStr(context.Background(), "table", "row")
getRsp, err := client.Get(getRequest)
Get a specific cell
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Perform a get for the cell with key "15", column family "cf" and qualifier "a"
family := map[string][]string{"cf": []string{"a"}}
getRequest, err := hrpc.NewGetStr(context.Background(), "table", "15",
    hrpc.Families(family))
getRsp, err := client.Get(getRequest)
Get a specific cell with a filter
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pFilter := filter.NewKeyOnlyFilter(true)
family := map[string][]string{"cf": []string{"a"}}
getRequest, err := hrpc.NewGetStr(context.Background(), "table", "15",
    hrpc.Families(family), hrpc.Filters(pFilter))
getRsp, err := client.Get(getRequest)
Scan with a filter
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pFilter := filter.NewPrefixFilter([]byte("7"))
scanRequest, err := hrpc.NewScanStr(context.Background(), "table",
        hrpc.Filters(pFilter))
scanRsp, err := client.Scan(scanRequest)

我们看一下代码架构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
├── AUTHORS
├── COPYING
├── Makefile
├── README.md
├── admin_client.go
├── caches.go
├── check_line_len.awk
├── client.go
├── discovery_test.go
├── filter
├── hrpc
├── install_ci.sh
├── integration_test.go
├── metacache_test.go
├── pb
├── region
├── rpc.go
├── rpc_test.go
├── scanner.go
├── scanner_test.go
├── table_test.go
├── test
└── zk

上面代码的整理的很有条理, hrpc主要是rpc调用的方法 filter是get或scan的filter过滤器 region是 region的一些接口 cache是缓存,hbase中为了提高性能,很多地方都采用cache方式。 zk就是zookeeper相关的。

我们下面阅读以下源码 gohbase操作的入口主要是 clientadmin_client

我们围绕 clientadmin_client

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// AdminClient to perform admistrative operations with HMaster
type AdminClient interface {
    CreateTable(t *hrpc.CreateTable) error
    DeleteTable(t *hrpc.DeleteTable) error
    EnableTable(t *hrpc.EnableTable) error
    DisableTable(t *hrpc.DisableTable) error
    ClusterStatus() (*pb.ClusterStatus, error)
}



// CreateTable represents a CreateTable HBase call
type CreateTable struct {
    base

    families  map[string]map[string]string
    splitKeys [][]byte
}

// NewCreateTable creates a new CreateTable request that will create the given
// table in HBase. 'families' is a map of column family name to its attributes.
// For use by the admin client.
func NewCreateTable(ctx context.Context, table []byte,
    families map[string]map[string]string,
    options ...func(*CreateTable)) *CreateTable {
    ct := &CreateTable{
        base: base{
            table:    table,
            ctx:      ctx,
            resultch: make(chan RPCResult, 1),
        },
        families: make(map[string]map[string]string, len(families)),
    }
    for _, option := range options {
        option(ct)
    }
    for family, attrs := range families {
        ct.families[family] = make(map[string]string, len(defaultAttributes))
        for k, dv := range defaultAttributes {
            if v, ok := attrs[k]; ok {
                ct.families[family][k] = v
            } else {
                ct.families[family][k] = dv
            }
        }
    }
    return ct
}

主要是DDL

再看 client

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Client a regular HBase client
type Client interface {
    Scan(s *hrpc.Scan) hrpc.Scanner
    Get(g *hrpc.Get) (*hrpc.Result, error)
    Put(p *hrpc.Mutate) (*hrpc.Result, error)
    Delete(d *hrpc.Mutate) (*hrpc.Result, error)
    Append(a *hrpc.Mutate) (*hrpc.Result, error)
    Increment(i *hrpc.Mutate) (int64, error)
    CheckAndPut(p *hrpc.Mutate, family string, qualifier string,
        expectedValue []byte) (bool, error)
    Close()
}

主要是DML相关的。 我们看一下put

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// NewPut creates a new Mutation request to insert the given
// family-column-values in the given row key of the given table.
func NewPut(ctx context.Context, table, key []byte,
    values map[string]map[string][]byte, options ...func(Call) error) (*Mutate, error) {
    m, err := baseMutate(ctx, table, key, values, options...)
    if err != nil {
        return nil, err
    }
    m.mutationType = pb.MutationProto_PUT
    return m, nil
}

// NewPutStr is just like NewPut but takes table and key as strings.
func NewPutStr(ctx context.Context, table, key string,
    values map[string]map[string][]byte, options ...func(Call) error) (*Mutate, error) {
    return NewPut(ctx, []byte(table), []byte(key), values, options...)
}

其中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// baseMutate returns a Mutate struct without the mutationType filled in.
func baseMutate(ctx context.Context, table, key []byte, values map[string]map[string][]byte,
    options ...func(Call) error) (*Mutate, error) {
    m := &Mutate{
        base: base{
            table:    table,
            key:      key,
            ctx:      ctx,
            resultch: make(chan RPCResult, 1),
        },
        values:    values,
        timestamp: MaxTimestamp,
    }
    err := applyOptions(m, options...)
    if err != nil {
        return nil, err
    }
    return m, nil
}


// 注意
func applyOptions(call Call, options ...func(Call) error) error {
    call.(withOptions).setOptions(options)
    for _, option := range options {
        err := option(call)
        if err != nil {
            return err
        }
    }
    return nil
}

其中option的使用如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    client := gohbase.NewClient("localhost")

    pFilter := filter.NewKeyOnlyFilter(true)
    family := map[string][]string{"cf": []string{"a"}}
    getRequest, _ := hrpc.NewGetStr(context.Background(), "table", "15",
        hrpc.Families(family), hrpc.Filters(pFilter), hrpc.MaxVersions(2))
    _, _ := client.Get(getRequest)



    values := map[string]map[string][]byte{"cf": map[string][]byte{"a": []byte{0}}}
    putRequest, err := hrpc.NewPutStr(context.Background(), "table", "key", values, hrpc.Timestamp(time.Time{}), hrpc.MaxVersions(1))
    rsp, err := client.Put(putRequest)
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.06.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Git - 入门到熟悉_远程仓库管理
好了,提交到 https://gitee.com/yangshangwei/gitProject.git 分支了,我们去gitee上查看一把
小小工匠
2022/09/22
2500
Git - 入门到熟悉_远程仓库管理
一文学会日常操作Git(环境配置、初始化、本地仓库和远程仓库操作和分支操作)
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。
共饮一杯无
2022/11/28
5240
一文学会日常操作Git(环境配置、初始化、本地仓库和远程仓库操作和分支操作)
Git多仓库作子目录的双向同步:一次Git Subtree的实践
今年1月中旬的时候BZ在GitHub上收到Typecho社区组织typecho-fans的成员邀请,原来是想把所有TP的开源插件都整合到GitHub上进行维护。之前BLOG在使用Typecho的时候写了3个插件:新浪云存储SCS插件、移植自WordPress的音乐播放器插件和新浪微博同步插件,那如果放到typecho-fans上进行维护的话对使用者和开发者来说都是挺方便的。但是当时不知道怎么把之前这3个已经放在GitHub上进行维护的插件仓库作为子目录/仓库同步到typecho-fans的插件仓库中,所以一直都没有行动。
typecodes
2024/03/29
4960
Git多仓库作子目录的双向同步:一次Git Subtree的实践
GIT
1 编写忽略文件 C:\Users\shiye\Java.gitignore 详细可以参考:https://github.com/github/gitignore
用户5927264
2019/10/28
4610
GIT
git和码云的使用
因为我是win10的系统,所以展示window的下载页面,其他mac系统之类的,可以选择其他系统来下载即可。
Devops海洋的渔夫
2019/05/31
1.6K0
GitHub-创建仓库与本地同步
1. 在Linux上安装Git 1 [root@mini05 ~]# yum install -y git 2 ……………… 2. 本地创建ssh-key信息 1 [root@mini05 ~]# ssh-keygen -t rsa 2 Generating public/private rsa key pair. 3 Enter file in which to save the key (/root/.ssh/id_rsa): 4 Created directory '/root/.ssh'.
踏歌行
2020/10/15
6770
GitHub-创建仓库与本地同步
git一日速成
通过镜像网站下载git-for-windows Mirror (taobao.org),本教程使用版本为2.17.0.安装过程使用默认选项,在选择path选项时不改变环境变量,只通过git Bash使用即可(如下图)。
半旧518
2022/10/26
5990
git一日速成
Git-将已有的项目转换为GIT项目托管到 GITHUB 仓库
本地项目目录: D:\workspace\workspace-sts\SpringMaster
小小工匠
2021/08/16
5870
Jyputer 项目工程设置Github同步,本地代码上传Github实例演示
首先在 Github 上创建一个仓库,它将用于存储、同步本地 Jyputer 里的项目。
小蓝枣
2021/12/01
3300
Jyputer 项目工程设置Github同步,本地代码上传Github实例演示
Git 技术篇 - GitHub克隆私有仓库方法,新主机绑定并同步github私有库实例演示
首先看下我克隆我自己私有库的成功效果图。 公有仓库克隆方法。 $ git clone git@github.com:2418546511/Py_jyputer.git 私有仓库克隆方法。 $ git clone https://用户名:密码@github.com/2418546511/Py_jyputer.git 同步私有库演示: Administrator@DESKTOP-HVAQES8 MINGW64 /c/Py_jupyter (master) $ git add pytools Adminis
小蓝枣
2021/12/01
4K0
Git 技术篇 - GitHub克隆私有仓库方法,新主机绑定并同步github私有库实例演示
git 多人协作开发冲突解决——分支合并冲突
接上篇文章,更加严谨的来说,再修改时要创建一个新的分支进行修改,修改完成再拉取远端仓库最新版本,再进行合并,有冲突解决冲突,再push,最后在删除开发分支这样一个流程。所以现在就来简单记录分享一下如何解决合并分支冲突。
ZGGSONG
2022/09/09
2.5K0
Unity团队开发-Git命令行Unity团队开发-Git命令行
Administrator@XTKJ-20210419KS MINGW64 ~ $ cd /d/LocalGit Administrator@XTKJ-20210419KS MINGW64 /d/LocalGit (master) $ ls -a ./ ../ .git/ 1.txt Administrator@XTKJ-20210419KS MINGW64 /d/LocalGit (master) $ touch .ignore Administrator@XTKJ-20210419KS MI
孙寅
2021/12/07
7900
如何将当前Git最新版本回退到指定版本号,并为指定版本创建一个新分支同步到远程仓库
如何将当前Git最新版本回退到指定版本号,并为指定版本创建一个新分支同步到远程仓库          我们在使用Git分布式管理工具的时候,经常会涉及到如何将本地最新代码切换到之前版本历史里指定版本(这里可能是代码出现bug,需求变更,版本分支,产品线分支等..),这是我在实际开发中遇到过的问题,所以在此记录一下整个操作的过程,方便下次能直接使用,而不是去百度里翻来翻去,还有就是百度到的东西不一定对,一定要结合自己的问题进行取舍,不然后悔的总是自己,记得有一次我直接把整个本地版本库都弄乱了,害我又重新写了一
秋日芒草
2018/05/15
1.5K0
git入门(msysgit图文安装)
(1)常用的GitHub客户端msysgit,也就是git-for-windows。
程裕强
2022/05/06
1.2K0
git入门(msysgit图文安装)
Git 团队协作机制
岳:冲儿,我先把代码推送到远程库,你把代码clone到本地,自己研究一下,有发现推送到远程库,然后我再把远程库的代码拉下来。
用户9615083
2022/12/25
3430
Git 团队协作机制
一个小时学会Git
张果
2018/01/04
3.5K0
一个小时学会Git
学习git这一篇就够了!!!
git命令操作 本地库操作 初始化本地仓库 初始化命令 git init $ work % cd workspace $ workspace % mkdir WebService //创建文件夹 $ workspace % git init //初始化 Initialized empty Git repository in /Users/jack/work/workspace/.git/ $ workspace % 初始化后的效果 会在初始化后的目录中生成一个.git隐藏文件夹 $ workspace %
烂猪皮
2020/10/10
8120
搭建git服务器
我们都知道GitHub只有公开库是免费的,而私有仓库是需要花钱买的。所以我们可以想办法自己搭建一个私有的,仅自己公司使用的。Gitlab是个不错的选择。在介绍它之前,先讲述一下如何搭建命令行的git服务器。
端碗吹水
2020/09/23
3.1K0
搭建git服务器
8 Git和Github深入
本文我们将继续深入学习 Git 和 Github,了解 Git 中 main 分支和 master 分支的区别,并阐明 Git 和 Github 的区别。
Lemon黄
2023/12/02
4360
8 Git和Github深入
9 Git和Github高级
本文我将将学习一些高级的 Git 技术,包括分支、合并、恢复、保存更改、选择性提交以及冲突解决等等。这些技术对于软件开发项目中的有效协作和版本控制至关重要。那么,让我们开始吧。
Lemon黄
2023/12/03
2340
9 Git和Github高级
推荐阅读
相关推荐
Git - 入门到熟悉_远程仓库管理
更多 >
LV.1
家里蹲JAVA开发
目录
  • 一、HBase介绍
    • 1、基本概念
    • 2、HBase使用场景和成功案例
    • 二、 HBase使用
    • 2.1 HBASE shell
    • 1. 常规命名:
    • 2. DDL命令
    • DML
    • 2.2 go操作 hbase
      • Create a client
      • Insert a cell
      • Get an entire row
      • Get a specific cell
      • Get a specific cell with a filter
      • Scan with a filter
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档