一、準備
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"