Apache HBase 是 Apache Hadoop 项目的子项目,是 Hadoop Database 的简称。HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。
HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,HBase 基于列的而不是基于行的模式。HBase 是构建在 Apache Hadoop 和 Apache Zookeeper 之上。
Apache HBase: https://hbase.apache.org/
Apache Hadoop 是 Apache 基金会旗下的一个开源的分布式计算平台,是基于 Java 语言开发的,有很好的跨平台特性,并且可以部署在廉价的计算机集群中。用户无需了解分布式底层细节,就可以开发分布式程序,充分利用集群的威力进行高速运算和存储。
Apache Hadoop: http://hadoop.apache.org/
安装配置 Apache HBase 之前,需要先安装配置 Apache Hadoop 和 Apache Zookeeper,本文先介绍 Apache Hadoop 的安装配置过程。Java 环境搭建可以参考 “Java基础知识(1)- Java 简介、开发环境配置和基础语法”。
1. 系统环境
操作系统:Ubuntu 20.04
Java 版本:openjdk 11.0.18
Hadoop 版本:3.2.2
2. 安装配置 Hadoop
1) 下载 Hadoop
访问 https://archive.apache.org/dist/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz 页面,下载 hadoop-3.2.2.tar.gz 保存到 ~/apps 目录,apps 目录是当前 Linux 用户 (假设为 xxx) 下的目录,即 /home/xxx/apps。
$ cd ~/apps
$ tar -zvxf hadoop-3.2.2.tar.gz
2) 配置 SSH 本地无密码访问
$ cd ~/.ssh
# 生成 rsa 钥匙,并把公钥添加到 authorized_keys
$ ssh-keygen -t rsa
$ cat ./id_rsa.pub >> ./authorized_keys
$ ssh localhsot # 不需要输入密码
3) 创建 hadoop 用户和组
$ sudo addgroup hadoop # 创建 hadoop 组
$ sudo usermod -a -G hadoop xxx # 将当前用户(xxx)加入到 hadoop 组
$ sudo vim /etc/sudoers # 将 hadoop 组加入到 sudoer
...
hadoop ALL=(ALL:ALL) ALL # 在 root ALL=(ALL:ALL) ALL 后添加这一行
$ sudo chmod -R 755 ~/apps/hadoop-3.2.2
$ sudo chown -R xxx:hadoop ~/apps/hadoop-3.2.2 # 否则 SSH 会拒绝访问
4) 添加 HADOOP_HOME
$ sudo vim /etc/profile
... JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 JRE_HOME=$JAVA_HOME/jre HADOOP_HOME=/home/xxx/apps/hadoop-3.2.2 CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin export JAVA_HOME JRE_HOME HADOOP_HOME CLASS_PATH PATH
$ source /etc/profile
$ echo $HADOOP_HOME
/home/xxx/apps/hadoop-3.2.2
3. 命令行模式运行 Hadoop
# 查看 hadoop 版本
$ hadoop version
Hadoop 3.2.2
...
# 示例:运行 hadoop 命令统计 hadoop-3.2.2 根目录下的 README.txt 文件里的单词
$ cd ~/apps/hadoop-3.2.2
$ mkdir input
$ cp README.txt input
$ hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-3.2.2-sources.jar org.apache.hadoop.examples.WordCount input output
2023-03-21 11:31:49,370 INFO impl.MetricsConfig: Loaded properties from hadoop-metrics2.properties 2023-03-21 11:31:49,436 INFO impl.MetricsSystemImpl: Scheduled Metric snapshot period at 10 second(s). 2023-03-21 11:31:49,436 INFO impl.MetricsSystemImpl: JobTracker metrics system started 2023-03-21 11:31:49,547 INFO input.FileInputFormat: Total input files to process : 1 2023-03-21 11:31:49,566 INFO mapreduce.JobSubmitter: number of splits:1 2023-03-21 11:31:49,716 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local1035722801_0001 2023-03-21 11:31:49,716 INFO mapreduce.JobSubmitter: Executing with tokens: [] 2023-03-21 11:31:49,820 INFO mapreduce.Job: The url to track the job: http://localhost:8080/ 2023-03-21 11:31:49,821 INFO mapreduce.Job: Running job: job_local1035722801_0001 2023-03-21 11:31:49,827 INFO mapred.LocalJobRunner: OutputCommitter set in config null 2023-03-21 11:31:49,831 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 2 ...
注:运行成功,统计结果以本地文件格式保存在 output 目录下,这里没有用到 Hadoop 文件系统(HDFS),所以不需要配置和启动 HDFS。
4. 配置伪分布式 Hadoop
Hadoop 可以在单节点(或一台主机)上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
HDFS (Hadoop Distributed File System),是一个分布式文件系统,用于存储文件,通过目录树来定位文件。HDFS 是适合一次写入,多次读出的场景,不支持文件修改,适用于做离线数据统计和分析的场合。
1) 配置 HDFS
$ cd ~/apps/hadoop-3.2.2
# 配置 Hadoop 系统参数
$ vim ./etc/hadoop/core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/home/xxx/apps/hadoop-3.2.2/tmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
*注:路径里的 ‘xxx’ 是 Linux 用户的 home 目录名,下同
# 配置 Hadoop 文件系统(hdfs)
$ vim ./etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.http.address</name> <value>0.0.0.0:50070</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/xxx/apps/hadoop-3.2.2/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/xxx/apps/hadoop-3.2.2/tmp/dfs/data</value> </property> </configuration>
# 格式化 hdfs
$ hdfs namenode -format
2) 配置 JAVA_HOME
$ cd ~/apps/hadoop-3.2.2
# 在 hadoop-env.sh 文件最后添加 JAVA_HOME
$ vim ./etc/hadoop/hadoop-env.sh
...
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
3) 运行 HDFS
$ cd ~/apps/hadoop-3.2.2
# 启动 dfs
$ ./sbin/start-dfs.sh
Starting namenodes on [localhost] Starting datanodes Starting secondary namenodes [Test-Ubuntu20] Test-Ubuntu20: Warning: Permanently added 'test-ubuntu20' (ECDSA) to the list of known hosts.
# 运行 jps 查看
$ jps
11457 Jps 10946 NameNode 11117 DataNode 11326 SecondaryNameNode
注:NameNode 和 DataNode 都要出现,可以访问 http://localhost:50070 (或 http://ip:50070) 查看节点信息
# 停止 dfs
$ ./sbin/stop-dfs.sh
Stopping namenodes on [localhost] Stopping datanodes Stopping secondary namenodes [Test-Ubuntu20]
4) HDFS 操作
# 查看信息
$ hdfs dfsadmin -report
Configured Capacity: 30994796544 (28.87 GB) Present Capacity: 10013954048 (9.33 GB) DFS Remaining: 10013921280 (9.33 GB) DFS Used: 32768 (32 KB) DFS Used%: 0.00% ...
# 创建目录
$ hdfs dfs -mkdir /test
# 把文件放入本地
$ hdfs dfs -put README.txt /test
# 递归显示目录
$ hdfs dfs -ls -R /
drwxr-xr-x - xxx supergroup 0 2023-03-20 22:11 /test
-rw-r--r-- 1 xxx supergroup 1361 2023-03-20 22:11 /test/README.txt
# 从本地获取文件
$ hdfs dfs -get /test/README.txt
get: `README.txt': File exists
# 删除目录
$ hdfs dfs -rm -r /test
Deleted /test
5) 配置 Yarn (可选项)
Apache Hadoop Yarn 是 Apache Hadoop 的子项目,Hadoop 2.0 开始引入 Yarn 框架。Yarn 担着原本由 MapReduce 承担的资源管理的功能,同时将这部分功能打包,使得这些功能可以被其它数据处理框架(引擎)使用,比如:Spark 框架。
引入 Yarn 框架简化了 MapReduce 的流程,使得 MapReduce 专注于数据处理。使用 Yarn,可以用共同的资源管理,在 Hadoop 上跑很多应用程序。
(1) 配置文件
$ cd ~/apps/hadoop-3.2.2
$ vim ./etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
$ vim ./etc/hadoop/yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
(2) 启动
# 启动 HDFS
$ ./sbin/start-dfs.sh
# 启动 Yarn
$ ./sbin/start-yarn.sh
# 启动 Jobhistory Server (可选项)
$ ./bin/mapred --daemon start historyserver # 在 Hadoop 3.x,命令 ./sbin/mr-jobhistory-daemon.sh start historyserver 已经不推荐使用,仍可以执行
# 运行 jps 查看
66997 Jps 66934 JobHistoryServer 65992 DataNode 65816 NameNode 66203 SecondaryNameNode 66575 NodeManager 66398 ResourceManager
启动 Yarn 后,可以访问 http://localhost:8088/cluster (或 http://ip:8088/cluster) 查看任务的运行情况。
启动 Jobhistory Server 后,可以访问 http://localhost:19888 (或 http://ip:19888) 查看 Job History。
注:Jobhistory Server 不依赖于 Yarn,即 Yarn 不运行时,也可以启动 Jobhistory Server。如果需要调整 Jobhistory Server 的配置参数,可以修改 ./etc/hadoop/mapred-site.xml,比如:
<configuration> ... <!-- Jobhistory Server --> <property> <name>mapreduce.jobhistory.address</name> <value>0.0.0.0:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>0.0.0.0:19888</value> </property> </configuration>
(3) 停止
# 停止 Jobhistory Server
$ ./bin/mapred --daemon stop historyserver # 在 Hadoop 3.x,命令 ./sbin/mr-jobhistory-daemon.sh stop historyserver 已经不推荐使用,仍可以执行
# 停止 Yarn
$ ./sbin/stop-yarn.sh
# 停止 HDFS
$ ./sbin/stop-dfs.sh
注:不启用 Yarn 时,是 “mapred.LocalJobRunner” 在运行任务(管理资源)。启用 Yarn 之后,是 “mapred.YARNRunner” 在运行任务(管理资源)。
5. 配置集群/分布式 Hadoop
部署 1 台主机(主机名:hadoop-master-vm)和 1 台辅机(hadoop-slave-vm),配置主辅机之间 SSH 无密码访问,即把各自的 ~/.ssh/id_rsa.pub 放入对方的 ~/.ssh/authorized_keys 中。
修改两台主机的 /etc/hosts,内容如下:
127.0.0.1 localhost
192.168.0.3 hadoop-master-vm
192.168.0.4 hadoop-slave-vm
...
1) 主机的 Hadoop 配置
(1) 配置 HDFS
$ cd ~/apps/hadoop-3.2.2
# 配置 Hadoop 系统参数
$ vim ./etc/hadoop/core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/home/xxx/apps/hadoop-3.2.2/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop-master-vm:9000</value> </property> </configuration>
# 配置 Hadoop 文件系统(hdfs)
$ vim ./etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.http.address</name> <value>hadoop-master-vm:50070</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/xxx/apps/hadoop-3.2.2/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/xxx/apps/hadoop-3.2.2/tmp/dfs/data</value> </property> </configuration>
# 格式化 hdfs
$ hdfs namenode -format
(2) 配置 JAVA_HOME 和 Workers
$ cd ~/apps/hadoop-3.2.2
# 在 hadoop-env.sh 文件最后添加 JAVA_HOME
$ vim ./etc/hadoop/hadoop-env.sh
...
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
# 在 workers 里添加辅机的 hostname
$ vim ./etc/hadoop/workers
#localhost
hadoop-slave-vm
(3) 配置 yarn (可选项)
$ cd ~/apps/hadoop-3.2.2
$ vim ./etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop-master-vm:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop-master-vm:19888</value> </property> </configuration>
$ vim ./etc/hadoop/yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop-master-vm</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
2) 辅机的 Hadoop 配置
把主机的 hadoop 目录(~/apps/hadoop-3.2.2)完全同步到辅机上,辅机的 JAVA_HOME、HADOOP_HOME 等参考主机的配置。
3) 在主机上运行
$ cd ~/apps/hadoop-3.2.2
# 启动 HDFS
$ ./sbin/start-dfs.sh
# 启动 Yarn
$ ./sbin/start-yarn.sh
# 启动 Jobhistory Server (可选项)
$ ./bin/mapred --daemon start historyserver
# 主机上查看节点
$ jps
6807 NameNode 7752 ResourceManager 7082 SecondaryNameNode 8171 Jps
# 查看 report
$ hdfs dfsadmin -report
Configured Capacity: 490651459584 (456.95 GB) Present Capacity: 410068922368 (381.91 GB) DFS Remaining: 410068877312 (381.91 GB) DFS Used: 45056 (44 KB) DFS Used%: 0.00% ...
4) 在辅机上运行
# 查看节点
$ jps
2368 remoting.jar 6192 DataNode 20802 Jps
# 查看 report
$ hdfs dfsadmin -report
...
5) Web 界面
# Hadoop node
http://hadoop-master-vm:50070/
# Hadoop cluster
http://hadoop-master-vm:8088/cluster
# Job history
http://hadoop-master-vm:19888
- Springboot 数据 Apache Hadoop HBasespringboot数据apache hadoop getjavaproperty apache hadoop hbase springboot apache hbase zookeeper springboot hbase数据rest servernotrunningyetexception hbase running apache hadoop hbase hive hadoop3 sqoop1 hadoop hbase2 hadoop apache org rpcnosuchprotocolexception 集群ambari-hadoop ams-hbase timeline springboot-hbase