在Ubuntu 20.04上安装Apache Hadoop/HBase

时间:2020-02-23 14:39:13  来源:igfitidea点击:

本教程将尝试解释在Ubuntu 20.04(Focal FOSTA)Linux服务器上安装Hadoop和HBase的步骤?
HBase是一种用Java编写的开源分布式非关系数据库,并在Hadoop文件系统(HDFS)之上运行。
HBase允许我们在商品硬件顶部运行托管非常大表的大型群集,以及数十亿行以及数百万列。

此安装教程不适用于高可用性的生产设置,但适合实验室设置以启用开发。
我们的HBase安装将在单个节点Hadoop集群上完成。
服务器是具有以下规范的Ubuntu 20.04虚拟机:16GB Ram8Vcpu.20GB Boot Disk100GB用于数据存储的原始磁盘

如果资源与此实验室设置不匹配,则可以使用所拥有的内容,并查看服务是否能够启动。

对于CentOS 7,请参阅CentOS 7上安装Apache Hadoop/HBase

在Ubuntu 20.04上安装Hadoop

第一部分将介绍Ubuntu 20.04 LTS服务器上的单个节点Hadoop集群的安装。
Ubuntu 20.04服务器的安装超出了本教程的范围。
请咨询虚拟化环境文档。

第1步:更新系统

更新并可选择升级Ubuntu系统上安装的所有包:

sudo apt update
sudo apt -y upgrade
sudo reboot

第2步:在Ubuntu 20.04上安装Java

如果Ubuntu 20.04系统上缺少,请安装Java。

sudo apt update
sudo apt install default-jdk default-jre

在Ubuntu 20.04上成功安装Java后,请使用Java命令行确认版本。

$java -version
openjdk version "11.0.7" 2017-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)

JAVA_HOME多变的。

cat <<EOF | sudo tee /etc/profile.d/hadoop_java.sh
export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export PATH=$PATH:$JAVA_HOME/bin
EOF

更新$path和设置。

source /etc/profile.d/hadoop_java.sh

然后测试:

$echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-amd64

参考:

如何在ubuntu/debian上设置默认的java版本

第3步:为Hadoop创建用户帐户

让我们为Hadoop创建一个单独的用户,因此我们在Hadoop文件系统和UNIX文件系统之间具有隔离。

sudo adduser hadoop
sudo usermod -aG sudo hadoop
sudo usermod -aG sudo hadoop

添加用户后,为用户生成SS密钥对。

$sudo su - hadoop
$ssh-keygen -t rsa
 Generating public/private rsa key pair.
 Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): 
 Created directory '/home/hadoop/.ssh'.
 Enter passphrase (empty for no passphrase): 
 Enter same passphrase again: 
 Your identification has been saved in /home/hadoop/.ssh/id_rsa.
 Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
 The key fingerprint is:
 SHA256:mA1b0nzdKcwv/LPktvlA5R9LyNe9UWt+z1z0AjzySt4 Hyman@theitroad
 The key's randomart image is:
 +---[RSA 2048]----+
 |                 |
 |       o   + . . |
 |      o + . = o o|
 |       O . o.o.o=|
 |      + S . *ooB=|
 |           o *=.B|
 |          . . *+=|
 |         o o o.O+|
 |          o E.=o=|
 +----[SHA256]-----+

将此用户的键添加到授权的SSH密钥列表。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

验证是否可以使用添加的密钥ssh。

$ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:42Mx+I3isUOWTzFsuA0ikhNN+cJhxUYzttlZ879y+QI.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-28-generic x86_64)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
$exit

第4步:下载并安装Hadoop

在下载在此处指定的版本之前,请检查最新版本的Hadoop。

就像这种写作一样,这是版本 3.2.1

将最近的版本保存到变量。

RELEASE="3.2.1"

然后将Hadoop存档下载到本地系统。

wget https://www-eu.apache.org/dist/hadoop/common/hadoop-$RELEASE/hadoop-$RELEASE.tar.gz

提取文件。

tar -xzvf hadoop-$RELEASE.tar.gz

将结果目录移动到 /usr/local/hadoop

sudo mv hadoop-$RELEASE//usr/local/hadoop
sudo mkdir /usr/local/hadoop/logs
sudo chown -R hadoop:hadoop /usr/local/hadoop

HADOOP_HOME并使用Hadoop二进制文件添加目录 $PATH.

cat <<EOF | sudo tee /etc/profile.d/hadoop_java.sh
export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
EOF

源文件。

source /etc/profile.d/hadoop_java.sh

确认Hadoop版本。

$hadoop version
Hadoop 3.2.1
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842
Compiled by rohithsharmaks on 2019-09-10T15:56Z
Compiled with protoc 2.5.0
From source with checksum 776eaf9eee9c0ffc370bcbc1888737
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.2.1.jar

第5步:配置Hadoop

所有Hadoop配置都位于 /usr/local/hadoop/etc/hadoop/目录。

需要修改许多配置文件以在Ubuntu 20.04上完成Hadoop安装。

首先编辑 JAVA_HOME在shell脚本hadoop-env.sh:

$sudo vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
# Set JAVA_HOME - Line 54
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/

然后配置:

1. Core-site.xml

Core-stail.xml文件包含启动时使用的hadoop群集信息。
这些属性包括:用于Hadoop Instancethe内存的端口号,用于文件系统的存储器限制读/写缓冲区的大小。

打开 core-site.xml

sudo vim /usr/local/hadoop/etc/hadoop/core-site.xml

在<configuration>和</configuration>标记之间添加以下属性。

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value>
      <description>The default file system URI</description>
   </property>
</configuration>

请参阅下面的屏幕截图。

2. HDFS-site.xml

需要为群集中使用的每个主机配置此文件。
此文件保存信息(如:本地文件系统上的NameNode和DataNode路径)。
复制数据的值

在此设置中,我想在辅助磁盘中存储Hadoop基础架构 - /dev/sdb

$lsblk
 NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
 sda      8:0    0 76.3G  0 disk 
 └─sda1   8:1    0 76.3G  0 part /
 sdb      8:16   0   100G  0 disk 
 sr0     11:0    1 1024M  0 rom

我将分区并将此磁盘挂载到 /hadoop目录。

sudo parted -s -- /dev/sdb mklabel gpt
sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
sudo parted -s -- /dev/sdb align-check optimal 1
sudo mkfs.xfs /dev/sdb1
sudo mkdir /hadoop
echo "/dev/sdb1 /hadoop xfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mount -a

确认:

$df -hT | grep /dev/sdb1
/dev/sdb1      xfs        50G   84M   100G   1% /hadoop

创建目录 namenodedatanode

sudo mkdir -p /hadoop/hdfs/{namenode,datanode}

将所有权设置为Hadoop用户和组。

sudo chown -R hadoop:hadoop /hadoop

现在打开文件:

sudo vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml

然后在<Configuration>和</Configuration>标记之间添加以下属性。

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

请参阅下面的屏幕截图。

3. mapred-site.xml

这是我们将MapReduce框架设置使用的地方。

sudo vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

如下设置。

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

4. yarn-site.xml

此文件中的设置将覆盖Hadoop纱的配置。
它定义了资源管理和作业调度逻辑。

sudo vim /usr/local/hadoop/etc/hadoop/yarn-site.xml

添加:

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
</configuration>

这是我配置的屏幕截图。

第6步:验证Hadoop配置

初始化Hadoop Infrastructure Store。

sudo su -  hadoop
hdfs namenode -format

请参阅以下

测试HDFS配置。

$start-dfs.sh
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [hbase]
hbase: Warning: Permanently added 'hbase' (ECDSA) to the list of known hosts.

最后验证纱线配置:

$start-yarn.sh
Starting resourcemanager
Starting nodemanagers

Hadoop 3.x Demult Web UI端口:namenode - 默认HTTP端口为9870.ResourceManager - 默认HTTP端口为8088.Mapreduce作业服务器 - 默认HTTP端口为19888.

我们可以使用以下方式查看Hadoop使用的端口:

$ss -tunelp

示例输出如下所示。

Access Hadoop网页仪表板 http://ServerIP:9870

检查Hadoop集群概述 http://ServerIP:8088

测试以查看我们是否可以创建目录。

$hadoop fs -mkdir /test
$hadoop fs -ls /
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2017-05-29 15:41 /test

停止Hadoop服务

使用命令:

$stop-dfs.sh
$stop-yarn.sh

在Ubuntu 20.04上安装HBase

我们可以选择在独立模式下安装HBase或者伪分布式模式。
安装过程类似于我们的Hadoop安装。

第1步:下载并安装HBase

在下载之前检查最新版本或者稳定版本版本。
对于生产使用,我建议我们使用稳定的发布。

VER="2.2.4"
wget http://apache.mirror.gtcomm.net/hbase/stable/hbase-$VER-bin.tar.gz

提取下载HBase档案。

tar xvf hbase-$VER-bin.tar.gz
sudo mv hbase-$VER//usr/local/HBase/

更新$Path值。

cat <<EOF | sudo tee /etc/profile.d/hadoop_java.sh
export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HBASE_HOME=/usr/local/HBase
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin
EOF

更新shell环境值。

$source /etc/profile.d/hadoop_java.sh
$echo $HBASE_HOME
/usr/local/HBase

编辑 JAVA_HOME在shell脚本hbase-env.sh:

$sudo vim /usr/local/HBase/conf/hbase-env.sh
# Set JAVA_HOME - Line 27
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/

第2步:配置HBase

我们将尽量为Hadoop做配置。
HBase的所有配置文件都位于 /usr/local/HBase/conf/目录。

hbase-site.xml.

将数据目录设置为此文件的适当位置。

选项1:在独立模式下安装HBase(不推荐)

在独立模式下,所有守护进程(HMASTER,HREGIONSERVER和ZOOKEEPER)在一个JVM进程/实例中运行

创建HBase根目录。

sudo mkdir -p /hadoop/HBase/HFiles
sudo mkdir -p /hadoop/zookeeper
sudo chown -R hadoop:hadoop /hadoop/

打开文件以进行编辑。

sudo vim /usr/local/HBase/conf/hbase-site.xml

现在在<configuration>和</configuration>标记之间添加以下配置,如下所示。

<configuration>
   <property>
      <name>hbase.rootdir</name>
      <value>file:/hadoop/HBase/HFiles</value>
   </property>
	
   <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/hadoop/zookeeper</value>
   </property>
</configuration>

默认情况下,除非我们配置 hbase.rootdir属性,数据仍然存储在/tmp /。

现在在HBase bin目录中使用start-hbase.sh脚本启动hbase。

$sudo su - hadoop
$start-hbase.sh 
running master, logging to /usr/local/HBase/logs/hbase-hadoop-master-hbase.out

选项2:在伪分布式模式下安装HBase(推荐)

我们的价值 hbase.rootdir设置前面将以独立模式开始。
伪分布式模式意味着HBase仍然在单个主机上完全运行,但每个HBase守护程序(HMASTER,HREGIONSERVER和ZOOKEEPER)运行为单独的进程。

要在伪分布式模式下安装HBase,请将其值设置为:

<configuration>
   <property>
      <name>hbase.rootdir</name>
      <value>hdfs://localhost:8030/hbase</value>
   </property>
	
   <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/hadoop/zookeeper</value>
   </property>
   
   <property>
     <name>hbase.cluster.distributed</name>
     <value>true</value>
   </property>
</configuration>

在此设置中,数据将数据存储在HDFS中。

确保创建zookeeper目录。

sudo mkdir -p /hadoop/zookeeper
sudo chown -R hadoop:hadoop /hadoop/

现在在HBase bin目录中使用start-hbase.sh脚本启动hbase。

$sudo su - hadoop
$start-hbase.sh 
localhost: running zookeeper, logging to /usr/local/HBase/bin/../logs/hbase-hadoop-zookeeper-hbase.out
running master, logging to /usr/local/HBase/logs/hbase-hadoop-master-hbase.out
: running regionserver, logging to /usr/local/HBase/logs/hbase-hadoop-regionserver-hbase.out

检查HDFS中的HBASE目录:

$hadoop fs -ls /hbase
Found 9 items
drwxr-xr-x   - hadoop supergroup          0 2019-04-07 09:19 /hbase/.tmp
drwxr-xr-x   - hadoop supergroup          0 2019-04-07 09:19 /hbase/MasterProcWALs
drwxr-xr-x   - hadoop supergroup          0 2019-04-07 09:19 /hbase/WALs
drwxr-xr-x   - hadoop supergroup          0 2019-04-07 09:17 /hbase/corrupt
drwxr-xr-x   - hadoop supergroup          0 2019-04-07 09:16 /hbase/data
drwxr-xr-x   - hadoop supergroup          0 2019-04-07 09:16 /hbase/hbase
-rw-r--r--   1 hadoop supergroup         42 2019-04-07 09:16 /hbase/hbase.id
-rw-r--r--   1 hadoop supergroup          7 2019-04-07 09:16 /hbase/hbase.version
drwxr-xr-x   - hadoop supergroup          0 2019-04-07 09:17 /hbase/oldWALs

第3步:管理HMASTER&HREGIONSERVER

HMaster服务器控制HBase群集。
我们最多可以启动9个备份HMASTER服务器,该服务器提供10个总计,计算主要。

HRegionserver按HMASTER指示管理其储藏文件中的数据。
通常,一个hregionserver在群集中的每个节点运行。
在同一系统上运行多个HRegionservers可以用于在伪分布模式下测试。

使用脚本可以启动和停止主服务器和区域服务器 local-master-backup.shlocal-regionservers.sh分别。

$local-master-backup.sh start 2 # Start backup HMaster
$local-regionservers.sh start 3 # Start multiple RegionServers

每个HMaster都使用两个端口(默认为16000和16010)。
端口偏移量被添加到这些端口,因此使用2的偏移量,备份HMASTER将使用端口16002和16012

以下命令使用端口16002/16012,16003/16013和16005/16015开始3个备份服务器。

$local-master-backup.sh start 2 3 5

每个Regionserver需要两个端口,默认端口为16020和16030

以下命令启动四个添加的区域服务器,在16022/16032开始的顺序端口上运行(Base Ports 16020/16030 Plus 2)。

$local-regionservers.sh start 2 3 4 5

停止,更换 start参数 stop对于每个命令,后跟服务器偏移停止。
例子。

$local-regionservers.sh stop 5

启动HBase Shell.

Hadoop和Hbase应该在使用HBase shell之前运行。
其中启动服务的正确顺序。

$start-all.sh
$start-hbase.sh

然后使用hbase shell。

Hyman@theitroad:~$hbase shell
2019-04-07 10:44:43,821 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/HBase/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 1.4.9, rd625b212e46d01cb17db9ac2e9e927fdb201afa1, Wed Dec  5 11:54:10 PST 2016
hbase(main):001:0>

停止HBase。

stop-hbase.sh

我们已在Ubuntu 20.04上成功安装Hadoop和HBase。