Linux第5课:安装Hbase数据库(一)
时间 2019-03-05 下午3:30
主讲 张春志
地点 四楼电教室
一、Hbase数据库简介
HBase,即,Hadoop database,是一个基于hadoop的,分布式的、面向列、可伸缩的开源数据库,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
与Oracle相比,HBase擅长于存储结构简单的海量数据但索引能力有限,而Oracle等传统关系型数据库(RDBMS)能够提供丰富的查询能力,但却疲于应对TB级别的海量数据存储,HBase对传统的RDBMS(关系型数据库管理系统)并不是取代关系,而是一种补充。
由于Hbase是基于Hadoop的,所以在安装Hbase数据库之前,需要先安装Hadoop系统。
二、安装Hadoop系统
Hadoop部署模式有4种:本地模式、伪分布模式、完全分布式模式、HA(高可用)完全分布式模式。
为熟悉Habse数据库,以下,以本地模式为例,在Centos7系统下部署Hadoop。
1,安装Java 1.7.0
由于hadoop是用java编写的,所以要先部署java环境。
yum -y install java-1.7.0-openjdk java-1.7.0-openjdk-devel
安装完成后,检查java版本
java -version
2,下载hadoop 2.7.7
如无wget下载工具,需要先yum install wget
cd /usr/local/
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
将hadoop安装包下载到了/usr/local/目录
解压到当前目录:
tar zxvf hadoop-2.7.7.tar.gz
3,配置环境变量
目前,hadoop的路径为:/usr/local/hadoop-2.7.7/
java的路径为:/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.211-2.6.17.1.el7_6.x86_64/
(注:java-1.7.0-openjdk-1.7.0.211-2.6.17.1.el7_6.x86_64,这个文件夹名经常会变,以实际为主)
以上两个目录,分别cd一下,看能不能进去。
vim /etc/profile
把以下两行加入文本末尾:
export PATH=/usr/local/hadoop-2.7.7/bin:$PATH
export JAVA_HOME=/usr/lib/java-1.7.0-openjdk-1.7.0.211-2.6.17.1.el7_6.x86_64
保存后使其生效:
source /etc/profile
继续设置:
vim /usr/local/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
文末加入:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.211-2.6.17.1.el7_6.x86_64
export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.7/etc/hadoop/
source /usr/local/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
4,文件配置
vim /usr/local/hadoop-2.7.7/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
vim /usr/local/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
格式化文件系统:
hdfs namenode -format
5,设置SSH免密码登陆:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
6、启动HDFS
/usr/local/hadoop-2.7.7/sbin/start-dfs.sh 启动
注:系统重启后,hdfs需要手动启动。
/usr/local/hadoop-2.7.7/sbin/stop-dfs.sh 停止
jps 显示当前所有的java进程
http://localhost:50070,本机已经可以访问,但其他机器无法访问。
关闭防火墙,发现其他机器也可以访问了。
(关闭新节点防火墙,因为Hadoop集群是在内网环境运行,可以关闭防火墙。)
8,修改默认50070端口号:
vim /usr/local/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<name>dfs.http.address</name>
<value>10.0.11.5:8889</value>
</property>
</configuration>
修改后重启hdfs生效。该网址,称为:NameNode web管理
9,hdfs的使用
HDFS,即Hadoop Distributed File System ,Hadoop分布式文件系统。它其实是将一个大文件分成若干块保存在不同服务器的多个节点中。通过联网让用户感觉像是在本地一样查看文件,为了降低文件丢失造成的错误,它会为每个小文件复制多个副本(默认为三个),以此来实现多机器上的多用户分享文件和存储空间。
HDFS特点:
① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。
② 运行在廉价的机器上。
③ 适合大数据的处理。因为小文件也占用一个块,小文件越多(1000个1k文件)块越多,NameNode压力越大。
块大小:Hadoop1版本里默认为64M,Hadoop2版本里默认为128M
HDFS基本结构分NameNode、SecondaryNameNode、DataNode
NameNode(主节点):是Master节点,有点类似Linux里的根目录。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
SecondaryNameNode(次节点):保存着NameNode的部分信息(不是全部信息NameNode宕掉之后恢复数据用),是NameNode的冷备份;合并fsimage和edits然后再发给namenode。(防止edits过大的一种解决方案)
DataNode(数据节点):负责存储client发来的数据块block;执行数据块的读写操作。是NameNode的组成部分。
HDFS命令:
hadoop fs命令可以用于HDFS、Local FS等不同的文件系统。而hdfs dfs命令只用于HDFS文件系统
列出文件目录:
hadoop fs -ls / 注意后面的/
添加文件夹:
hadoop fs -mkdir /abc 注意前面必须加/
上传文件:
hadoop fs -put a.txt /abc 将本地的a.txt文件上传到hdfs目录下的/abc
下载文件:(get是put的逆操作)
hadoop fs -get /abc/a.txt 下载到当前目录
删除文件或非空文件夹:
hadoop fs -rm /demo1/abc.txt 递归删除-rmr可删除有文件的目录
清空回收站:
hadoop fs -expunge
查看文件大小:
hadoop fs -du -h /abc
附1:如何修改默认文件路径
hdfs通过上述操作后,已经建立。但是,文件存在哪里呢?假如,我们有两块硬盘,可不可以存在第二块上呢?解决这个问题,就要修改默认文件路径。
首先,我们来看默认存放路径:
vim /usr/local/hadoop-2.7.7/share/doc/hadoop/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
file://${hadoop.tmp.dir}/dfs/name
file://${hadoop.tmp.dir}/dfs/data
file://${hadoop.tmp.dir}/dfs/namesecondary
这里,{hadoop.tmp.dir}指的是:/tmp/hadoop-root/dfs
再看看文件系统容量和使用情况:
hdfs dfsadmin -report
方法如下:
1,在hadoop-2.7.7目录下新建目录data,把vdb5挂载到/usr/local/hadoop-2.7.7/data目录,操作方法见第2课。
2,接下来,我们修改{hadoop.tmp.dir}所对应的新路径。
vim /usr/local/hadoop-2.7.7/etc/hadoop/core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.7.7/data</value>
<description>A base for other temporary directories.</description>
</property>
3,依次:停止》格式化》启动
/usr/local/hadoop-2.7.7/sbin/stop-dfs.sh 停止
hdfs namenode -format 格式化
(格式化后,会出现dfs文件夹,下有name一个文件夹)
/usr/local/hadoop-2.7.7/sbin/start-dfs.sh 启动
(启动后,在dfs文件夹下,会出现name,data,namesecondary三个文件夹)
hadoop dfsadmin -report 结果如下:
成功!
附2:添加子节点(以1主2从为例)
hadoop装在一台计算机上,称为伪分布式。真正的分布式,必须运行在多台计算机上。下面,为hadoop添加2个子节点。
1,配置环境(子节点相同)
(1)安装与master和其他slave相同的java环境,jdk版本要相同。
yum -y install java-1.7.0-openjdk java-1.7.0-openjdk-devel
(2)修改新节点的ip和主机名对应关系,修改/etc/hosts配置文件,定义ip与hostname的映射。
/etc/hosts文件是Linux系统中一个负责IP地址与域名快速解析的文件
vim /etc/hosts
末尾加入:
10.0.11.5 hadoop1
10.0.11.7 hadoop2
10.0.11.8 hadoop3
(3)关闭新节点防火墙,因为Hadoop集群是在内网环境运行,可以关闭防火墙。
(4)配置所有节点之间,两两免密码登陆。详见:关于SSH远程登陆
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh-copy-id -i /root/.ssh/id_rsa.pub root@hadoop2
关闭SELinux (安全):
vim /etc/sysconfig/selinux
设置:SELINUX=disabled (原:SELINUX=enforcing)
2,修改masters和slaves配置:
列出所有的子节点的列表(IP或别名)
vim /usr/local/hadoop-2.7.7/etc/hadoop/slaves
hadoop2
hadoop3
vim /usr/local/hadoop-2.7.7/etc/hadoop/masters
hadoop1
3,复制hadoop文件夹到子节点
将master的hadoop目录,复制到子节点相应路径:
cd /usr/local
scp -r hadoop-2.7.7 root@hadoop2:/usr/local
4,修改子节点的配置
修改相应配置,使子节点可单独启动。
5,四个xml文件配置
(1)core-site.xml
vim /usr/local/hadoop-2.7.7/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000/</value>
<description>默认的HDFS端口,用于NameNode与DataNode之间到的通讯,IP为NameNode的地址</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-2.7.7/data</value>
<description>存放hadoop文件系统依赖的基本配置</description>
</property>
</configuration>
(2) hdfs-site.xml
vim /usr/local/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop-2.7.7/data/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop-2.7.7/data/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop1:9001</value>
</property>
</configuration>
(3) mapred-site.xml
vim /usr/local/hadoop-2.7.7/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(4)yarn-site.xml
vim /usr/local/hadoop-2.7.7/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
以上四个文件,分别同步到hadoop2和hadoop3
5.集群启动
hdfs namenode -format 格式化
/usr/local/hadoop-2.7.7/sbin/start-all.sh 集群启动,某个节点掉线后,开机后再运行一次即可。
/usr/local/hadoop-2.7.7/sbin/stop-all.sh 集群停止
相关命令:
hadoop dfsadmin -refreshNodes 刷新NameNode
/usr/local/hadoop-2.7.7/sbin/start-balancer.sh 负载均衡
执行集群启动后,启动正常。用JPS查看,结果如下:
hadoop1:
1,NameNode
2,SecondaryNameNode
3,Resource Manager 资源管理
hadoop2和hadoop3:
1, DataNode
2,Node Manager
访问10.0.11.5:50070:
访问10.0.11.5:8088:
成功!期间,由于四个xml文件在不同版本下的表述不同,浪费了不少时间。
涉及单词:
node 节点
core 核心
Distributed 分布式的
expunge 消除