系統:Ubuntu16.04
JDK:jdk-8u201
Hadoop:3.1.2
一、安裝JDK
https://www.cnblogs.com/tanrong/p/10641803.html
二、安裝並配置ssh免密登錄
hadoop需要使用SSH的方式登陸,linux下需要安裝SSH。客戶端已經安裝好了,一般只需要安裝服務端就可以了:
在安裝之前,還是先查看系統是否已經安裝並且啟動了ssh。
# 查看ssh安裝包情況 dpkg -l | grep ssh # 查看是否啟動ssh服務 ps -e | grep ssh
如果沒有ssh服務,則安裝ssh:
$ sudo apt-get install openssh-server
安裝完成,開啟服務(一般都是自動開啟的,所以如果一切正常的話下面這條可以不用執行)
$ sudo /etc/init.d/ssh start
測試登陸本機 ssh localhost 輸入yes,再輸入密碼,就應該可以登錄了。但是每次輸入比較繁瑣,如果是集群那就是災難了,所以要配置成免密碼登陸的方式。
1. 生成公鑰私鑰,將在~/.ssh文件夾下生成文件id_rsa:私鑰,id_rsa.pub:公鑰
$ ssh -keygen -t rsa
一直回車即可
2. 導入公鑰到認證文件,更改權限:
(1)導入本機:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
(2)導入服務器:(我只是在本機配置的,所以這一步我沒做)
首先將公鑰復制到服務器:
scp ~/.ssh/id_rsa.pub xxx@host:/home/xxx/id_rsa.pub
然后,將公鑰導入到認證文件,這一步的操作在服務器上進行:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
最后在服務器上更改權限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3)測試:ssh localhost 第一次需要輸入yes和密碼,之后就不需要了。
三、hadoop的安裝與配置
1. 官網下載:https://hadoop.apache.org/releases.html Binary download
也可以使用wget命名下載(下載目錄是當前目錄):
例如:version3.1.2 http://mirrors.shu.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
wget http://mirrors.shu.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
2. 解壓、移動到你想要放置的文件夾
mv ./hadoop-3.1.2.tar.gz ~/Software/hadoop
tar -zvxf hadoop-3.1.2.tar.gz
3. 創建hadoop用戶和組,並授予執行權限
sudo addgroup hadoop sudo usermod -a -G hadoop xxx #將當前用戶加入到hadoop組 sudo gedit /etc/sudoers #將hadoop組加入到sudoer
在 root ALL=(ALL) ALL 后
添加一行 hadoop ALL=(ALL) ALL
sudo chmod -R 755 /home/rongt/Software/hadoop
sudo chown -R rongt:hadoop /home/rongt/Software/hadoop //否則ssh會拒絕訪問
這些都是一般需要的操作,這篇文章還進行了其它的配置,如果遇到問題可以看看,是不是由於這些配置導致的:點這里。
4. 修改配置文件,和JDK的安裝一樣,可以選擇修改哪個文件。這里修改 sudo gedit /etc/profile 或者 sudo gedit ~/.bashrc
export HADOOP_HOME=/home/rongt/Software/hadoop/hadoop-3.1.2
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:$PATH
# 使配置文件生效 source /etc/profile 或者 source ~/.bashrc
這篇配置文章還配了很多其它配置,我暫時沒有配置,遇到問題,可以做為參考。點這里。
記錄一個報錯 ERROR: /usr/lib/jvm/java-8-oracle/jre/bin/bin/java is not executable.
很明顯路徑錯誤,里面有兩個bin,當時是因為環境變量設置錯誤,但是后來改了環境變量還是這樣報錯,考慮到是因為環境變量沒有生效,於是執行了source /etc/profile但還是不行,最后重啟之后解決了
5. 測試是否配置成功
hadoop version
6. hadoop單機配置(非分布式模式)
hadoop默認是非分布式模式,不需要進行其它配置。可以測試demo來觀察是否配置正確。下面這個例子用來統計README.txt 文件的單詞數
# 進入hadoop主目錄 cd /home/rongt/Software/hadoop/hadoop-3.1.2 mkdir input # 里面有個README.txt cp README.txt input # 注意改成自己的Hadoop版本 bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-3.1.2-sources.jar org.apache.hadoop.examples.WordCount input output
7. hadoop偽分布式配置
偽分布式只需要更改兩個文件就夠了,core-site.xml和hdfs-site.xml。這兩個文件都在hadoop目錄下的etc/hadoop中。
cd /home/rongt/Software/hadoop/hadoop-3.1.2/etc/hadoop
首先是core-site.xml,設置臨時目錄位置,否則默認會在/tmp/hadoo-hadoop中,這個文件夾在重啟時可能被系統清除掉,所以需要改變配置路徑。修改<configuration> </configuration>
<configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/home/rongt/Software/hadoop/hadoop-3.1.2/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,偽分布式只有一個節點,所以必須配置成1。還配置了datanode和namenode的節點位置。
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/rongt/Software/hadoop/hadoop-3.1.2/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/rongt/Software/hadoop/hadoop-3.1.2/tmp/dfs/data</value> </property> </configuration>
配置完成后在 /home/rongt/Software/hadoop/hadoop-3.1.2 (注意是自己的hadoop目錄) 下使用以下命令 執行format命令,格式化名稱節點
./bin/hdfs namenode -format
開啟hdfs:./sbin/start-dfs.sh (同樣注意路徑)如果出現ssh認證 輸入yes就可以了。
遇到報錯:localhost: ERROR: JAVA_HOME is not set and could not be found.
解決方案:其實是hadoop里面hadoop-env.sh文件里面的java路徑設置不對,hadoop-env.sh在/home/rongt/Software/hadoop/hadoop-3.1.2/etc/hadoop目錄下,具體的修改辦法如下:
# sudo gedit hdoop-env.sh 將語句 export JAVA_HOME=$JAVA_HOME # 也有可能語句為export JAVA_HOME= (且被注釋掉了) 修改為 export JAVA_HOME=/usr/lib/jvm/java-8-oracle # 自己的Java home路徑,可以在終端輸入$JAVA_HOME 查看 保存后退出,重新執行./sbin/start-dfs.sh
輸入jps命令查看是否啟動成功
namenode和datanode都要出現才算成功??
訪問http://localhost:50070 查看節點信息。 具體要看配置文件,我目前的地址是:http://rongt:50070
關閉hdfs: ./sbin/stop-dfs.sh
8. 配置yarn(非必須)
上面都是hdfs的配置,接下來就需要配置mapreduce的相關配置了,不配這個也不會影響到什么。但是缺少了資源調度,hadoop2.x版本使用yarn來進行任務調度管理,這是與1.x版本最大的不同。
在/home/rongt/Software/hadoop/hadoop-3.1.2下操作
# 並沒有mapred-site.xml.template這個文件,不過直接有mapred-site.xml,所以沒有執行這一步 # 我看的教程是安裝2.x的,但我下的是3.1.2,這可能是版本區別吧 cp ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml sudo gedit ./etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
修改etc/hadoop/yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
啟動yarn(要先啟動了hdfs:./sbin/start-dfs.sh)
./sbin/start-yarn.sh
開啟歷史服務器,查看歷史任務,這樣可以在web界面中查看任務運行情況:
./sbin/mr-jobhistory-daemon.sh start historyserver
啟動成功后可以在http://localhost:8088/cluster訪問集群資源管理器。
不啟用 YARN 時,是 “mapred.LocalJobRunner” 在跑任務,啟用 YARN 之后,是 “mapred.YARNRunner” 在跑任務。啟動 YARN 有個好處是可以通過 Web 界面查看任務的運行情況:http://localhost:8088/cluster 。
關閉資源管理器
./sbin/stop-yarn.sh ./sbin/mr-jobhistory-daemon.sh stop historyserver # 關了之后 http://localhost:8088/cluster就無法訪問了
9. 分布式部署,沒有兩台電腦,沒有嘗試,具體見:這里。
四、hdfs文件操作
參考鏈接:(在chrome書簽 Hadoop - HDFS中都有)
Permission denied: user=dr.who, access=READ_EXECUTE, inode="/tmp":student:supergroup:drwx------權限問題
Permission denied: user=administrator, access=WRITE, inode="/":root:supergroup:drwxr-xr-x
# 在linux命令前加 hdfs dfs - hdfs dfs -help # 查看 新版本要加一個 / hadoop fs -ls / # 刪除 hadoop fs -rm -r /wordCount2 # 新建 hdfs dfs -mkdir /Test # 賦權 hadoop fs -chmod 777 /wordCount2
參考:
Ubuntu16.04+hadoop2.7.3環境搭建 !!
ubuntu16.04 +Java8+ hadoop2.x單機安裝