Ubuntu15.10中安裝hadoop2.7.2安裝手冊
太初
目錄
1. Hadoop單點模式... 2
1.1 安裝步驟... 2
0.環境和版本... 2
1.在ubuntu中創建hadoop用戶... 2
2.安裝ssh. 3
3.安裝java環境... 3
4.安裝hadoop. 4
5.測試... 5
2. Hadoop偽分布式... 5
2.1 安裝步驟... 5
0.環境和版本... 6
1. 配置core-site.xml文件... 6
2. 配置hdfs-site.xml文件... 6
3. 格式化namenode. 7
4. 啟動HADOOP. 7
5. JPS命令驗證HADOOP進程... 8
6. WEB界面查HDFS信息... 8
7. 通過命令操作HDFS文件系統... 9
8. 測試... 9
3. Hadoop偽分布式(+YARN)... 10
3.1 安裝步驟... 10
4. Hadoop集群... 12
4.1 安裝步驟... 12
5. 其他補充... 18
6.1 LINUX經驗... 18
6.1.1 開啟bash的自動完成功能... 18
6.1.2 開啟ubuntu虛擬機和win10宿主機的vmware tool(共享文件)... 18
6.1.3 Ubuntu的Terminal快捷方式... 19
6.1.4 Find命令舉例... 19
6.1.5 PATH變量簡述... 19
6.1.6 Ubuntu中安裝vmware tools. 19
6.2 雜... 19
6.2.1 如何保存被禁止拷貝或存盤的HTML?... 19
6. 資料... 20
特別說明:
本文檔是筆者研究了大量網絡資料,然后自己實踐成功后,匯總各方資料的結果。總結和分享的目的只有一個,讓其他學友能少走彎路,集中精力解決業務問題,而不是環境搭建問題。在本文中引用了很多網絡資料,圖片,名稱,信息等內容,如果涉及版權問題,請原作者及時聯系並告知。謝謝。
“資料”章節收納了本文用到后未用到的資源和連接,用於分享。
因能力所限,錯漏之處敬請見諒。
感謝網絡各位大神的信息分享,是你們的努力推動者技術的發展!
[Spark安裝運行手冊隨后貼上,謝謝!]
1. Hadoop單點模式
1.1 安裝步驟
0.環境和版本
ubuntu 15.10
jdk 1.8.84
hadoop 2.7.2
1.在ubuntu中創建hadoop用戶
(備注:在GUI(圖形)界面中可用“ctrl+Alt+T”快捷鍵打開Terminal(終端窗口),並輸入下列命令。)
在Ubuntu終端窗口中,復制粘貼的快捷鍵需要加上 shift,粘貼是 ctrl+shift+v;拷貝是ctrl+shift+c;等等)
$ sudo useradd -m hadoop -s /bin/bash //新建hadoop用戶
$ sudo passwd hadoop //修改密碼為hadoop,等於賬號,方便操作;
$ sudo adduser hadoop sudo //為hadoop增加管理員的權限,以免之后出現權限問題。
(備注:也可打開sudoers文件,給hadoop用戶賦予和root一樣的權限:$sudo gedit /etc/sudoers ;然后編輯增添如下那句hadoop ALL(ALL:ALL) ALL)
【重要】GUI中注銷當前賬戶(root或Ubuntu安裝初始用戶,我這里是ya),並隨后用hadoop再次登陸。
| (可選:$sudo apt-get update //因為會用apt按照其他軟件,如果未更新apt,有可能無法安裝其他軟件,可選!) 若出現如下 “Hash校驗和不符” 的提示,可通過更改軟件源來解決。若沒有該問題,則不需要更改。 解決辦法:【系統設置】(齒輪圖標),選擇【軟件和更新】,點擊 “下載自” 右側的方框,選擇【其他節點】,選擇服務器,在列表中選中【mirrors.aliyun.com】,並點擊右下角的【選擇服務器】,會要求輸入用戶密碼,輸入即可。點擊關閉后,此時會提示列表信息過時,點擊【重新載入】,耐心等待更新緩存。完成會自動關閉【軟件和更新】這個窗口。再嘗試按照apt。如果還是提示錯誤,請選擇其他服務器節點如 mirrors.163.com再嘗試。更新成功后,再次執行 sudo apt-get update 就正常了。 |
2.安裝ssh
$sudo apt-get install openssh-server //在Terminal中允許命令,下同
(備注:用yes來continue繼續安裝,一般install安裝包默認都選y或yes就可)
(備注:Ubuntu 默認已安裝了 SSH client,此外還需要安裝 SSH server)
$sudo /etc/init.d/ssh start //安裝好ssh服務后就打開它(尚未放入自啟動!)
$ ps -e | grep ssh //查看ssh服務是否正確啟動
$ ssh-keygen -t rsa -P "" //設置免密碼登錄,【在輸入路徑那兒直接回車!】
(備注:原理可能是設定空字符串為基礎來生成的密鑰對!)
(備注:在/home/hadoop/.ssh里面生成兩個文件 id_rsa、id_rsa.pub,前者是私鑰,后者是公鑰)
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys //將公鑰追加到authorized_keys里面
(備注:它保存所有允許以當前用戶身份登錄到ssh客戶端用戶的公鑰內容;“~”波折號代表用戶主文件夾;)
$ssh hadoop@localhost //登錄ssh(其他linux的Terminal重也可嘗試如此操作:ssh hadoop@(IP|HOSTNAME);
(備注:第一次需要輸入yes,確認初次登錄,后續不用。)
$exit //退出ssh
(備注:userA@linuxPC1通過ssh登錄了userB@linuxPC2,那么就登錄uesrA獲得了userB的權限,並等價於userB通過Terminal在linuxPC2上執行命令,此為ssh方便功能之一)
3.安裝java環境
下載jdk二進制編譯包
下載用wget軟件,wget軟件在ubuntu下的安裝命令如下:
sudo apt-get install wget //按照wget程序,可直接通過“wget url鏈接 -o 輸出文件名”來下載“*.tar.gz”。
(備注:舉例用wget下載jdk包的命令格式為:wget http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-x64.tar.gz?AuthParam=1437810421_1d235bda6e9428e1caa05d0fd7951c6d -o jdk-x64.tar.gz
(備注:建議直接在百度搜索“oracle JDK download”找到合適OS/64/32的JDK並直接通過瀏覽器下載到Ubuntu,再進行如下操作更放心!)
(備注:在Ubuntu的GUI中通過firefox下載JDK,默認保存路徑在“/home/hadoop/下載”中,path含有中文,如果Ubuntu配置了“雙拼/拼音”輸入法,則可以在Terminal下使用中文!)
$sudo cp jdk-x64.tar.gz /usr/local/ //因hadoop權限不夠,用sudo拷貝JDK到合適目錄
$cd /usr/local/ //進入JDK包所在目錄
$sudo tar xzvf jdk-x64.tar.gz //sudo來釋放JDK
(備注:本人下載是當時最新的JDK1.8.0_74,故在/usr/local/目錄下解壓生成的jdk目錄是/usr/local/jdk1.8.0_74)
$sudo apt-get install vim //Ubuntu15.10下默認vim下載但未安裝,請下載安裝,確保vim可用;
$sudo vim /etc/profile //配置如下JDK相關路徑到profile
(備注:這幾行配置應該加載到/etc/profile文件的“if [ -d /etc/profile.d ]; then”這一章節中,“done”行之后,“unset i” 行之前!另外,linux配置等號兩邊不能空格!)
export JAVA_HOME=/usr/local/jdk1.8.0_74
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
(備注:vim打開文本文件后,提示符默認在左上角且為命令模式,請馬上輸入“i”則進入“插入”模式;則可上下左右移動提示符並修改文本;
完成后馬上用esc退出插入模式;隨后用“shift+冒號”進入底部命令行模式,用wq命令保存並退出,q直接退出(如果未做任何修改);如果修改
則無法q,而必須用q!來強制直接退出(不保存);其他請詳查web資料;)
$source /etc/profile //使修改的profile立即生效
$java –version //測試jdk是否安裝成功;能正確顯示JDK版本的就算安裝成功;
4.安裝hadoop
$sudo cp hadoop-2.7.2.tar.gz /usr/local/ //從hadoop官網下載最新hadoop包,比如2.7.2並拷貝到目的目錄
$cd /usr/local
$sudo tar xzvf hadoop-2.7.2.tar.gz //解壓;只能下載tar.gz給Ubuntu用;rpm格式是redhat專用
$sudo mv hadoop-2.7.2 hadoop //改名為hadoop方便后續操作
$sudo chown hadoop:hadoop -R -f /usr/local/hadoop/ //修改目錄主人
$sudo vim /etc/profile //vim可用后,再次編輯profile,添加配置;
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"
$ /usr/local/hadoop/bin/hadoop version //查看hadoop的版本及校驗和等信息!
(備注: 如果安裝了vmware tool並啟用了共享目錄,則可以從宿主PC拷貝文本和文件到虛擬機中;或通過teamviewer等軟件拷貝文本和晚間!)
| 特別說明:校驗MD5值 $cat ~/下載/hadoop-2.7.2.tar.gz.mds | grep 'MD5' //可列出md5檢驗值 $head -n 6 ~/下載/hadoop-2.7.2.tar.gz.mds //也可列出2.7.2校驗值 md5sum ~/下載/hadoop-2.7.2.tar.gz | tr "a-z" "A-Z" //可根據二進制包來計算md5值並轉為大寫方便比較; 若文件不完整則這兩個值一般差別很大,可簡單對比前幾個字符和后幾個字符即可。
補充: Ubuntu15.10包含:md5sum,sha1sum,sha256sum等命令,通過man來查他們用法,既可以生成一個二進制文件的校驗和,也可以驗證校驗和是否正確(要求校驗和關聯的二進制文件放在同一個目錄)。 比如校驗hadoop文件可用命令: sha256sum --check hadoop-2.7.2-tar.gz.mds (如果它是正確的SHA256格式,sha256sum會找到它內部指向的原始二進制文件,比如hadoop-2.7.2-tar.gz,並為它生成臨時的SHA256來比較是否一致!) 目前看hadoop上下載的2.7.2二進制安裝包是好的,但它的SHA256文件是不可視的亂碼文件(非ANSI或UTF-8,也許是Unicode),所以可能以上命令及用法及猜想都是有問題的,畢竟hadoop網站不會錯! |
5.測試
進入 hadoop目錄:
$cd /usr/local/hadoop //進入hadoop目錄
$mkdir ./input //example WordCount不會自動建立input目錄,所以需要手動建立;
$cp *.txt ./input/ //拷貝若干文本文件到input讓WordCount程序可以統計詞頻;
$rm -f -r /usr/local/hadoop/output/
//WordCount程序不會自動刪除output,每次啟動如果沒有手動刪除output就出錯!
$./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output //wordcountl例子,統計input目錄下所有文件可讀詞匯的詞頻並寫入output中
$cat ./output/* //查看運行結果
$./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep ./input ./output 'dfs[a-z.]+' // grep 例子,將 input 文件夾中的所有文件作為輸入,篩選當中符合正則表達式 dfs[a-z.]+ 的單詞並統計出現的次數,最后輸出結果到 output 文件夾中
$cat ./output/* //查看運行結果
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar //查看更多Hadoop 附帶的例子說明,包括 wordcount、terasort、join、grep 等。
(備注:運行官方測試樣例如上;遇到問題請添加input目錄,刪除output目錄;結果在output\part-r-00000中;)
(備注:特別注意,如果通過VMware的共享目錄,放了一些window的文本文件到hadoop的input目錄,因為“文件結果linux和win不同”則hadoop會報錯,但初看仍然會繼續執行得到結果!)
#####至此,單點hadop的安裝和demo測試完成!(不含hdfs/yarn偽分布式安裝內容) #####
2. Hadoop偽分布式
偽分布式模式是基於單機模式順利安裝測試通過后的進階嘗試;
其使用的軟件版本和環境都和單機模式沒有區別,僅是通過新增配置來使偽分布模式起效並取代單機模式的運行;
后面有關於模式之間切換的介紹;
2.1 安裝步驟
0.環境和版本
(完全和單機模式一致)
ubuntu 15.10
jdk 1.8.84
hadoop 2.7.2
1. 配置core-site.xml文件
(說明:Hadoop 可以在單節點上以偽分布式的方式運行;Hadoop 進程以分離的 Java 進程來運行,節點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的文件,而不再是Ubuntu操作系統的ext4下面的文件;)
Hadoop 的配置文件位於 /usr/local/hadoop/etc/hadoop/中,偽分布式需要修改2個配置文件 core-site.xml 和 hdfs-site.xml。配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現。修改配置文件 core-site.xml原來內容為空的標簽“<configuration></configuration>”
(備注:因為是XML文件,不是普通INI/CONF/TXT等配置文件,所以不可以用#井號做備注,應該用<!—XXX -->來添加注釋!)
| 修改為下面配置: <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>
|
2. 配置hdfs-site.xml文件
| 同樣修改配置文件 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> XML
|
(說明:雖然官方教程只需配置 fs.defaultFS 和 dfs.replication兩項就可以運行hadoop,但若沒有配置 hadoop.tmp.dir 參數,則默認使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重啟時有可能被系統清理掉,導致必須重新執行 format 才行。所以我們進行了設置,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。)
3. 格式化namenode
./bin/hdfs namenode –format //配置完成后,需格式化 NameNode方能使用;
(備注:成功的話,會看到 “successfully formatted” 和 “Exitting with status 0″ 的提示;若為 “Exitting with status 1″ 則是出錯。)
(注意:這一步若提示 Error: JAVA_HOME is not set and could not be found. 的錯誤,則需要在文件 ./etc/hadoop/hadoop-env.sh 中設置 JAVA_HOME 變量;比如找到“export JAVA_HOME=${JAVA_HOME}”,改為“export JAVA_HOME=/usr/local/jdk1.8.0_74”,並重新嘗試格式化即可。最好總是添加!)
4. 啟動HADOOP
./sbin/start-dfs.sh //開啟 NameNode 和 DataNode 守護進程
(備注:出現SSH提示,輸入yes即可)
| 注意:啟動時可能會出現如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN 提示可以忽略,並不會影響正常使用。但最好修復它; 解決方法是編輯hadoop-env.sh, 在最后添加“export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_INSTALL/lib/native”
|
5. JPS命令驗證HADOOP進程
啟動完成后,可以通過命令 jps 來判斷是否成功啟動,若成功啟動則會列出如下進程: “NameNode”、”DataNode” 和 “SecondaryNameNode”;JPS命令以后會多次用於yarn和真實分布式模式中;
Jps //通過jps查看啟動的Hadoop進程
錯誤1:如果 SecondaryNameNode 沒有啟動,請運行 sbin/stop-dfs.sh 關閉進程,然后再次嘗試啟動嘗試。
錯誤2:如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查之前步驟,通過查看啟動日志排查原因。
錯誤3:如果DataNode沒啟動,一般情況下,可嘗試如下方法恢復。但這會刪除 HDFS中原有數據,請謹慎!):
./sbin/stop-dfs.sh //關閉hadoop(hdfs)
rm -r ./tmp //刪除 tmp 文件,這會刪除 HDFS 中原有的所有數據
./bin/hdfs namenode -format //重新格式化 NameNode
./sbin/start-dfs.sh //重啟
排錯方法:可查啟動日志來排查原因,注意幾點:
啟動時會提示形如 “DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out”,其中 DBLab-XMU 對應你的機器名,但其實啟動日志信息是記錄在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以應該查看這個后綴為 .log 的文件;啟動日志都是追加的,拉到最后查看最新內容,log每行有時間信息。出錯通常寫着 Fatal、Error、Warning 或者 Java Exception 的地方。可在網上搜索出錯信息,找到相關解決方法。
6. WEB界面查HDFS信息
| http://localhost:50070/;當成功啟動后,可以訪問 Web 界面來查看 NameNode 和 Datanode 信息,還可在線查看 HDFS 中的文件。在“Utilities”菜單下“Browse the file system”中可看到在hdfs上建立的目錄“/user/hadoop”等,而在ubuntu的文件系統ext4上看不到!
|
7. 通過命令操作HDFS文件系統
單機模式下運行“grep/WordCount”等例子讀取的是Ubuntu的ext4中的本地數據,而偽分布式讀取的則是 HDFS 上的數據。為了使用 HDFS,需要在 HDFS 中創建用戶目錄,增刪改查文件和目錄。
./bin/hdfs dfs -mkdir -p /user/hadoop //在HDFS創建hadoop用戶
./bin/hdfs dfs -mkdir input //新建hadoop用戶后自動轉到其目錄下,現在新建input目錄,在hadoop目錄下
./bin/hdfs dfs -put ./etc/hadoop/*.xml input //將Ubuntu的ext4目錄下的xml文件拷貝到hdsf的hadoop\input目錄下;
./bin/hdfs dfs -ls input //復制完成后,查看文件列表;
(說明:偽分布式模式運行的MapReduce 作業的方式跟單機模式相同,但區別在於偽分布式讀取的是HDFS中的文件,而不是Ubuntu的ext4下的output和input目錄;可以將單機模式步驟中創建的本地 input 文件夾,輸出結果 output 文件夾都刪掉來驗證這一點)。
8. 測試
執行“grep”example:
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
$ ./bin/hdfs dfs -cat output/* //查看hdfs上的結果;
執行“wordcount”example:
./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output
(備注:此句和單點運行模式時一模一樣,但是因為hadoop啟動為偽分布式,所以從hdfs里的input讀數據並寫入output中去,不會再訪問ubuntu的文件系統ext4了。結果可以通過本機50070的portal登陸查看hdfs文件系統的變化,並下載結果到ext4中。)
查看運行結果(查看的是位於 HDFS 中的輸出結果):
./bin/hdfs dfs -cat output/*
也可從HDFS取回運行結果到本地ext:
rm -r ./output # 先刪除本地的 output 文件夾(如果存在)
./bin/hdfs dfs -get output ./output # 將 HDFS 上的 output 文件夾拷貝到本機
cat ./output/*
(再次運行)Hadoop偽分布式的grep
./bin/hdfs dfs -rm -r output # 刪除 output 文件夾
(備注:Hadoop 運行grep或wordcount時,輸出目錄不可存在,否則會提示錯誤 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,需先刪除 output 文件夾;在實際開發應用程序時,也可考慮在程序中加上如下代碼,能在每次運行時自動刪除輸出目錄,避免繁瑣的命令行操作,如下:)
| Configuration conf = new Configuration(); Job job = new Job(conf); /* 刪除輸出目錄 */ Path outputPath = new Path(args[1]); outputPath.getFileSystem(conf).delete(outputPath, true);
|
關閉 Hadoop:
./sbin/stop-dfs.sh
再次啟動 hadoop 時,無需進行 NameNode 的初始化,只需要運行 ./sbin/start-dfs.sh 就可以!
3. Hadoop偽分布式(+YARN)
3.1 安裝步驟
| 啟動YARN 啟動 Hadoop 后,沒有原來的JobTracker 和 TaskTracker,因為新版Hadoop使用了新的MapReduce V2框架,稱為 YARN(Yet Another Resource Negotiator)。YARN 從 MapReduce 中分離出來,負責資源管理與任務調度。 YARN 運行於 MapReduce 之上,提供了高可用性、高擴展性。偽分布式HADOOP可以不安裝和啟動YARN。 通過 ./sbin/start-dfs.sh啟動Hadoop后,僅是啟動了供MapReduce使用的HDFS環境,為了啟動 YARN來負責資源管理與任務調度。需要修改配置文件 mapred-site.xml: mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml //先從默認template重命名 用vim編輯如下: <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> ./sbin/start-yarn.sh /YARN(需先啟動HDFS/MR) ./sbin/mr-jobhistory-daemon.sh start historyserver //啟動歷史服務器,才能在Web中查看任務運行情況; 通過 jps命令查看到(NodeManager,ResourceManager,NameNode,DataNode)進程都啟動了; 啟動 YARN 之后,運行實例的方法還是一樣,但資源管理方式和任務調度不同。觀察日志信息可以發現,不啟用 YARN 時,是 “mapred.LocalJobRunner” 在跑任務,啟用 YARN 之后,是 “mapred.YARNRunner” 在跑任務。啟動 YARN的好處是通過Web界面http://localhost:8088/cluster可以查看任務運行情況:
YARN 主要是為集群提供更好的資源管理與任務調度,然而這在單機上體現不出價值,反而會使程序跑得稍慢些。 如果不想啟動 YARN,務必把配置文件 mapred-site.xml重命名,比如改回到mapred-site.xml.template,需要用時再改回來。否則該配置文件存在但未開啟 YARN的情況下,運行實例程序會提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032″ 的錯誤,這就是為何該配置文件初始默認文件名為 mapred-site.xml.template的原因。 (備注:先關閉yarn再rename它的配置比較好!Ubuntu用mv而不是rename來修改文件名稱! Ubuntu下面rename是另一個較為復雜但強大的正則表達式命令,一般用來批量重命名文件之用) ./sbin/stop-yarn.sh //關閉YARN ./sbin/mr-jobhistory-daemon.sh stop historyserver //關閉history服務器,WEB也沒了;
補充hdfs命令: hadoop@ya-chy-pc-vm:/usr/local/hadoop$ hadoop fs -ls -R / 列出虛擬hdfs的根目錄/下所有文件 –R是遞歸 hadoop@ya-chy-pc-vm:/usr/local/hadoop$ ./bin/hdfs dfs -mkdir /user/hadoop/output 新建hdfs指定目錄(絕對路徑) hadoop@ya-chy-pc-vm:/usr/local/hadoop$ ./bin/hdfs dfs -rm -r /user/hadoop/output 遞歸刪除指定目錄
|
4. Hadoop集群
4.1 安裝步驟
| 前面已經描述了Hadoop的單點安裝,偽分布式安裝及YARN的使用,這里再描述集群安裝的要點。 我們基於之前安裝的目錄假設,僅對有區別的做特別提醒,否則請翻看前面內容。 另外,一些注意點和要點,可能也類似,前面提醒過的,無非重要,不再提醒,假設讀者已經充分熟練掌握前面幾種安裝情況,並順利運行。
筆者的網絡拓撲環境如下: 台式PC(宿主機/AMDK8/8G/win10):192.168.1.X(路由器DHCP動態分配) 台式PC(虛擬機/AMDK8/3G/Ubuntu15.10+虛擬機網絡模式為橋接模式):192.168.1.220(master)固定IP 筆記本PC(E5420/i3/2GB/Ubuntu15.10):192.168.1.201(slave1)固定IP 筆記本PC(E5400/雙核/2GB/Ubuntu15.10):192.168.1.202(slave2)固定IP 兩兩都能ping通,可以路由得到彼此,算在一個局域網內。 兩兩建立SSH后,可以用SCP(如下),將下載好的JDK/HADOOP等拷貝到其他host主機上。(用有線網絡所在的HOST下載安裝包最快。) scp hadoop-2.7.2.tar gz hadoop@192.168.1.6:/home/hadoop/ 或 scp hadoop-2.7.2.tar gz hadoop@slave1:/home/hadoop/ 其他類似
主要流程:
a) Hostname建議用常用且含有明確的master和slave。
a) 如果安裝過單點或偽分布式就已經正確安裝了hadoop,只有配置有些變化而已。 3. 在Slave節點配號 hadoop 用戶; 4. 將 Master節點上的/usr/local/hadoop目錄復制到其他Slave節點上(為了快並保持配置一致,這樣比較簡單); 5. 在 Master節點上開啟Hadoop,就啟動了整個Hadoop集群。
准備IP和網絡
任何配置前,建議都先關閉 Hadoop (/usr/local/hadoop/sbin/stop-dfs.sh),再進行后續集群配置。
sudo vim /etc/hostname //修改“hostname=master”,其他slave等集群機器都要修改;注意大小寫; sudo vim /etc/hosts //修改為如下,其他slave等集群機器都要修改;注意大小寫; “192.168.1.201 slave1” “192.168.1.202 slave2” “192.168.1.220 master” “127.0.0.1 localhost”
對master和每個slave機器都做如上hostname和hosts配置,且重啟動(才能體現出hostname) 注意:hosts文件中只有一個 127.0.0.1,對應名為 localhost,有多余應刪除,特別不能有 “127.0.0.1 master”等
SSH配置: 這個和單點類似,只不過要讓master可以操控各個slave機器,所以額外做如下操作: cd ~/.ssh //如果以前安裝hadoop生成過ssh,就會有該目錄; rm ./id_rsa* //刪除OLD公匙(因為hostname變化了) ssh-keygen -t rsa //一直按回車就可以(這樣就生成了無密碼的密鑰對) cat ./id_rsa.pub >> ./authorized_keys //將公鑰id_rsa.pub寫入認證文件authorized_keys中 ssh master //嘗試master本機的無密碼SSH登陸,測試通過就繼續后續處理 scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/ //將公鑰也拷貝到slave1機器上;
#以下在slave1機器上執行,其他slave類似 mkdir ~/.ssh //如果不存在該文件夾需先創建,若已存在則忽略。Slave1如果自己弄過SSH,就會有它。 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys //將master的公鑰加入本地授權文件; rm ~/id_rsa.pub //刪除master公鑰
#以下在slave1機器上執行,其他slave類似 ssh slave1 //在master機器上執行,嘗試無密碼SSH登陸slave1,成功后,其他slave都配置好測試完。
路徑配置: 在路徑(etc/profile)中增加行“export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin”,如果做過之前的點單等配置,應該已經有了,可以查所有集群的相關配置。並source一下,應用更新。
設定集群相關配置文件: 集群/分布式模式需要修改/usr/local/hadoop/etc/hadoop 中的5個配置文件,更多設置請查官方說明。這里僅設置為了正常啟動所必須的設置項:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml
1.文件slaves 該文件記錄所有DataNode 的主機名,每行一個hostname字符串,默認為 localhost(偽分布式模式時,slaves文件默認為localhost,則節點即作為NameNode也作為DataNode)。分布式配置可以保留 localhost,也可刪掉,讓master 節點僅作為 NameNode 使用。 這里請添加如下內容: “slave1 slave2” 兩行,master 節點僅作為NameNode使用,不作為datanode。請將localhost行刪除。
2文件core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://Master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
3文件hdfs-site.xml 我們有slave1和slave2所有dfs.replication填寫2,它指定dfs分布式文件系統的replication數目。 <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>Master:50090</value> </property> <property> <name>dfs.replication</name> <value>2/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>
4文件mapred-site.xml 默認安裝完是mapred-site.xml.template,請重命名。
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration> 備注:注意master大小寫最好一致,幾個配置文件都要注意。
5文件yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
從master復制配置到各slave機器: 將 master上/usr/local/Hadoop文件夾復制到各個節點上。如果以前有安裝配置運行過偽分布式模式,建議在切換到集群模式前備份(或刪除)之前的臨時文件,以便出現問題。 在master 節點上執行: cd /usr/local sudo rm -r ./hadoop/tmp //刪除無用臨時文件 sudo rm -r ./hadoop/logs/* //刪除日志 tar -zcf ~/hadoop.master.tar.gz ./hadoop //壓縮 cd ~ scp ./hadoop.master.tar.gz slave1:/home/hadoop //從master復制目錄壓縮包到slave1機器; 在 slave1 節點上執行: sudo rm -r /usr/local/hadoop //刪掉舊的(或mv備份到比如“Hadoop-standalone”等等) sudo tar -vzxf ~/hadoop.master.tar.gz -C /usr/local //解壓縮 sudo chown -R hadoop:hadoop /usr/local/hadoop //變更目錄owner權限,讓hadoop用戶可用此目錄
同樣對其他slave進行處理。
首次運行:
首次啟動需要先在master節點執行NameNode的格式化: 在master節點上運行: hdfs namenode -format //首次運行需要執行初始化(一大堆log輸出,開啟NameNode,格式化並再次關閉)
關閉防火牆: Ubuntu15.10如果是desktop默認配置的防火牆不會影響hadoop各種模式的運行。但如果是server版本,比如centOS這種偏服務器的版本,可能默認/etc/init.d/iptables會啟動,可以停掉它,請查相關資料。
啟動Hadoop集群: 在 Master 節點上執行: start-dfs.sh //一般在/usr/local/hadoop/sbin,下同; start-yarn.sh mr-jobhistory-daemon.sh start historyserver 通過命令jps可以查看各個節點所啟動的進程。正確的話,在Master節點上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 進程。在Slave節點可以看到 DataNode 和 NodeManager 進程。缺少任一進程都表示出錯。 還可在Master節點上通過“hdfs dfsadmin –report”查看DataNode是否正常啟動,Live datanodes為2(2個slave機器都是datanode),則說明集群啟動成功。
通過Web查看集群狀態: http://master:50070/ 查看DataNode,NameNode 的狀態。如果不成功,通過啟動日志排錯。Log4j應該配置好(前面有詳述,不在累贅)。
運行分布式集群的例子: 方法和偽分布式一樣(偽分布式就是為了讓你聯系分布式的,所以理應差別不大)。 hdfs dfs -mkdir -p /user/hadoop //首先創建HDFS上的用戶目錄 hdfs dfs -mkdir input //為hdfs分布式系統建立input目錄 hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input //從Ubuntu本地ext4文件系統拷貝文件到hdfs http://localhost:50070/ //web查看DataNode的狀態(占用大小會改變),文件確實復制到了DataNode中
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+' //運行MapReduce作業 說明:上述命令hadoop位於/usr/local/hadoop/bin/hadoop,因為設定過PATH,所以可以直接執行;運行時的輸出信息與偽分布式類似,會顯示Job 的進度。可能會有點慢,但如果遲遲沒有進度,比如 5 分鍾都沒看到進度,那不妨重啟 Hadoop 再試試。若重啟還不行,則很有可能是內存不足引起,建議增大虛擬機的內存,或者通過更改 YARN 的內存配置解決。
查看job運行情況: 通過Web界面查看JOB進度http://master:8088/cluster ,點擊 “Tracking UI”這列的 History 連接,可看任務運行信息。
關閉集群: stop-yarn.sh //在master節點上關閉yarn stop-dfs.sh //再master節點上關閉hdfs分布式文件系統 mr-jobhistory-daemon.sh stop historyserver //在master上關閉跟蹤信息 備注:你同樣也可以和偽分布式類似而選擇不啟動YARN,但除了不start-yarn.sh之外,要記得改掉mapred-site.xml 的文件名,比如將它mv為原來的mapred-site.xml.template。
至此,基本上分布式hadoop集群最基本的搭建運行和啟停都算弄了一下。還有大量的配置和調優工作需要研究。 提醒:千萬不要為了調優和調優,分布式計算系統(包括以后將介紹的SPARK)主要是為了解決問題,先跑通解決問題是一個領域或維度;而調優並讓問題解決的更漂亮是另外一個維度和領域,兩者並無必然的聯系;建議還是先用上分布式(hadoop和spark),再考慮一定數據量和計算量情況下的調優。這是兩個工種,如同研發工程師和產業化工程師的區別。
Hadoop各種模式切換及說明:
1偽分布式安裝的說明: 請參考相關文檔,配置起效hdfs,則input和output目錄都放到hdfs中,實現正在的基於hdfs高層文件格式之上的分布式;但因為實在一台PC或虛擬機的Ubuntu上操作,所以叫偽分布式,任務並未分發給不同的PC節點! 2偽分布式安裝的yarn說明: 偽分布式允許可單獨靠hadoop;也可升級安裝yarn來支持hadoop,則有更方便查看的web界面來觀察yarn的分布式允許; 3分布式安裝說明: 請虛擬或實際配置至少2或多個PC節點,來測試真實分布式hadoop系統;配置和允許和偽分布式差不多,只是多了ssh/SCP/HOSTNAME配置等內容,原理類似; 4單點和偽分布式切換: 備份並確保文件(mapred-site.xml.template)不存在;備份並確保文件(core-site.xml)為初始狀態,就是“configuration標簽內部是空的!”;則可以按照單點模型運行mapreduce的WordCount例子,並在單點所在的ext4的Ubuntu系統內發現output文件輸出(而不會輸出到hdfs上); 5偽分布式是否啟動YARN: 按正常命令關閉YARN;備份並確保文件(mapred-site.xml.template)不存在;則會運行不帶YARN的偽分布式模式,否則即使不啟動yarn,run的時候也會出錯! 6偽分布式和分布式切換: 兩者無本質區別,只是將namenode,datanode,hdfs,各類manager等網元配置分不到不同的PC上而已;其實“偽分布式模型”等價於啟動hadoop+hdfs+yarn的最小網元集合,而網元們都指向或曰安裝在同一個PC上。 1. 從分布式切換到偽分布式時,不要忘記修改 slaves 配置文件; 2. 在兩者之間切換時,若遇到無法正常啟動的情況,可以刪除所涉及節點的臨時文件夾,這樣雖然之前的數據會被刪掉,但能保證集群正確啟動。所以如果集群以前能啟動,但后來啟動不了,特別是 DataNode 無法啟動,不妨試着刪除所有節點(包括 Slave 節點)上的 /usr/local/hadoop/tmp 文件夾,再重新執行一次 hdfs namenode -format,再次啟動試試。
|
5. 其他補充
6.1 LINUX經驗
6.1.1 開啟bash的自動完成功能
$sudo vim /etc/bash.bashrc //修改此文件;按需輸入密碼
找到文件中的如下腳本片段,去掉本小節第一行外的所有前導#號;
這就開啟了目錄/文件自動補全和完成的智能功能,大大提升terminal中bash命令的運行效率。
#enable bash completion in interactive shells
#if ! shopt -oq posix; then
# if [-f /usr/share/bash-completion/bash_completion ]; then
# . /usr/share/bash-completion/bash_completion
# elif [ -f /etc/bash_completion]; then
# . /etc/bash_completion
# fi
#fi
6.1.2 開啟ubuntu虛擬機和win10宿主機的vmware tool(共享文件)
如果不是真實PC,而是用虛擬機且是VMware,那么可以安裝VMware tool,並使用共享目錄,在宿主機和虛擬機上傳遞文件,拷貝文字等;
網絡連接:http://blog.csdn.net/zybasjj/article/details/7401808 (VMware虛擬機安裝Ubuntu使用share folders共享windows目錄的方法)
步驟:
1.關閉ubuntu虛擬機后,在虛擬機配置中設定CD/DVD-ROM指向vmware安裝目錄下的”linux.iso”(如果是win虛擬機則指向windows.iso);
2.啟動ubuntu虛擬機發現taskbar上有VMware Tools的光盤圖標;雙擊查看;
3.發現多個文件,比如:manifest.txt和 VMwareTools-10.0.5-3228253.tar.gz等,將套們都拷貝到 /tmp 下;
4.進入cd /tmp;並解壓縮tar zxvf VMwareTools-8.4.5-324285.tar.gz;
5.進入cd vmware-tools-distrib(進入解壓后對應文件夾);
6.sudo ./vmware-install.pl 命令來安裝VMware tool;會提示輸入登陸用戶的密碼;然后有不斷的提示,主要都按回車,最后會出現: Enjoy, --the VMware team,就算按照完畢!
7.在宿主機(比如win10)上對vmware中的ubuntu虛擬機的配置中“共享目錄”進行設定,一般不勾選只讀;進入ubuntu虛擬機后會在 /mnt/hgfs/xxx 下發現win10上的文件了!(xxx就是win10宿主機上設定的共享目錄)
8.注意win和linux的文件結尾不同,尤其是帶回車換行的文本文件等;二進制文件可能好點;
6.1.3 Ubuntu的Terminal快捷方式
Ubuntu下Ctrl+Alt+T調用出Terminal界面。
6.1.4 Find命令舉例
sudo find / -name 'mapred-site.xml' //在根目錄查找此文件名的文件
6.1.5 PATH變量簡述
可執行 echo $PATH(或export $PATH,看用的什么shell環境了) 查看它是包含了很多目錄的字符串。例如我們在主文件夾 ~ 中執行 ls 這個命令時,實際執行的是 /bin/ls 這個程序,而不是 ~/ls 這個程序。系統是根據 PATH 這個環境變量中包含的目錄位置,逐一進行查找,直至在這些目錄位置下找到匹配的程序(若沒有匹配的則提示該命令不存在)。
我們一般先進入/usr/local/hadoop 目錄中,再執行 sbin/hadoop,實際上等同於運行 /usr/local/hadoop/sbin/hadoop。我們可以將 Hadoop 命令的相關目錄加入到 PATH 環境變量中,這樣就可以直接通過 start-dfs.sh 開啟 Hadoop,也可以直接通過 hdfs 訪問 HDFS 的內容,方便平時的操作。
我們如果在 ~/.bashrc 中設置PATH,比如“export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin”,並用source ~/.bashrc使設置生效;之后在任意目錄中,都可以直接使用 hdfs 等命令。比較方便。
6.1.6 Ubuntu中安裝vmware tools
如果要升級或安裝,可以通過$sudo apt-get install open-vm-tools 來安裝和升級;
也可以從網絡下載“linux.iso”的vmware tools的鏡像光盤,放入虛擬機的DVD/CDROM中,啟動后多出一個盤,位於“/media/username/VMware tool/”目錄中,然后將“VMwareTools-10.0.0-2977863.tar.gz”文件拷貝到比如/tmp目錄,解壓並運行“./install.pl”就能安裝了。
別忘記啟動虛擬機配置中設定外界的宿主系統(比如WIN10)的一個目錄(比如叫sharedfolder)為共享目錄,進入虛擬機后,自動mount掛在到“/mnt/hgfs/sharedfolder”這樣可以共享文件了。
6.2 雜
6.2.1 如何保存被禁止拷貝或存盤的HTML?
當html或mht等頁面禁止保存或拷貝內容的時候,可以查看源碼並保存為html后綴文件。
然后本地打開拷貝黏貼其內容。
如果是zh-cn而非通用的3字節utf-8編碼,則可以用諸如notepad++等軟件打開html並轉換為utf8,保存再次打開,就能拷貝黏貼了。
6. 資料
本文內容是筆者從網絡資料中收集,整理,實踐,修訂,備注而成。
一為整理學習,方便以后查閱參考;
二為方便他人學習交流之用;
以下羅列資料只有部分研究過,僅供參考,並無傾向性推薦。
感謝開放的網絡。感謝網絡上各位的分享!
ubuntu15.04安裝hadoop2.6.0及eclipse開發環境配置:http://www.linuxdiyf.com/linux/12474.html
Ubuntu15.04單機/偽分布式安裝配置Hadoop與Hive試驗機:http://www.linuxdiyf.com/linux/11858.html
Ubuntu下安裝Hadoop(單機版):http://www.linuxdiyf.com/linux/11372.html
http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html
http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html
http://www.micmiu.com/bigdata/hadoop/hadoop-2x-ubuntu-build/
http://www.powerxing.com/install-hadoop/ 筆記Hadoop
Hadoop集群安裝配置教程_Hadoop2.6.0_Ubuntu/CentOS
使用命令行編譯打包運行自己的MapReduce程序 Hadoop2.6.0
使用Eclipse編譯運行MapReduce程序 Hadoop2.6.0_Ubuntu/CentOS
Hadoop-in-Practice第四章MapReduce-Join代碼運行問題
Hadoop安裝教程_單機/偽分布式配置_CentOS6.4/Hadoop2.6.0
大數據教材推薦
林子雨老師(研究生導師)編著的《大數據技術原理與應用》,該教程是針對高校學生打造的入門級教材,目前已被多所高校作為大數據課程指定教材。
林子雨主講入門級大數據在線課程(視頻)
