A: 軟件環境javascript
a) OS: Ubuntu 12.10java
b) Hadoop: 1.2.1node
B. 準備:python
a) Windows和虛擬機Linux共享目錄若是找不到,可能須要運行一下如下指令:linux
sudo apt-get install open-vm-dkmsios
sudo mount -t vmhgfs .host:/ /mnt/hgfs或者c++
sudo mount -t vmhgfs .host:/ /mntapache
b) Vmware workstation 安裝Ubuntu 12.10 LTS卡在安裝Vmware Tools的界面:ubuntu
在安裝流程的Guest OS安裝步驟時,不要選擇ISO方式,而要選擇"I will install the operationvim
system later",在後續再加載鏡像,不然就會致使裝完後,卡在安裝Vmware Tools的界面
的問題。
c) root登陸:
sudo -i
passwd
sudo -s
gedit /etc/lightdm/lightdm.conf
在文件後增長兩句:
greeter-show-manual-login=true #手工輸入登錄系統的用戶名和密碼
allow-guest=false #不容許guest登陸
1. JDK安裝
a) 安裝目錄:網上的安裝JDK資料中安裝目錄基本有兩種——/opt和/usr/local。這兩個目錄安裝在哪裏其實都無所謂,只不過在之前的linux中人們習慣將軟件安裝在/usr/local中。這裏推薦/opt目錄。
b) 配置文件:將JDK同時配置在/etc/profile和/etc/bash.bashrc中
c) 下載32位或64位JDK安裝文件,形如jdk-6u37-linux-i586.bin或jdk-6u37-linux-x64.bin
d) 拷貝JDK文件到/opt目錄:
# mv jdk-6u37-linux-x64.bin /opt
e) 受權,並執行:
chmod +x jdk-6u37-linux-x64.bin
./jdk-6u37-linux-x64.bin
f) 設置環境變量:
vim /etc/profile
vim /etc/bash.bashrc
在兩個文件的末尾都加上下面一段
#set java environment
export JAVA_HOME=/opt/jdk1.6.0_37
export JRE_HOME=/opt/jdk1.6.0_37/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
g) 從新打開終端,測試是否安裝成功:
java –version
注1:本部分參考http://www.neversaydie.cc/ubuntu-install-jdk-in-detailed/,謝謝原做者。
注2:或者能夠省略以上步驟,直接:
sudo apt-get install openjdk-6-jdk
java -version
注3:Ubuntu由於默認的root帳戶是沒有面的,因此先登陸進去後,sudo -i 修改root密碼,而後
再用root登陸進去進行安裝,文本修改等操做。
2. 安裝SSH
a) 安裝SSH,運行:
sudo apt-get install ssh(Ubuntu直接爲openssh-server)
若是下載失敗,可能要更新下下載源:
sudo gedit /etc/apt/sources.list
b) 啓動服務:
sudo /etc/init.d/ssh start
c) 經過以下命令查看服務是否正確啓動:
ps -e | grep ssh
d) 設置成免密碼登陸,生成私鑰和公鑰,建立一個空密鑰:
ssh-keygen -t rsa -P ''"
按Enter跳過,而後
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
能夠登入ssh確認之後登陸時不用輸入密碼:
ssh localhost
3. Hadoop基本設置
a) 設定hadoop-env.sh:
進入hadoop目錄,打開conf目錄下到hadoop-env.sh,添加如下信息:
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk (視你機器的java安裝路徑而定)
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin
b) 讓環境變量配置生效source:
~$ source /home/xxx/xxx/hadoop-1.2.1/conf/hadoop-env.sh
c) 在 /etc/profile和/etc/bash.bashrc加入以下的信息:
#Hadoop variables
export HADOOP_INSTALL=/home/xxx/xxx/hadoop-1.2.1 #hadoop的安裝目錄
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$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_CONF_DIR="$HADOOP_COMMON_HOME/etc/hadoop"
###end of paste
而後註銷,從新登陸
d) 這個時候Hadoop已經安裝完成,能夠查看下Hadoop版原本檢測是否正常:
hadoop version
d) 運行一下hadoop自帶的例子WordCount來感覺如下MapReduce過程:
在hadoop目錄下新建input文件夾
~$ mkdir input
將conf中的全部文件拷貝到input文件夾中
~$ cp conf/* input
運行WordCount程序,並將結果保存到output中
~$ hadoop jar /home/xxx/xxx/hadoop-1.2.1/hadoop-examples-1.2.1.jar wordcount /home/xxx/xxx/hadoop-1.2.1/input /home/xxx/xxx/hadoop-1.2.1/output
觀察結果
~$ cat output/*
4. Hadoop僞分佈安裝
a) 解壓hadoop文件,修改配置:
conf/core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
conf/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
conf/mapred-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
b) 格式化HDFS文件系統:bin/hadoop namenode -format
c) 啓動:bin/start-all.sh
d) jps查看JVM實例:
xxx TaskTracker
xxx DataNode
xxx JobTracker
xxx SecondaryNameNode
xxx Jps
xxx NameNode
e) 查看地址(可用瀏覽器查看):
NameNode - http://localhost:9000/
JobTracker - http://localhost:9001/
5. Hadoop全分佈安裝
a) 集羣機器三臺:
192.168.56.101 master
192.168.56.102 slave1
192.168.56.103 slave2
保證各集羣機安裝了java,下載hadoop安裝文件
爲了方便管理可建立一個特定的用戶:
sudo addgroup hadoop
sudo adduser --ingroup hadoop hadoop
b) 將hadoop文件的擁有者改成hadoop用戶:
sudo chown -R hadoop:hadoop hadoop
c) 經過hadoop帳號配置SSH,具體過程參見上文
vim /etc/hosts
192.168.56.101 master
192.168.56.102 slave1
192.168.56.103 slave2
e) 修改/etc/hostname的主機名(如;master,slave1等)
f) 配置hadoop-env.sh的export JAVA_HOME=
如下配置的目錄須要確認有權限和目錄存在,不然會出現問題。
conf/core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<final>true</final>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
<final>true</final>
</property>
</configuration>
conf/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
<final>true</final>
</property>
<property>
<name>dfs.name.dir</name>
<value>/data/hadoop/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.data.dir</name>
<value>/data/hadoop/hdfs/data</value>
<final>true</final>
</property>
</configuration>
conf/mapred-site.xml:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
conf/masters:
master
conf/slaves:
slave1
slvae2
g) 最後啓動hadoop:
bin/hadoop namenode -format#set java environment
bin/start-all.sh
h) 一些基本測試:
Copy the input files into the distributed filesystem:
$ bin/hadoop fs -put conf input
Run some of the examples provided:
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
Examine the output files:
Copy the output files from the distributed filesystem to the local filesytem and examine them:
$ bin/hadoop fs -get output output
$ cat output/*
View the output files on the distributed filesystem:
$ bin/hadoop fs -cat output/*
When you're done, stop the daemons with:
$ bin/stop-all.sh
PS:注意文件權限問題。。啓動的適合我發現如下這個問題
WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: Incorrect permission for /xxx/data, expected: rwxr-xr-x, while actual: rwxrwxr-x
經過修改文件權限解決了
注:本部分參考http://my.oschina.net/u/220934/blog/130021,謝謝原做者。
6. Eclipse基本安裝
a) 下載解壓:
把eclipse-java-helios-SR2-linux-gtk.tar.gz解壓到某個目錄中,我解壓到的是/home/jay/Development,獲得eclipse目錄
b) 在/usr/bin目錄下建立一個啓動腳本eclipse,執行下面的命令來建立:
sudo gedit /usr/bin/eclipse
而後在該文件中添加如下內容:
#!/bin/sh
export MOZILLA_FIVE_HOME="/usr/lib/mozilla/"
export ECLIPSE_HOME="/home/wangxing/Development/eclipse"
$ECLIPSE_HOME/eclipse $*
c) 修改該腳本的權限,讓它變成可執行,執行下面的命令:
sudo chmod +x /usr/bin/eclipse
d) 在Applications(應用程序)菜單上添加一個圖標:
sudo gedit /usr/share/applications/eclipse.desktop
而後在文件中添加下列內容:
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse Platform
Comment=Eclipse IDE
Exec=eclipse
Icon=/home/wangxing/Development/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;
7. 在Eclipse(版本3.3)上安裝hadoop插件
a) 複製 hadoop安裝目錄/contrib/eclipse-plugin/hadoop-0.20.203.0-eclipse-plugin.jar 到eclipse安裝目錄/plugins/ 下
b) 重啓eclipse,配置hadoop installation directory。
若是安裝插件成功,打開Window-->Preferens,你會發現Hadoop Map/Reduce選項,在這個選項裏你須要配置Hadoop installation directory。配置完成後退出。
c) 配置Map/Reduce Locations
在Window-->Show View中打開Map/Reduce Locations,在Map/Reduce Locations中新建一個Hadoop Location。在這個View中,右鍵-->New Hadoop Location。
在彈出的對話框中你須要配置Location name,如Hadoop,還有Map/Reduce Master和DFS Master。這裏面的Host、Port分別爲你在mapred-site.xml、core-site.xml中配置的地址及端口。
8. 在Eclipse(版本3.3以上)上安裝hadoop插件
a) 目錄結構:
eclipse目錄: /home/jay/Development/eclipse
hadoop源碼目錄: /home/jay/Development/hadoop-1.2.1
b) 導入 Hadoop-eclipse 插件工程:
1. 下載hadoop-1.2.1.tar.gz,並解壓縮到 /home/jay/Development/hadoop 目錄下
2. 在 Eclipse 中選擇 File—>Import—>General/Existing Projects into Workspace 導入Hadoop的Eclipse插件項目,選擇路徑爲:/home/jay/Development/hadoop-1.2.1/src/contrib/eclipse-plugin,而後點擊Finish,其默認的項目名稱是 MapReduceTools
c) 導入所需 jar 包:
在項目 MapReduceTools 中新建 lib 目錄,將 hadoop-1.2.1 下的 hadoop-core-1.2.1.jar(重命名爲hadoop.core.jar),及其 lib 目錄下的 commons-cli-1.2.jar、commons-lang-2.4.jar、commons-configuration-1.6.jar、jackson-mapper-asl-1.8.8.jar、jackson-core-asl-1.8.8.jar、commons-httpclient-3.0.1.jar 拷貝到該目錄。
d) 修改build-contrib.xml
1. 將 /home/jay/Development/hadoop-1.2.1/src/contrib/build-contrib.xml(與 eclipse-plugin 包在同一級目錄)拷貝到 MapReduceTools 項目目錄中(即/home/jay/Development/hadoop-1.2.1/src/contrib/eclipse-plugin目錄中)。
2. 修改 build-contrib.xml,注意路徑用 "/"
<!— 修改 hadoop 存放目錄—>
<property name="hadoop.root" location="/home/jay/Development/hadoop-1.2.1"/>
<!— 添加 eclipse 存放目錄—>
<property name="eclipse.home" location="/home/jay/Development/eclipse" />
<!— 添加 hadoop 版本—>
<property name="version" value="1.2.1"/>
e) 修改build.xml
<!— 1.修改 build-contrib.xml 的位置,去掉"../"—>
<import file="build-contrib.xml"/>
<!— 2.添加以下,不然提示"軟件包 org.apache.hadoop.fs 不存在"—>
<path id="hadoop-jars">
<fileset dir="${hadoop.root}/">
<include name="hadoop-*.jar"/>
</fileset>
</path>
<path id="classpath">
<pathelement location="${build.classes}"/>
<pathelement location="${hadoop.root}/build/classes"/>
<path refid="eclipse-sdk-jars"/>
<path refid="hadoop-jars"/> <!--這行爲添加的內容-->
</path>
<!— 3.修改並添加 jar 包拷貝,有些內容已存在,只添加不存在內容—>
<target name="jar" depends="compile" unless="skip.contrib">
<mkdir dir="${build.dir}/lib"/>
<copy file="${hadoop.root}/hadoop-core-${version}.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose=""true"/>
<copy file="${hadoop.root}/lib/commons-cli-1.2.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-lang-2.4.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-configuration-1.6.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar" todir="${build.dir}/lib" verbose="true"/>
<copy file="${hadoop.root}/lib/commons-httpclient-3.0.1.jar" todir="${build.dir}/lib" verbose="true"/>
<jar jarfile="${build.dir}/hadoop-${name}-${version}.jar" manifest="${root}/META-INF/MANIFEST.MF">
<fileset dir="${build.dir}" includes="classes/ lib/"/>
<fileset dir="${root}" includes="resources/ plugin.xml"/>
</jar>
</target>
f) 修改META-INF/MANIFEST.MF文件,在原有的Bundle-ClassPath處增長如下內容(有的已經存在就不用改了):
Bundle-ClassPath: classes/,
lib/hadoop-core.jar,
lib/commons-cli-1.2.jar,
lib/commons-httpclient-3.0.1.jar,
lib/jackson-core-asl-1.8.8.jar,
lib/jackson-mapper-asl-1.8.8.jar,
lib/commons-configuration-1.6.jar,
lib/commons-lang-2.4.jar
g.1) Eclipse中Ant 編譯:
1. 右鍵 MapReduceTools 工程,Properties—>Builders—>New—>Ant Builder
2. 修改New_Builder編輯界面中的內容
Name (見名知意): plugin_Builder
Buildfile (build.xml的位置): /home/jay/Development/hadoop-1.2.1/src/contrib/eclipse-plugin/build.xml
3. 修改完成保存
4. 點擊Project—>Build Project進行生成
編譯成功會輸出 BUILD SUCCESSFUL 則表示生成成功。
注:這步若是產生錯誤,可能的緣由有:
1) Build Path裏面*.jar包名可能不對,須要修改一下。
2)
g.2) 直接Ant 編譯:
1) # sudo apt-get install ant
2) # cd /home/jay/Development/hadoop-1.2.1/src/contrib/eclipse-plugin
3) # ant jar
h) 安裝插件
編譯結果在 /home/jay/Development/hadoop-1.2.1/build/contrib/eclipse-plugin 目錄下,將 hadoop-eclipse-plugin-1.2.1.jar 放入 /home/jay/Development/eclipse/plugins 目錄下,重啓 eclipse
i) 配置插件
1. 打開 map/Reduce Locations(經過新建一個Map/Reduce項目便可),或者經過Windows->Open Prespective->Other,將出現如下窗口,選擇Map/Reduce便可
而後Eclipse的界面佈局轉換成了Map/Reduce模式,並在IDE的下面出現如下界面
2. 右鍵 New Hadoop Location…,輸入 Location Name(見名知意),修改 Map/Reduce Master 和 DFS Master,User name 設置爲你啓動 hadoop 的名稱。
其中(這裏我使用的都是默認的端口)
Map/Reduce Master(Job Tracker的IP和端口,根據mapred-site.xml中配置的mapred.job.tracker來填寫)
DFS Master(Name Node的IP和端口,根據core-site.xml中配置的fs.default.name來填寫)
3. 設置 Advanced parameters
修改 hadoop.tmp.dir 爲你 hadoop 集羣中設置的目錄
4. 設置默認的hadoop安裝目錄
在Eclipse中點擊Windows->Preferences->Hadoop Map/Reduce,修改Hadoop installation directory爲Hadoop的安裝目錄
9. Eclipse中新建測試項目
a) File-->New-->Other-->Map/Reduce Project,項目名能夠隨便取,如WordCount。
複製 hadoop安裝目錄/src/example/org/apache/hadoop/examples/WordCount.java到剛纔新建的項目WordCount下,刪除WordCount.java首行package
b) 在本地新建word.txt,內容爲:
java c++ python cjava c++ javascript helloworld hadoopmapreduce java hadoop hbase
c) 經過hadoop的命令在HDFS上建立/tmp/workcount目錄,命令以下:
hadoop fs -mkdir /tmp/wordcount
經過copyFromLocal命令把本地的word.txt複製到HDFS上,命令以下:
hadoop fs -copyFromLocal /home/jay/Development/eclipseWorkspace/word.txt /jay/wordcount/word.txt
d) 運行項目
(1). 在新建的項目Hadoop,點擊WordCount.java,右鍵-->Run As-->Run Configurations
(2). 在彈出的Run Configurations對話框中,點Java Application,右鍵-->New,這時會新建一個application名爲WordCount
(3). 配置運行參數,點Arguments,在Program arguments中輸入你要傳給程序的輸入文件夾和你要求程序將計算結果保存的文件夾,如:
hdfs://localhost:9000/tmp/wordcount/word.txt hdfs://localhost:9000/tmp/wordcount/out
(4). 點擊Run,運行程序,過段時間將運行完成,等運行結束後,查看例子的輸出結果,使用命令:
hadoop fs -ls /tmp/wordcount/out
發現有兩個文件夾和一個文件,使用命令查看part-r-00000裏的運行結果:
hadoop fs -cat /tmp/wordcount/out/part-r-00000