HBase 安装使用(自己总结)

HBase 安装使用(自己总结)

环境准备

集群工具脚本

ccmd.sh 集群命令执行
cd && cat > ccmd.sh << 'EOF'
#!/bin/bash
if((0==$#)); then
  echo no args;
  echo "Usage: $0 cmd1; cmd2; cmd3"  # 多个命令用分号隔开
  exit;
fi

# cd -P 透过软连接获取绝对路径
pdir=`cd -P . ; pwd`

# 修改seq 范围以覆盖更多节点
for i in $(seq 112 114); do
  host="hadoop$i"
  # 对于本机的命令最后再执行
  if [ $host = $(hostname) ]; then continue; fi
  echo -e "====================\t\t$host\t\t===================="
  echo -e "$pdir    $*"
  ssh $host "cd $pdir ; $*"
done
# 最后执行本机的命令
echo -e "====================\t\t$(hostname)\t\t===================="
echo -e "$pdir    $*"
ssh $(hostname) "cd $pdir ; $*"
EOF

# 赋予脚本执行权限
chmod +x ccmd.sh
# 移到随时可以调用的目录
sudo mv ccmd.sh /usr/local/bin/

xsync.sh 集群文件同步
cd && cat > xsync.sh << 'EOF'
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
  echo no args;
  exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环分发,跳过本机,一般是102~104 做集群
for((host=102; host<105; host++)); do
  echo ------------------- hadoop$host ----------------
  if [ hadoop$host != $(hostname) ]; then
    rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
  fi
done
EOF

# 赋予脚本执行权限
chmod +x xsync.sh
# 移到随时可以调用的目录
sudo mv xsync.sh /usr/local/bin/

JDK8 安装

# 下载JDK 8
wget --no-cookies --no-check-certificate --header \
"Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" \
"http://download.oracle.com/otn-pub/java/jdk/8u241-b07/1f5b5a70bf22433b84d0e960903adac8/jdk-8u241-linux-x64.tar.gz" -P ~/

# 解压安装
sudo tar -xf jdk-8u241-linux-x64.tar.gz -C /usr/local/

# 配置~/.bashrc
echo -e '\n\n# JDK 1.8' >> ~/.bashrc
echo 'export JAVA_HOME=/usr/local/jdk1.8.0_241' >> ~/.bashrc
echo 'export JRE_HOME=${JAVA_HOME}/jre' >> ~/.bashrc
echo 'export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib' >> ~/.bashrc
echo 'export PATH=$PATH:${JAVA_HOME}/bin' >> ~/.bashrc

# 应用设置
source ~/.bashrc

# 测试效果
java -version

# 清理残余
rm jdk-8u241-linux-x64.tar.gz

Hadoop 单机版安装

HBase使用单机或分布式的HDSF都可以,简单起见,这里只在hadoop112上部署单机版的HDFS

# 下载
wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz

# 解压
sudo mkdir -p /opt/modules
sudo chown -R `id -u`:`id -g` /opt/modules  # 赋予当前用户修改该目录的权限
tar -xf hadoop-2.7.2.tar.gz -C /opt/modules

# 删除多余的cmd 文件,Linux 下不需要
rm -rf /opt/modules/hadoop-2.7.2/bin/*.cmd
rm -rf /opt/modules/hadoop-2.7.2/sbin/*.cmd
rm -rf /opt/modules/hadoop-2.7.2/etc/hadoop/*.cmd

# 配置
## 1. hadoop-env.sh,修改JAVA_HOME 路径
sed -i 's#=${JAVA_HOME}#=/usr/local/jdk1.8.0_241#' \
    /opt/modules/hadoop-2.7.2/etc/hadoop/hadoop-env.sh

## 2. core-site.xml
cat > /opt/modules/hadoop-2.7.2/etc/hadoop/core-site.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!-- 指定HDFS 中NameNode 的地址 -->
  <property>
  <name>fs.defaultFS</name>
    <value>hdfs://hadoop112:9000</value>
  </property>

  <!-- 指定Hadoop 运行时产生文件的存储目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/modules/hadoop-2.7.2/data/tmp</value>
  </property>
</configuration>
EOF

## 3. hdfs-site.xml
cat > /opt/modules/hadoop-2.7.2/etc/hadoop/hdfs-site.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <!-- 指定文件在HDFS 中的副本数 -->
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>
EOF

# 启动
## 1. 格式化`NameNode`,仅在初始化时执行一次。
### 前面将数据文件设置在data 目录下,先清空再格式化
cd /opt/modules/hadoop-2.7.2
rm -rf data/ logs/ && bin/hdfs namenode -format
### 出现Exiting with status 0 字样表示格式化成功

## 2. 启动HDFS
### 统一启动,NameNode、DataNode、SecondaryNameNode 一起
cd /opt/modules/hadoop-2.7.2 && sbin/start-dfs.sh

Zookeeper 安装

# 下载Zookeeper
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

# 解压安装Zookeeper
tar -xf zookeeper-3.4.10.tar.gz -C /opt/modules/

# 创建Zookeeper 数据持久化目录zkData
mkdir -p /opt/modules/zookeeper-3.4.10/zkData

# 删除多余的.cmd 文件,Linux 下用不着
rm -rf /opt/modules/zookeeper-3.4.10/bin/*.cmd

# 使用cat 和here document 创建配置文件zoo.cfg
cat > /opt/modules/zookeeper-3.4.10/conf/zoo.cfg << 'EOF'
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/modules/zookeeper-3.4.10/zkData/
clientPort=2181

# Zookeeper Cluster
server.2=hadoop112:2888:3888
server.3=hadoop113:2888:3888
server.4=hadoop114:2888:3888
EOF

# 将安装文件同步到集群所有节点上
xsync.sh /opt/modules/zookeeper-3.4.10/

# 将各节点的主机名最后一位作为myid,例如:hadoop112 的myid 为2
ccmd.sh 'var=$(hostname); echo ${var:0-1:1} > /opt/modules/zookeeper-3.4.10/zkData/myid'

# 单点启停Zookeeper
cd /opt/modules/zookeeper-3.4.10/ && bin/zkServer.sh start
## 注意!!在哪里启动就会在哪里生成Zookeeper 的启动日志文件zookeeper.out
cd /opt/modules/zookeeper-3.4.10/ && bin/zkServer.sh stop

# 查看Zookeeper 状态
cd /opt/modules/zookeeper-3.4.10/ && bin/zkServer.sh status

# 启停Zookeeper 集群
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh start  # 启动集群
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh stop  # 停止集群
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh restart  # 重启集群

# 查看Zookeeper 各节点服务状态
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh status

HBase 安装

单机版

This is the default mode. Standalone mode is what is described in the quickstart section. In standalone mode, HBase does not use HDFS — it uses the local filesystem instead — and it runs all HBase daemons and a local ZooKeeper all up in the same JVM. ZooKeeper binds to a well known port so clients may talk to HBase.

# 1. 安装
## 1.1 下载
wget https://archive.apache.org/dist/hbase/1.3.1/hbase-1.3.1-bin.tar.gz

## 1.2 解压
tar -xf hbase-1.3.1-bin.tar.gz -C /opt/modules

## 1.3 清理多余的.cmd
rm -rf /opt/modules/hbase-1.3.1/bin/*.cmd
rm -rf /opt/modules/hbase-1.3.1/conf/*.cmd


# 2. 配置
## 2.1 hbase-env.sh
cat > /opt/modules/hbase-1.3.1/conf/hbase-env.sh << 'EOF'
export JAVA_HOME=/usr/local/jdk1.8.0_241
EOF

## 2.2 hbase-site.xml
cat > /opt/modules/hbase-1.3.1/conf/hbase-site.xml << 'EOF'
<configuration>
  <!-- 以下配置的目录均不需要事先创建 -->
  <!-- HBase 使用本地文件系统保存数据 -->
  <property>
    <name>hbase.rootdir</name>
    <value>file:///opt/modules/hbase-1.3.1/data</value>
  </property>

  <!-- Zookeeper 使用本地文件系统保存数据 -->
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>file:///opt/modules/hbase-1.3.1/data/zookeeper</value>
  </property>
</configuration>
EOF


# 3. 启停
cd /opt/modules/hbase-1.3.1 && bin/start-hbase.sh  # 启动HBase
cd /opt/modules/hbase-1.3.1 && bin/stop-hbase.sh  # 停止HBas

分布式

完全分布式在[HBase 单机版](# 单机版)的基础上进行配置。
注意!!时间对于HBase来说是相当重要的元素,例如记录被更新时,老数据不会被马上删除,它是通过插入一条新数据,读取时比较Timestamp来判断应该取谁的,所以各个节点时间不能有太大的误差,所以生产环境配置NTP 服务器是很有必要的。

# 0. 清理
# 0.1 删除多余的日志和数据
cd /opt/modules/hbase-1.3.1 && rm -rf logs/ data/ tmp/

# 0.2 同一集群时间,实际上还是会有1s 左右的误差
#ccmd.sh date -s "20070414 13:58:00"  # 时间差不多可以不做


# 1. 配置
## 1.1 hbase-env.sh
cat > /opt/modules/hbase-1.3.1/conf/hbase-env.sh << 'EOF'
export JAVA_HOME=/usr/local/jdk1.8.0_241
# 不让HBase 管理ZooKeeper
export HBASE_MANAGES_ZK=false
## 默认是true,默认会让ZooKeeper 随HBase 一起启停,并管理类似myid 等信息
## 但大数据系统中的ZooKeeper 集群还可能管理着别的框架,所以不能让其只跟HBase 绑定在一起
## 如没在hbase-site.xml 中配置hbase.zookeeper.quorum 则HBase 会启动自带的mini_ZooKeeper
EOF

## 1.2 hbase-site.xml
cat > /opt/modules/hbase-1.3.1/conf/hbase-site.xml << 'EOF'
<configuration>
  <!-- 以下配置的目录均不需要事先创建 -->
  <!-- HBase 使用HDFS 保存数据,注意端口号和地址 -->
  <property>
    <name>hbase.rootdir</name>
    <!-- 如果Hadoop 没有监听hadoop112 会报ConnectionRefused -->    
    <value>hdfs://hadoop112:9000/HBase</value>
  </property>

  <!-- 是否集群模式 -->
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    <description>
    If false, startup will run all HBase and ZooKeeper daemons together in the one JVM.
    </description>
  </property>

  <!-- Master 的通信端口 -->
  <property>
    <name>hbase.master.port</name>
    <value>16000</value>
  </property>

  <!-- HBase Web UI 端口,默认16010 -->
  <property>
    <name>hbase.master.info.port</name>
    <value>16010</value>
  </property>

  <!-- Zookeeper 地址列表,逗号分隔 -->
  <property>
    <name>hbase.zookeeper.quorum</name>
    <!--
    默认只有localhost,而ZooKeeper 至少要2 台机器才能组成集群,
    所以这时HBase 会启动自带的Mini_ZooKeeper。另外hbase-env.sh 中
    HBASE_MANAGES_ZK 需设为true,否则HBase 不能管理自带的zk 导致启动失败。
    如果zk 是集群则将节点列在下面的value 中且HBASE_MANAGES_ZK 为false。
    -->
    <value>hadoop112,hadoop113,hadoop114</value>
  </property>

  <!-- Zookeeper 集群保存数据的目录 -->
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/modules/zookeeper-3.4.10/zkData</value>
  </property>
</configuration>
EOF

## 1.3 regionservers
### 告诉bin/start-hbase.sh 及bin/stop-hbase.sh 脚本Region 的节点有哪几个
cat > /opt/modules/hbase-1.3.1/conf/regionservers << 'EOF'
hadoop112
hadoop113
hadoop114
EOF

## 1.4 软连接Hadoop 配置文件
ln -s /opt/modules/hadoop-2.7.2/etc/hadoop/core-site.xml /opt/modules/hbase-1.3.1/conf/
ln -s /opt/modules/hadoop-2.7.2/etc/hadoop/hdfs-site.xml /opt/modules/hbase-1.3.1/conf/


# 2. 分发
xsync.sh /opt/modules/hbase-1.3.1/


# 3. 启动
## 3.1 启动HDFS,在NameNode 上执行,这里是hadoop112
cd /opt/modules/hadoop-2.7.2 && sbin/start-dfs.sh
### 第一次启动HBase 前,删除已存在的目录
cd /opt/modules/hadoop-2.7.2 && bin/hdfs dfs -rm -r /HBase

## 3.2 启动Zookeeper
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh start
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh status  # 查看zk 状态
### 出现leader 和follower 就表示Zookeeper 启动成功了

## 3.3 启动HBase
### 3.3.1 集体启动
cd /opt/modules/hbase-1.3.1 && bin/start-hbase.sh

### 3.3.2 单个启动
cd /opt/modules/hbase-1.3.1 && bin/hbase-daemon.sh start master
cd /opt/modules/hbase-1.3.1 && bin/hbase-daemon.sh start regionserver
#### 高可用,启动多少个Master 都可以,先启动的作为Active,后启动的Standby,与Hadoop3 类似


# 4. 测试
### 访问,http://hadoop112:16010,假设在hadoop112 上部署的
### 开启hbase shell,创建表stu,插入数据并查询,最后删除表
cd /opt/modules/hbase-1.3.1 && bin/hbase shell
create 'stu', 'info'
list
put 'stu', '1001', 'info:name', 'student1'
put 'stu', '1001', 'info:age', '18'
put 'stu', '1002', 'info:name', 'student1'
put 'stu', '1002', 'info:age', '19'
scan 'stu'
disable 'stu'
drop 'stu'
exit


# 5. 停止
## 5.1 停止HBase
cd /opt/modules/hbase-1.3.1 && bin/stop-hbase.sh

## 5.2 停止Zookeeper
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh stop

## 5.3 停止HDFS
cd /opt/modules/hadoop-2.7.2 && sbin/stop-dfs.sh

高可用

基于[HBase 分布式](# 分布式),分别在hadoop112hadoop113启动Master,测试HBase是否会自动故障转移。

# 1. 启动集群
## 1.1 启动HDFS,在NameNode 上执行,这里是hadoop112
cd /opt/modules/hadoop-2.7.2 && sbin/start-dfs.sh

## 1.2 启动Zookeeper
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh start
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh status  # 查看zk 状态
### 出现leader 和follower 就表示Zookeeper 启动成功了

## 1.3 启动HBase
### 1.3.1 集体启动,在hadoop112 上执行
cd /opt/modules/hbase-1.3.1 && bin/start-hbase.sh

### 1.3.2 单个启动master,在hadoop113 上执行
cd /opt/modules/hbase-1.3.1 && bin/hbase-daemon.sh start master


# 2. 测试高可用
## 2.1 浏览器分别访问
### http://hadoop112:16010  http://hadoop113:16010
### 在hadoop113 上会显示Current Active Master: hadoop112,因为hadoop112 先启的master

## 2.2 查看Zookeeper 中HBase 的注册信息
### 连接任一个zk 集群节点获取的信息都是一样的,这里在hadoop113 上执行
cd /opt/modules/zookeeper-3.4.10 && bin/zkCli.sh
### 进入ZooKeeper 客户端后执行以下命令,可使用tab 键
ls /  # 查看zk 根目录
ls /hbase  # 查看hbase 在zookeeper 里的内容
get /hbase/master  # 获取当前HBase 的Master 信息
ls /hbase/backup-masters  # 查看当前有哪些备用的Master 节点
quit


## 3. 模拟故障
### 3.1 关闭hadoop112 上HMaster
kill -9 $(jps | grep -i hmaster | cut -d' ' -f1)
### 3.2 浏览器分别访问
### http://hadoop112:16010 已无法访问
### http://hadoop113:16010 已变成Master
### 以上hadoop113 成功完成故障切换,HA 成功!
### HBase 支持多个Master 备份,真正的高可用,Hadoop3 也有类似的实现。


# 4. 停止集群
## 4.1 停止HBase 集群,在hadoop112 上执行
cd /opt/modules/hbase-1.3.1 && bin/stop-hbase.sh

## 4.2 停止Master 单体,在备份的Master 上执行,这里是hadoop113
cd /opt/modules/hbase-1.3.1 && bin/hbase-daemon.sh stop master
### 如果stop-hbase.sh 没将所有节点上的HBase 相关进程停止,可以用它来补刀

## 4.3 停止Zookeeper
cd /opt/modules/zookeeper-3.4.10 && ccmd.sh ./bin/zkServer.sh stop

## 4.4 停止HDFS
cd /opt/modules/hadoop-2.7.2 && sbin/stop-dfs.sh

HBase 使用

HBase作为NoSQL的数据库,它的记录方式更像一个个的JSon对象,所以它的可以无限扩展。

# 4. 测试
### 访问,http://hadoop112:16010,假设在hadoop112 上部署的
### 开启hbase shell,创建表stu,插入数据并查询,最后删除表
cd /opt/modules/hbase-1.3.1 && bin/hbase shell
create 'stu', 'info'
list
put 'stu', '1001', 'info:name', 'student1'
put 'stu', '1001', 'info:age', '18'
put 'stu', '1002', 'info:name', 'student1'
put 'stu', '1002', 'info:age', '19'
scan 'stu'
disable 'stu'
drop 'stu'
exit

HBase API

参考文章

HBase Reference Guide
HBase run modes: Standalone and Distributed

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在Windows上安装HBase,你可以按照以下步骤进行操作: 1. 首先,你需要下载HBase安装包。你可以从HBase官方网站上下载最新版本的HBase安装包\[2\]。确保下载的版本与你的Hadoop版本兼容。 2. 下载完成后,解压缩HBase安装包到你想要安装的目录,比如D:\hbase。 3. 打开HBase安装目录下的conf文件夹,找到hbase-env.cmd文件。在该文件中配置HBase的环境变量,将环境变量指向你安装HBase conf目录,比如D:\hbase\conf\[1\]。 4. 接下来,你需要配置HBase的相关参数。打开HBase安装目录下的conf文件夹,找到hbase-site.xml文件。你可以根据你的需求修改该文件中的配置参数,比如Zookeeper的地址等。 5. 完成配置后,你可以启动HBase。在HBase安装目录下的bin文件夹中,找到hbase.cmd文件,双击运行该文件。 6. 等待一段时间后,你可以通过访问HBase的Web界面来验证安装是否成功。在浏览器中输入http://localhost:16010,如果能够正常访问HBase的Web界面,则说明安装成功。 总结起来,安装HBase的步骤包括下载安装包、解压缩、配置环境变量和参数、启动HBase,并验证安装是否成功。希望这些步骤对你有帮助。 #### 引用[.reference_title] - *1* [HBase Windows 安装](https://blog.csdn.net/weixin_51921447/article/details/128222459)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [windows安装hbase步骤](https://blog.csdn.net/superhanliu/article/details/82876451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Windows部署HBase](https://blog.csdn.net/wm6752062/article/details/80381704)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值