Linux第5課:安裝Hbase數(shù)據(jù)庫(一)
時間 2019-03-05?下午3:30
主講?張春志
地點 四樓電教室
一、Hbase數(shù)據(jù)庫簡介
HBase,即,Hadoop database,是一個基于hadoop的,分布式的、面向列、可伸縮的開源數(shù)據(jù)庫,利用HBase技術可在廉價PC Server上搭建起大規(guī)模結構化存儲集群。
與Oracle相比,HBase擅長于存儲結構簡單的海量數(shù)據(jù)但索引能力有限,而Oracle等傳統(tǒng)關系型數(shù)據(jù)庫(RDBMS)能夠提供豐富的查詢能力,但卻疲于應對TB級別的海量數(shù)據(jù)存儲,HBase對傳統(tǒng)的RDBMS(關系型數(shù)據(jù)庫管理系統(tǒng))并不是取代關系,而是一種補充。
由于Hbase是基于Hadoop的,所以在安裝Hbase數(shù)據(jù)庫之前,需要先安裝Hadoop系統(tǒng)。
二、安裝Hadoop系統(tǒng)
Hadoop部署模式有4種:本地模式、偽分布模式、完全分布式模式、HA(高可用)完全分布式模式。
為熟悉Habse數(shù)據(jù)庫,以下,以本地模式為例,在Centos7系統(tǒng)下部署Hadoop。
1,安裝Java 1.7.0
由于hadoop是用java編寫的,所以要先部署java環(huán)境。
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,配置環(huán)境變量
目前,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,這個文件夾名經(jīng)常會變,以實際為主)
以上兩個目錄,分別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
繼續(xù)設置:
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>
格式化文件系統(tǒng):
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? 啟動
注:系統(tǒng)重啟后,hdfs需要手動啟動。
/usr/local/hadoop-2.7.7/sbin/stop-dfs.sh? 停止
jps?顯示當前所有的java進程

http://localhost:50070,本機已經(jīng)可以訪問,但其他機器無法訪問。
關閉防火墻,發(fā)現(xiàn)其他機器也可以訪問了。
(關閉新節(jié)點防火墻,因為Hadoop集群是在內網(wǎng)環(huán)境運行,可以關閉防火墻。)

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生效。該網(wǎng)址,稱為:NameNode web管理
9,hdfs的使用
HDFS,即Hadoop Distributed File System ,Hadoop分布式文件系統(tǒng)。它其實是將一個大文件分成若干塊保存在不同服務器的多個節(jié)點中。通過聯(lián)網(wǎng)讓用戶感覺像是在本地一樣查看文件,為了降低文件丟失造成的錯誤,它會為每個小文件復制多個副本(默認為三個),以此來實現(xiàn)多機器上的多用戶分享文件和存儲空間。
HDFS特點:
① 保存多個副本,且提供容錯機制,副本丟失或宕機自動恢復。默認存3份。
② 運行在廉價的機器上。
③ 適合大數(shù)據(jù)的處理。因為小文件也占用一個塊,小文件越多(1000個1k文件)塊越多,NameNode壓力越大。
塊大?。篐adoop1版本里默認為64M,Hadoop2版本里默認為128M
HDFS基本結構分NameNode、SecondaryNameNode、DataNode
NameNode(主節(jié)點):是Master節(jié)點,有點類似Linux里的根目錄。管理數(shù)據(jù)塊映射;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;
SecondaryNameNode(次節(jié)點):保存著NameNode的部分信息(不是全部信息NameNode宕掉之后恢復數(shù)據(jù)用),是NameNode的冷備份;合并fsimage和edits然后再發(fā)給namenode。(防止edits過大的一種解決方案)
DataNode(數(shù)據(jù)節(jié)點):負責存儲client發(fā)來的數(shù)據(jù)塊block;執(zhí)行數(shù)據(jù)塊的讀寫操作。是NameNode的組成部分。
HDFS命令:
hadoop fs命令可以用于HDFS、Local FS等不同的文件系統(tǒng)。而hdfs dfs命令只用于HDFS文件系統(tǒng)
列出文件目錄:
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通過上述操作后,已經(jīng)建立。但是,文件存在哪里呢?假如,我們有兩塊硬盤,可不可以存在第二塊上呢?解決這個問題,就要修改默認文件路徑。
首先,我們來看默認存放路徑:
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
再看看文件系統(tǒng)容量和使用情況:
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?格式化
(格式化后,會出現(xiàn)dfs文件夾,下有name一個文件夾)
/usr/local/hadoop-2.7.7/sbin/start-dfs.sh? 啟動
(啟動后,在dfs文件夾下,會出現(xiàn)name,data,namesecondary三個文件夾)
hadoop dfsadmin -report?結果如下:

成功!
附2:添加子節(jié)點(以1主2從為例)
hadoop裝在一臺計算機上,稱為偽分布式。真正的分布式,必須運行在多臺計算機上。下面,為hadoop添加2個子節(jié)點。
1,配置環(huán)境(子節(jié)點相同)
(1)安裝與master和其他slave相同的java環(huán)境,jdk版本要相同。
yum? ? -y? ? install? ? ?java-1.7.0-openjdk? ? ? ?java-1.7.0-openjdk-devel
(2)修改新節(jié)點的ip和主機名對應關系,修改/etc/hosts配置文件,定義ip與hostname的映射。
/etc/hosts文件是Linux系統(tǒng)中一個負責IP地址與域名快速解析的文件
vim /etc/hosts
末尾加入:
10.0.11.5 hadoop1
10.0.11.7? hadoop2
10.0.11.8? hadoop3
(3)關閉新節(jié)點防火墻,因為Hadoop集群是在內網(wǎng)環(huán)境運行,可以關閉防火墻。
(4)配置所有節(jié)點之間,兩兩免密碼登陸。詳見:關于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配置:
列出所有的子節(jié)點的列表(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文件夾到子節(jié)點
將master的hadoop目錄,復制到子節(jié)點相應路徑:
cd??/usr/local
scp -r hadoop-2.7.7 root@hadoop2:/usr/local
4,修改子節(jié)點的配置
修改相應配置,使子節(jié)點可單獨啟動。
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文件系統(tǒng)依賴的基本配置</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? 集群啟動,某個節(jié)點掉線后,開機后再運行一次即可。
/usr/local/hadoop-2.7.7/sbin/stop-all.sh? ?集群停止
相關命令:
hadoop dfsadmin -refreshNodes? ?刷新NameNode
/usr/local/hadoop-2.7.7/sbin/start-balancer.sh? ?負載均衡
執(zhí)行集群啟動后,啟動正常。用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?節(jié)點
core?核心
Distributed?分布式的
expunge?消除