hbase的安装和基本使用

本文详细介绍了如何在非HA模式下搭建Hadoop集群,包括Hadoop的环境配置、服务启动与验证,以及Hbase的安装、配置、启动和相关操作。通过步骤指导,读者可以了解到从Hadoop的环境变量设置、配置文件修改,到Hbase的命名空间、表创建、数据插入等操作,最后验证集群正常运行的方法。
摘要由CSDN通过智能技术生成

一,安装

hadoop集群安装 (非HA)

把hadoop-2.7.3.tar.gz(自行下载)上传到/app目录,解压:

tar -zxvf hadoop-2.7.3.tar.gz

/app/hadoop-2.7.3/etc/hadoop目录下,修改配置文件

新建目录:

mkdir -p /app/hadoop-2.7.3/tmp

mkdir -p /app/hadoop-2.7.3/tmp/dfs/name

mkdir -p /app/hadoop-2.7.3/tmp/dfs/data

core-site.xml 

    <property>

        <name>fs.defaultFS</name>

        <value>>hdfs://node1:9000</value>

        <!-- nnn是master 的 主机名, 9000不固定,只要端口没有被占用就可以 -->

    </property>

    <property>

        <name>fs.default.name</name>

        <value>hdfs://node1:9000</value>

    </property>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>file:/app/hadoop-2.7.3/tmp</value>

    </property>

hdfs-site.xml

        <property>

                <name>dfs.replication</name>

                <!-- 这个数字2 代表你有几台子节点,这个不要错 -->

                <value>2</value>

        </property>

        <property>

                <name>dfs.namenode.secondary.http-address</name>

                <!-- nnn是master 的 主机名 -->

                <value>node1:50090</value>

        </property>

        <property>

                <name>dfs.namenode.name.dir</name>

                <value>file:/app/hadoop-2.7.3/tmp/dfs/name</value>

        </property>

        <property>

                <name>dfs.datanode.data.dir</name>

                <value>file:/app/hadoop-2.7.3/tmp/dfs/data</value>

        </property>

拷贝mapred-site.xml.template 模板:cp mapred-site.xml.template mapred-site.xml

mapred-site.xml

<property>

      <name>mapreduce.framework.name</name>

      <value>yarn</value>

</property>

<property>

      <name>mapreduce.app-submission.cross-platform</name>

      <value>true</value>

</property>

yarn-site.xml

<property>

    <name>yarn.resourcemanager.hostname</name>

    <value>node1</value>

</property>

<property>

    <name>yarn.nodemanager.aux-services</name>

    <value>mapreduce_shuffle</value>

</property>

slaves :#配置所有dn的主机名称

node2

node3

hadoop-env.sh 修改JAVA_HOME

export JAVA_HOME=${JAVA_HOME} 改为:

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64

将配置好的hadoop文件夹分发到其他两台主机(dataNode)

scp -r hadoop-2.7.3 node2:/app/

scp -r hadoop-2.7.3 node3:/app/

配置环境变量(所有节点)

/etc/profile(root用户,普通用户为~/.bashrc)

#JAVA_HOME

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64

export PATH=$PATH:$JAVA_HOME/bin

#HADOOP

export HADOOP_HOME=/app/hadoop-2.7.3

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

source /etc/profile

格式化hdfs 文件系统(只需要这第一次,以后启动不需要了,只在node1(master节点上启动,其他的节点不需要启动), )

hadoop namenode -format 

见到这行字,基本就好了:

Storage directory /app/hadoop-2.7.3/tmp/dfs/name has been successfully formatted

*

*

*

/************************************************************

SHUTDOWN_MSG: Shutting down NameNode at node1/192.168.56.111

************************************************************/

启动服务:

启动HDFS(在集群的任意一台):

start-dfs.sh  (stop-dfs.sh)

启动YARN(在集群的master)

start-yarn.sh  (stop-yarn.sh)

验证服务进程(jps查看)

master:

SecondaryNameNode

NameNode

ResourceManager

其他节点:

DataNode

NodeManager

相关页面:

HDFS : http://192.168.56.111:50070
YARN : http://192.168.56.111:8088

疑惑: fs.defaultFS = hdfs://node1:9000

解答:客户单访问HDFS集群所使用的URL地址

同时,HDFS提供了一个web管理界面 端口:50070

至此,hadoop集群已经建立,可以执行hadoop的相关操作了。

3,安装Hbase

将hbase-1.3.0-bin.tar.gz上传至/app,解压:

tar -zxvf hbase-1.3.0-bin.tar.gz

/app/hbase-1.3.0/conf 目录下,修改配置文件:

hbase-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export HBASE_MANAGES_ZK=false

hbase-site.xml

        <property>

                <!-- 指定 hbase 在 HDFS 上存储的路径 -->

                <name>hbase.rootdir</name>

                <value>hdfs://node1:9000/hbase</value>

        </property>

        <property>

                <!-- 指定 hbase 是分布式的 -->

                <name>hbase.cluster.distributed</name>

                <value>true</value>

        </property>

        <property>

                <!-- 指定 zk 的地址,多个用“,”分割 -->

                <name>hbase.zookeeper.quorum</name>

                <value>node1:2181,node2:2181,node3:2181</value>

        </property>

regionservers

node1

node2

node3

把 hadoop 的 hdfs-site.xml 和 core-site.xml 放到 hbase的conf 目录下

cp /app/hadoop-2.7.3/etc/hadoop/hdfs-site.xml .

cp /app/hadoop-2.7.3/etc/hadoop/core-site.xml .

将配置好的hbase目录分发到其他节点

scp -r hbase-1.3.0 node2:/$PWD

scp -r hbase-1.3.0 node3:/$PWD

配置环境变量(所有节点)

/etc/profile(root用户,普通用户为~/.bashrc)

#JAVA_HOME

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64

export PATH=$PATH:$JAVA_HOME/bin

#HADOOP

export HADOOP_HOME=/app/hadoop-2.7.3

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

source /etc/profile

启动集群:

严格顺序执行:

1,启动zk(所有zk节点)

zkServer.sh start

2,启动HDFS集群及YARN集群(如果需要运行MapReduce程序则启动yarn集群,否则不需要启动)在hadoop的master节点执行

start-dfs.sh

start-yarn.sh

3,启动hbase(其中一台执行,执行的那台将自动成为master)

start-hbase.sh  (stop-hbase.sh   --stop命令需要在hMaster节点执行)

验证服务进程(jps查看)

master:

HMaster

其他节点:

HRegionServer

相关页面:

Hbase Master UI:

http://192.168.56.113:16010/master-status

至此,hbase集群已经建立,可以执行hbase的相关操作了。

如果有节点相应的进程没有启动,那么可以手动启动

hbase-daemon.sh start master

hbase-daemon.sh start regionserver

  • 主要命令脚本

进shell窗口命令:

hbase shell

帮助提示:

help

help "get"    //具体命令用法提示

列出所有的表:

list

列举命名空间 :

list_namespace

创建nameSpace:

create_namespace 'newns'

列出具体nameSpace下所有的表:

list_namespace_tables 'tianjin'

删除命名空间drop_namespace

drop_namespace 'newns'

查看表描述:

describe 't_hbase_table_v1'

查看服务器状态,可以带参( ‘summary’, ‘simple’, ‘detailed’, or ‘replication’. 默认为 ‘summary’)

status

status 'detailed'

查看版本号

version

查看支持的过滤器:

show_filters

创建表:

命令格式1:create ‘表名’,‘列簇名1’,‘列簇名2’…
命名格式2:create ‘表名’,{NAME=>‘列簇名1’},{NAME=>‘列簇名2’}…

#创建一张名为Student的表,包含基本信息(baseinfo)、学校信息(schoolinfo)两个列簇

不指定命名空间,默认放default。指定命名空间格式:nameSpaceName:tableName

#简便写法

create 'student','baseinfo','schoolinfo'

#完整写法,可以指定更多属性(VERSIONS意为保留多少个版本)

create 'default:student', {NAME => 'baseinfo', VERSIONS => 1, TTL => 36000000000, BLOCKCACHE => true},{NAME => 'schoolinfo', VERSIONS => 1, TTL => 36000000000, BLOCKCACHE => true}

删除表:

#删除表前需要先禁用表

disable 'student'

#删除表

drop 'student'

表的启用与禁用

#禁用表 disable 'student'

#检查表是否被禁用 is_disabled 'student'

#启用表 enable 'student'

#检查表是否被启用 is_enabled 'student'

#查看表是否存在

exists 'student'

查看表中记录数

count 'student'

#增加指定表行或列的值incr

incr '表名', '行键', '列族:列名', 步长值

#获取计数器

get_counter '表名', '行键', '列族:列名'

#重新创建指定表truncate(truncate是disable、drop、create三个动作的自动化集成。)

truncate 'fr:test'

插入数据:

命令格式:put ‘表名’,‘行键’,‘列簇名:列名’,‘值’[,时间戳]

put 'student', '1','baseinfo:name','tom'

put 'student', '1','baseinfo:birthday','1990-01-09'

put 'student', '1','baseinfo:age','29'

put 'student', '1','schoolinfo:name','Havard'

put 'student', '1','schoolinfo:localtion','Boston'

put 'student', '2','baseinfo:name','jack'

put 'student', '2','baseinfo:birthday','1998-08-22'

put 'student', '2','baseinfo:age','21'

put 'student', '2','schoolinfo:name','yale'

put 'student', '2','schoolinfo:localtion','New Haven'

put 'student', '3','baseinfo:name','maike'

put 'student', '3','baseinfo:birthday','1995-01-22'

put 'student', '3','baseinfo:age','24'

put 'student', '3','schoolinfo:name','yale'

put 'student', '3','schoolinfo:localtion','New Haven'

put 'student', '4','baseinfo:name','maike-jack'

获取指定行、指定行中的列族、列的信息:

# 获取指定行中所有列的数据信息

get 'student','3'

# 获取指定行中指定列族下所有列的数据信息

get 'student','3','baseInfo'

# 获取指定行中指定列的数据信息

get 'student','3','baseinfo:name'

删除指定行、指定行中的列

# 删除指定行

deleteall 'student','3'

# 删除指定行中指定列的数据

delete 'student','3','baseinfo:name'

scan查询

#查询整表数据

scan 'student'

#查询指定列簇的数据

scan 'student', {COLUMN=>'baseinfo'}

# 查询指定列的数据

scan 'student', {COLUMNS=> 'baseinfo:birthday'}

#限制查询结果的条数

scan '表名称', {STARTROW => '开始行', LIMIT => 行数, VERSIONS => 版本号, STOPROW => 结束行, TIMERANGE => '限制时间戳范围'}

scan的Filter

#谁的值=yale

scan 'student', FILTER=>"ValueFilter(=,'binary:yale')"

#谁的值包含ya

scan 'student', FILTER=>"ValueFilter(=,'substring:ya')"  

#列名为'localti'开头,包含osto或者Haven的列记录

scan 'student', FILTER=>"ColumnPrefixFilter('localti') AND ( ValueFilter(=,'substring:osto') OR ValueFilter(=,'substring:Haven') )"

#rowKey为1开头,可结合STARTROW,STOPROW

scan 'student', FILTER => "PrefixFilter ('1')"  

#RowFilter,参考ValueFilter,此为过滤rowKey

scan 'student', FILTER=>"RowFilter(=,'binary:1')"

scan 'student', FILTER=>"RowFilter(=,'substring:1')"

  • 问题

1, fs.defaultFS还是 fs.default.name

使用 fs.default.name 还是 使用 fs.defaultFS ,要首先判断是否开启了 NN 的HA (namenode 的 highavaliable),如果开启了nn ha,那么就用fs.defaultFS,在单一namenode的情况下,就用 fs.default.name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值