如何在CentOS 7上安装Apache Hadoop/HBase
本教程将讨论Hadoop和HBase的在CentOS 7的HBase的安装是在Apache软件基金会开发的一个开源的分布式非关系型数据库。
它是用Java编写的,并在Hadoop文件系统(HDFS)上运行。
在我们的最后一个教程中,我们涵盖了Ubuntu 18.04上的Hadoop&HBase的安装。
在CentOS中安装Hadoop
以下是用于在CentOS 7上安装单个节点Hadoop集群的步骤。
第1步:更新系统
由于Hadoop&HBase服务端口是动态的,我建议我们在安全专用网络中的服务器上安装它们,并禁用Selinux和Firewalld。
sudo systemctl disable --now firewalld sudo setenforce 0 sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config cat /etc/selinux/config | grep SELINUX= | grep -v '#'
在开始部署Hadoop和HBase之前更新CentOS 7系统。
sudo yum -y install epel-release sudo yum -y install vim wget curl bash-completion sudo yum -y update sudo reboot
第2步:安装Java
如果CentOS 7服务器上丢失,请安装Java。
sudo yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
验证是Java已成功安装。
$java -version java version "1.8.0_201" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
放 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-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64
第3步:为Hadoop创建用户帐户
让我们为Hadoop创建一个单独的用户,因此我们在Hadoop文件系统和UNIX文件系统之间具有隔离。
sudo adduser hadoop passwd hadoop sudo usermod -aG wheel 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 (::1)' can't be established. ECDSA key fingerprint is SHA256:WTqP642Xijk3xtTb/zt32o0Q7PqYlxzwX+H/B72z4P4. ECDSA key fingerprint is MD5:47:dc:17:78:63:f7:bc:12:72:70:4b:e3:2f:8a:c3:8d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts. Last login: Sun Apr 7 12:47:16 2019 [Hyman@theitroad ~]$
第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
。
rm hadoop-$RELEASE.tar.gz sudo mv hadoop-$RELEASE//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://github.com/apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9a Compiled by sunilg on 2019-01-29T01:39Z Compiled with protoc 2.5.0 From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9 This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-3.2.1.jar
第5步:在CentOS 7上配置Hadoop
所有Hadoop配置都位于 /usr/local/hadoop/etc/hadoop/
目录。
需要修改许多配置文件以在CentOS 7上完成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=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
然后配置:
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 50G 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 33M 50G 1% /hadoop
创建目录 namenode
和 datanode
。
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 | grep java
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 2019-04-07 13:04 /test
停止Hadoop服务
使用命令:
$stop-dfs.sh $stop-yarn.sh
在CentOS 7上安装HBase
我们可以选择在独立模式下安装HBase或者伪分布式模式。
安装过程类似于我们的Hadoop安装。
第1步:下载并安装HBase
在下载之前检查最新版本或者稳定版本版本。
对于生产使用,我建议我们使用stabke发布。
VER="1.4.10" 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=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
第2步:配置HBase
我们将尽量为Hadoop做配置。
HBase的所有配置文件都位于 /usr/local/HBase/conf/
目录。
选项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/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.sh
和 local-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 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