zl程序教程

您现在的位置是:首页 >  后端

当前栏目

ubuntu16.04 server hbase1.2.6离线安装

server安装 离线 ubuntu16.04
2023-09-11 14:17:50 时间

今天在ubuntu服务器上尝试安装hbase,参考了网上的教程,遇到了各种坑,所以写个博文记录以下,避免以后采坑。

首先给出参考的几篇文章链接:

Ubuntu16.04 下 hadoop的安装与配置(伪分布式环境)

Linux 下ZooKeeper安装

Hadoop2.7.1 安装提示SHUTDOWN_MSG: Shutting down NameNode at java.net.UnknownHostException

Hadoop之Unable to load native-hadoop library问题解决

用Python3.6操作HBase之HBase-Thrift

使用python中的pyhdfs连接HDFS进行操作

 

在hbase的官网下载1.2.6版本,https://archive.apache.org/dist/hbase/1.2.6/

在1.2.6对应的文档中,我们发现需要安装jdk、zookeeper以及hadoop环境,http://hbase.apache.org/1.2/book.html

hbase1.2.6可使用的jdk是1.7和1.8,由于1.7太老了,这里以安装下载jdk1.8为例

hbase1.2.6可使用的hadoop版本是2.7.1+,这里以安装下载2.7.6为例

创建hadoop用户

sudo useradd -m hadoop -s /bin/bash  #创建hadoop用户,并使用/bin/bash作为shell
sudo passwd hadoop                   #为hadoop用户设置密码,之后需要连续输入两次密码
sudo adduser hadoop sudo             #为hadoop用户增加管理员权限
su - hadoop                          #切换当前用户为用户hadoop,输入刚设置的密码

接着安装ssh,设置ssh无密码登录:

sudo apt-get install openssh-server   #安装SSH server
ssh localhost                         #登陆SSH,第一次登陆输入yes
exit                                  #退出登录的ssh localhost
cd ~/.ssh/                            #如果没法进入该目录,执行一次ssh localhost
ssh-keygen -t rsa 

输入完  $ ssh-keygen -t rsa 语句以后,需要连续敲击三次回车。其中,第一次回车是让KEY存于默认位置,以方便后续的命令输入。第二次和第三次是确定passphrase,相关性不大。敲完回车后会出现一个图形秘钥。接着输入以下指令:

cat ./id_rsa.pub >> ./authorized_keys #加入授权
ssh localhost                         #此时已不需密码即可登录localhost,并可见下图。如果失败则可以搜索SSH免密码登录来寻求答案

登录成功后通过exit指令退出localhost,回到hadoop

 

安装jdk1.8

官网下载jdk1.8,https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载名为 jdk-8u221-linux-x64.tar.gz

下载后将文件上传至ubuntu服务器,将jdk1.8文件进行解压:

sudo tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/lib

接着打开profile修改环境变量:

sudo vim /etc/profile

在文件的末尾追加以下信息:

#set oracle jdk environment
export JAVA_HOME=/usr/lib/jdk1.8.0_221  # 目录要换成自己解压的jdk目录
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH 

使环境变量生效:

source /etc/profile

设置系统默认jdk版本(记得将后面的jdk目录改成自己的jdk解压目录):

sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk1.8.0_221/bin/java 300  
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jdk1.8.0_221/bin/javac 300  
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jdk1.8.0_221/bin/jar 300   
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jdk1.8.0_221/bin/javah 300   
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jdk1.8.0_221/bin/javap 300   

接着执行:

sudo update-alternatives --config java

如果是第一次安装jdk会有如下提示:

There is only one alternative in link group java (providing /usr/bin/java):
    /usr/lib/jdk1.8.0_221/bin/java

查看jdk版本:

java -version

如果终端打印出 java version"1.8.0_221" 信息,说明安装成功。

 

安装zookeeper

下载zookeeper的链接:http://mirror.bit.edu.cn/apache/zookeeper/

本文下载的是版本是3.4.14,下载后上传到服务器上:

sudo tar -zxvf  zookeeper-3.4.14.tar.gz -C /usr/local  # 解压文件
cd /usr/local  # 进入解压目录
sudo mv zookeeper-3.4.14/ zookeeper  # 重命名为zookeeper
sudo chown -R hadoop ./zookeeper  # 更改权限,hadoop是我们创建的主机名

切换到zookeeper的conf文件下,备份zoo_sample.cfg,并打开编辑复制的zoo.cfg文件

cp zoo_sample.cfg zoo.cfg	//copy一份到当前目录下,并命名为zoo.cfg
vim zoo.cfg

编辑下面两项: 

dataDir=/etc/zookeeper
dataLogDir=/etc/zookeeper/log

然后创建/etc/zookeeper以及/etc/zookeeper/log文件夹,并修改权限:

cd /etc/   
sudo mkdir zookeeper  # 创建文件夹
sudo mldir zookeeper/log
sudo chown -R hadoop zookeeper/  # 修改文件所有者
sudo chmod 777 zookeeper/   # 修改读写权限

接着添加环境变量:

sudo vim /etc/profile

在文件末尾加入:

export ZOOKEEPER=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER/bin

刷新环境变量:

source /etc/profile

启动zookeeper:

zkServer.sh start   # 启动
zkServer.sh status  # 查看运行状态

启动客户端:

zkCli.sh   # 启动客户端
quit  # 退出客户端

 

 

安装hadoop

下载地址:http://mirrors.hust.edu.cn/apache/hadoop/common/

本文下载的hadoop版本为2.7.6,下载完后将文件上传至服务器。

通过以下指令进行解压:

sudo tar -zxvf  hadoop-2.7.6.tar.gz -C /usr/local  # 解压文件
cd /usr/local  # 进入解压目录
sudo mv hadoop-2.7.6 hadoop  # 重命名为hadoop
sudo chown -R hadoop ./hadoop  # 更改权限,hadoop是我们创建的主机名

打开profile添加环境变量:

sudo vim etc/profile

在文件的末尾加上以下内容,HADOOP_HOME是你自己解压的hasoop目录位置:

#set hadoop environment
export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

更新环境变量: 

source /etc/profile  # 更新环境变量
hadoop version  # 查看hadoop版本信息

接下来进行伪分布式配置

首先进入/usr/local/hadoop/etc/hadoop/目录,打开hadoop-env.sh文件:

cd /usr/local/hadoop/etc/hadoop/
sudo vim hadoop-env.sh

 修改JAVA_HOME:

export JAVA_HOME=/usr/lib/jdk1.8.0_221

接下来需要修改两个配置文件 core-site.xml 和 hdfs-site.xml:

用vim打开core-site.xml文件,添加如下信息:

<configuration>
        <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/usr/local/hadoop/tmp</value>
             <description>Abase for other temporary directories.</description>
        </property>
        <property>
             <name>fs.defaultFS</name>
             <value>hdfs://localhost:9000</value>
        </property>
</configuration>

接着打开hdfs-site.xml,添加如下信息:

<configuration>
        <property>
             <name>dfs.replication</name>
             <value>1</value>
        </property>
        <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
             <name>dfs.datanode.data.dir</name>
             <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(可参考官方教程),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。

接下来检查hostname是否存在映射(若不检查,可能在hadoop格式化时报错:SHUTDOWN_MSG: Shutting down NameNode at java.net.UnknownHostException: xxx: xxx: Name or service not known) ,通过以下指令查看本机hostname:

hostname

接下来打开 /etc/hosts 文件看有没有映射信息,我的服务器hostname是tensorflowob则对应以下信息:

127.0.0.1 localhost tensoflowob  # 查看该行是否存在,若不存在添加该映射信息

 接着重启网络:

/etc/init.d/networking restart

最后测试hadoop:

cd /usr/local/hadoop  # 打开hadoop目录
./bin/hdfs namenode -format   # 格式化名称节点
./sbin/start-dfs.sh  # 启动hadoop
jps  # 查看启动结果

正常启动后通过jps指令,应该会显示以下四个信息:

4821 Jps
4459 DataNode
4348 NameNode
4622 SecondaryNameNode

关闭hadoop服务:

./sbin/stop-dfs.sh

如果在启动过程中出现“The authenticity of host ‘0.0.0.0 (0.0.0.0)’ can’t be established.”类似错误,登录root管理员,输入指令ufw disable,关闭防火墙,重启下系统即可。

 

安装hbase

我们安装好jdk和hadoop环境后,开始安装hbase,hbase1.2.6的下载链接:https://archive.apache.org/dist/hbase/1.2.6/

下载完成后上传至服务器,并进行解压:

sudo tar -zxvf hbase-1.2.6-bin.tar.gz -C /usr/local

cd /usr/local 
sudo mv hbase-1.2.6/ hbase  # 修改文件名

接着配置环境变量:

sudo vim /etc/profile

在文件末尾加上:

# set hbase environment
export HBASE_HOME=/usr/local/hbase
export PATH=$PATH:$HBASE_HOME/bin

更新环境变量:

source /etc/profile  # 更新环境变量
hbase version # 查看hbase版本信息

修改hbase的配置文件(这里需要修改4个文件)

进入到hbase的安装目录下的conf配置文件夹

1)首先修改hbase-env.sh文件:

cd /usr/local/hbase/conf
sudo vim hbase-env.sh

修改其中的:

export JAVA_HOME=/usr/lib/jdk1.8.0_221
export HBASE_MANAGES_ZK=false  # 使用本机自带的zookeeper

2)接着修改hbase-site.xml文件:

<configuration>
        <property>
                <!-- 指定hbase在HDFS上的存储路径 -->
                <name>hbase.rootdir</name>
                <value>hdfs://localhost:9000/myhbase</value>
        </property>
        <property>
                <!-- 指定hbase是分布式的 -->
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
                <!-- 指定zk的地址,多个用','隔开 -->
                <name>hbase.zookeeper.quorum</name>
                <value>tensorflowob</value>
        </property>
</configuration>

3)修改regionservers文件,配置从节点的主机名

sudo vim regionservers

清空里面的信息,将hadoop的节点信息添加进去即可(注意不要有多余的空格和回车)

tensoflowob

4)新建一个文件backup-masters配置hmaster的备份节点:

sudo vim backup-masters 

这里将备份节点备份在hadoop上(可设置多个节点),在backup-masters中写入:

tensorflowob

 

接着,我们将hadoop的配置文件hdfs-site.xml   core-site.xml放到hbase的conf下(当前目录在hbase的conf下):

sudo cp /usr/local/hadoop/etc/hadoop/core-site.xml ./
sudo cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml ./

全部修改完后开始启动hbase,注意:启动hbase之前需要提前启动zookeeper和hadoop

zkServer.sh start   # 启动zookeeper
zkServer.sh status  # 查看运行状态


cd /usr/local/hadoop  # 打开hadoop目录
./bin/hdfs namenode -format   # 格式化名称节点,若之前格式化过请忽略此步骤
./sbin/start-dfs.sh  # 启动hadoop
jps  # 查看启动结果


cd /usr/local/hbase/  # 进入hbase目录
./bin/start-hbase.sh    # 开启hbase
jps  # 查看启动结果


# 如果要进入hbase的shell窗口,通过以下指令
cd /usr/local/hbase/bin  # 进入hbase的bin目录
./hbase shell # 启动hbase shell
quit # 退出shell窗口

在hadoop启动过程后,通过jps指令可以看到启动了:DataNode,NameNode,SecondaryNameNode,Jps,QuorumPeerMain(这个是zookeeper启动的)五个进程。

在hbase启动过程后,通过jps指令查看,除了上面5个进程外还有HMasterHRegionServer两个进程。

启动完后我们通过浏览器访问 10.2.14.137:16010 就能够进入hbase的管理页面了,其中10.2.14.137是服务器的地址,需要改成你自己的服务器地址,端口号16010是默认的,通过浏览器访问 10.2.14.137:50070 就能够进入hadoop的管理页面了,同样将端口号前的地址改成你自己的服务器地址。

 

安装thrift模块

hbase是用java语言写的,所以原生支持java,但如果想通过其他语言调用hbase数据库就需要安装thrift模块,本文需要使用python3去调用hbase的thrift模块,所以要在服务器端安装thrift模块,本文安装的是0.11.0版本。

thrift0.11.0版本下载链接:http://mirrors.hust.edu.cn/apache/thrift/0.11.0/thrift-0.11.0.tar.gz

接着安装所需要的依赖包:

apt-get install automake bison flex g++ git libboost1.55 libevent-dev libssl-dev libtool make pkg-config

解压编译安装:

sudo tar -zxvf thrift-0.11.0.tar.gz /usr/local/  # 解压
cd /usr/local
sudo mv thrift-0.11.0/ thrift  # 更改文件名称
sudo chmod 777 -R thrift  # 赋予读写权限
cd thrift
./configure --with-cpp --with-boost --with-python --without-csharp --with-java --without-erlang --without-perl --with-php --without-php_extension --without-ruby --without-haskell  --without-go
sudo make
sudo make install

安装完成后进入到hbase的bin目录下启动thrift接口:

cd /usr/local/hbase/bin
./hbase-daemon.sh start thrift

开启thrift接口后可通过服务器的9090端口去访问hbase数据库。