分佈式數據庫實驗二 noSQL數據庫系統Hadoop的安裝與簡單使用(僞分佈模式)

一、準備

1.1創建一個實驗用戶,如hadoop(!!!!也可以採用已有的mysql用戶,這樣就不需要再創建了,給mysql用戶做相應管理員權限賦權就可以了, 後續需要用到用戶名hadoop的時候,使用mysql)

sudo useradd -m hadoop -s /bin/bash     #創建hadoop用戶,並使用/bin/bash作爲shell
sudo passwd hadoop                   #爲hadoop用戶設置密碼,之後需要連續輸入兩次密碼
sudo adduser hadoop sudo             #爲hadoop用戶增加管理員權限
su - hadoop                          #切換當前用戶爲用戶hadoop
sudo apt-get update                  #更新hadoop用戶的apt,方便後面的安裝

(19.3.22)

1.2安裝SSH,設置SSH無密碼登陸

sudo apt-get install openssh-server   #安裝SSH server
ssh localhost                         #登陸SSH,第一次登陸輸入yes
exit                                  #退出登錄的ssh localhost
 
cd ~/.ssh/                            #如果沒法進入該目錄,執行一次ssh localhost
ssh-keygen -t rsa  

連續敲擊三次回車

其中,第一次回車是讓KEY存於默認位置,以方便後續的命令輸入。第二次和第三次是確定passphrase,相關性不大。之後再輸入:

$ cat ./id_rsa.pub >> ./authorized_keys     #加入授權
$ ssh localhost                         #此時已不需密碼即可登錄localhost,並可見下圖。

如果失敗則可以搜索SSH免密碼登錄來尋求答案

二、安裝jdk1.8

首先在oracle官網下載jdk1.8

http://www.oracle.com/technetwork/java/javase/downloads/index.html
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

接下來進行安裝與環境變量配置,根據個人電腦系統選擇對應版本,如 jdk-8u201-linux-x64.tar.gz

mkdir /usr/lib/jvm                              #創建jvm文件夾
sudo tar zxvf  jdk-8u201-linux-x64.tar.gz  -C /usr/lib/jvm  #/ 解壓到/usr/lib/jvm目錄下
cd /usr/lib/jvm                                 #進入該目錄
mv  jdk1.8.0_201 java                         #重命名爲java
vi ~/.bashrc                                 #給JDK配置環境變量

注:其中如果權限不夠,無法在相關目錄下創建jvm文件夾,那麼可以使用 $ sudo -i 語句進入root賬戶來創建文件夾。

另外推薦使用vim來編輯環境變量,即最後一句使用指令

vim ~/.bashrc 
# 如果沒有vim,可以使用:

sudo apt-get install vim
# 來進行下載。

在.bashrc文件添加如下指令:

export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=${JAVA_HOME}/bin:$PATH

在文件修改完畢保存以後,在終端輸入指令:

$ source ~/.bashrc                       #使新配置的環境變量生效
$ java -version                          #檢測是否安裝成功,查看java版本

如果出現如下圖所示的內容,即爲安裝成功

三、安裝hadoop-3.1.2

先下載hadoop-3.1.2.tar.gz,鏈接如下:

http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz

下面進行安裝:

sudo tar -zxvf  hadoop-3.1.2.tar.gz  -C  /usr/local    #解壓到/usr/local目錄下
cd /usr/local
sudo mv  hadoop-3.1.2    hadoop                     #重命名爲hadoop
sudo chown -R hadoop ./hadoop         #修改文件權限,根據實際情況確定用戶名

給hadoop配置環境變量,將下面代碼添加到.bashrc文件:

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

同樣,執行source ~/.bashrc使設置生效,並查看hadoop是否安裝成功

source ~/.bashrc
hadoop version

正確顯示版本即成功。

僞分佈式配置

Hadoop 可以在單節點上以僞分佈式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作爲 NameNode 也作爲 DataNode,同時,讀取的是 HDFS 中的文件。Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/ 中,僞分佈式需要修改2個配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現。首先將jdk1.8的路徑添(export JAVA_HOME=/usr/lib/jvm/java )加到hadoop-env.sh文件

接下來修改core-site.xml文件:

<configuration>
  	      <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/usr/local/hadoop/tmp</value>
             <description>Abase for other temporary directories.</description>
        </property>
        <property>
             <name>fs.defaultFS</name>
             <value>hdfs://localhost:9000</value>
        </property>
</configuration>

接下來修改配置文件 hdfs-site.xml

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

Hadoop 的運行方式是由配置文件決定的(運行 Hadoop 時會讀取配置文件),因此如果需要從僞分佈式模式切換回非分佈式模式,需要刪除 core-site.xml 中的配置項。此外,僞分佈式雖然只需要配置 fs.defaultFS 和 dfs.replication 就可以運行(可參考官方教程),不過若沒有配置 hadoop.tmp.dir 參數,則默認使用的臨時目錄爲 /tmp/hadoo-hadoop,而這個目錄在重啓時有可能被系統清理掉,導致必須重新執行 format 才行。所以我們進行了設置,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。

配置完成後,執行 NameNode 的格式化

 ./bin/hdfs namenode –format

啓動namenode和datanode進程,並查看啓動結果

./sbin/start-dfs.sh
jps

啓動完成後,可以通過命令 jps 來判斷是否成功啓動,若成功啓動則會列出如下進程: “NameNode”、”DataNode” 和 “SecondaryNameNode”
在這裏插入圖片描述
此時也有可能出現要求輸入localhost密碼的情況 ,如果此時明明輸入的是正確的密碼卻仍無法登入,其原因是由於如果不輸入用戶名的時候默認的是root用戶,但是ssh服務默認沒有開root用戶的ssh權限

輸入指令:

vim /etc/ssh/sshd_config

檢查PermitRootLogin 後面是否爲yes,如果不是,則將該行代碼 中PermitRootLogin 後面的內容刪除,改爲yes,保存。之後輸入下列代碼重啓SSH服務:

/etc/init.d/sshd restart

即可正常登入(免密碼登錄參考前文)

成功啓動後,如果是在桌面版linux上安裝的,也可以訪問 Web 界面 http://localhost:9870(老版本爲50070) 查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。 (如果是在服務器版linux上安裝的hadoop, 爲了進行瀏覽器訪問,需要配置一個桌面版的虛擬機來進行,輸入用IP地址代替localhost)

注意1: 也可能WEB訪問不成功, 可上網尋找解決辦法。
注意2:DFS文件系統格式化時,會在namenode數據文件夾(即配置文件中dfs.namenode.name.dir在本地系統的路徑)中保存一個current/VERSION文件,記錄clusterID,標識了所格式化的 namenode的版本。如果頻繁的格式化namenode,那麼datanode中保存(即配置文件中dfs.data.dir在本地系統的路徑)的current/VERSION文件只是你第一次格式化時保存的namenode的ID,因此就會造成datanode與namenode之間的 id 不一致。可能導致datanode無法啓動。

在這裏插入圖片描述

可以運行一個例子,步驟如下:
創建執行MapReduce作業所需的 DFS 目錄:

bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/<username>     //<username> 問用戶名,如hadoop

拷貝輸入文件到分佈式文件系統:

 bin/hdfs dfs  -put  etc/hadoop  input

可以運行一些例子:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output 'dfs[a-z.]+'

查看輸出的文件(files): 從分佈式文件系統中拷貝文件到本地文件系統並查看:

bin/hdfs dfs -get output output
cat output/*

或者直接在分佈式文件系統上查看:

bin/hdfs dfs -cat output/*

YARN 單機配置

通過設置幾個參數並運行ResourceManager daemon and NodeManager daemon,你可以在YARN上以僞分佈模式運行MapReduce job。

配置mapred-site.xml如下 :

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

配置yarn-site.xml如下

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

啓動ResourceManager daemon 和 NodeManager daemon:

sbin/start-yarn.sh

如果是在桌面版linux上安裝的, 可以用瀏覽器打開資源管理器端口,默認爲:

ResourceManager - http://localhost:8088/
(如果是在服務器版linux上安裝的hadoop, 爲了進行瀏覽器訪問,需要配置一個桌面版的虛擬機來進行,輸入用IP地址代替localhost)

在這裏插入圖片描述

可以通過下列命令停止hadoop和YARN

sbin/stop-dfs.sh
sbin/stop-yarn.sh

四 安裝Hbase和簡單使用

解壓安裝包hbase-1.2.11-bin.tar.gz至路徑 /usr/local,命令如下:

sudo tar -zxvf  hbase-1.2.11-bin.tar.gz -C /usr/local

將解壓的文件名hbase-1.2.11改爲hbase,以方便使用,命令如下:

sudo mv /usr/local/hbase-1.2.11  /usr/local/hbase
cd /usr/local
sudo chown -R hadoop ./hbase 
#將hbase下的所有文件的所有者改爲hadoop,hadoop是當前用戶的用戶名。

配置環境變量

給hbase配置環境變量,將下面代碼添加到.bashrc文件:

export PATH=$PATH:/usr/local/hbase/bin
vim ~/.bashrc

執行source ~/.bashrc使設置生效,並查看hbase是否安裝成功

/usr/local/hbase/bin/hbase version

(如果發生jar包衝突,可以移除。2.1.4版本會發生下圖錯誤,暫時不使用)
在這裏插入圖片描述

HBase配置

單機配置(可能需要配置JAVA_HOME環境變量, 由於本實驗指南在HADOOP安裝時已配置,故省略)
配置/usr/local/hbase/conf/hbase-site.xml如下
在這裏插入圖片描述
採用如下命令啓動服務、查看進程和啓動客戶端

cd /usr/local/hbase
bin/start-hbase.sh
jps
bin/hbase shell

在這裏插入圖片描述
下面爲配置僞分佈模式的指南,配置分佈模式方法請查閱官方文檔

配置hbase-env.sh

在這裏插入圖片描述

start-dfs.sh
cd /usr/local/hbase/bin
start-hbase-sh

在這裏插入圖片描述

查看DFS中Hbase 目錄,自動創建

在這裏插入圖片描述
Start a backup HBase Master (HMaster) server.(僅僅爲了測試和學習,生產環境不會在一臺機器上啓動備份master)
HMaster服務器控制 HBase集羣. 你可以啓動最多9個後備HMaster。
用 localmaster-backup.sh啓動. 爲每個後背HMaster加一個16000端口之上的偏移量。 啓動後可以查看結果。
在這裏插入圖片描述
啓動和停止附加區域服務器RegionServers,命令示例和結果如下圖。

在這裏插入圖片描述

進入交互界面

hbase shell

進行一些基本數據庫操作
創建表
使用create命令創建一個新表.你必須規定表名和列族名
在這裏插入圖片描述
顯示錶信息
使用list 命令可以顯示錶信息
在這裏插入圖片描述
使用 describe 命令顯示錶的詳細信息
在這裏插入圖片描述
向表中加入數據.
使用 put 命令
在這裏插入圖片描述
掃描表.
使用scan 命令掃描整個表取得數據 。

在這裏插入圖片描述
取一行數據,使用get指令.
在這裏插入圖片描述
修改表模式,使用alter命令,如修改存儲版本數

hbase(main):007:0>disable ’test’ 
hbase(main):007:0>alter ’test’, NAME=>’cf’,VERSIONS=>5
hbase(main):007:0>enable ’test’

其他命令 disable table, drop table,enable table 等。

思考題:

1 請問僞分佈和分佈式的含義有何不同?就本實驗,你是如何理解在一臺計算機上做到“僞分佈”的?

2 在1.2小節進行安裝SSH並設置SSH無密碼登陸,請問這個安裝的目的是什麼?

3 如果繼續向Hbase的test表中put行鍵爲”row1”,值爲其它字符串的數據,put ‘test’ ,’row1’, ‘cf:a’, ‘value6’,會發生什麼?如果採用語句get ‘test’, ‘row1’, {COLUMN=>’cf:a’, VERSIONS=>3} 進行查詢,分析你得到的結果。put與關係數據庫的插入有何不同?

附錄1

Hadoop出現錯誤:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

解決方案:
在文件hadoop-env.sh中增加:

export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章