1、安裝JDK
1.1上傳
運用軟件FileZilla,將windows上的jdk壓縮包放到linux的root目錄下
1.2解壓jdk
#創建文件夾
mkdir /usr/java(不要掛在在“/”系統盤下)
#解壓
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /usr/java/(提前在/usr/目錄下創建一個java的文件夾)
1.3將java添加到環境變量中
vim /etc/profile
#在文件最后添加
export JAVA_HOME=/usr/java/jdk1.7.0_55
export PATH=$PATH:$JAVA_HOME/bin
#刷新配置
source /etc/profile
2、安裝Hadoop
2.1上傳hadoop安裝包
運用軟件FileZilla,將windows上的壓縮包放到linux的root目錄下
2.2解壓hadoop安裝包
在root目錄下
mkdir /cloud
#解壓到/cloud/目錄下
tar -zxvf hadoop-2.2.0.tar.gz -C /cloud/
2.3修改配置文件(5個)目錄 /cloud/hadoop-2.2.0/etc/hadoop
第一個:hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6
第二個:core-site.xml
<configuration>
<!-- 指定HDFS老大(namenode)的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://northbigpenguin:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲路徑 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/cloud/hadoop-2.2.0/tmp</value>
</property>
</configuration>
第三個:hdfs-site.xml
<configuration>
<!-- 設置hdfs副本數量 -->
<property>
<name>dfs.replication</name>
<value>1</value><!--默認是3個,這里改為一個-->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hdfs/data</value>
</property>
</configuration>
第四個:mapred-site.xml.template 需要重命名: mv mapred-site.xml.template mapred-site.xml
<configuration>
<!-- 通知框架MR使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--這個必須加載-->
<property>
<name>mapred.job.tracker</name>
<value>northbigpenguin:9001</value>
</property>
</configuration>
第五個:yarn-site.xml
<configuration>
<!-- reducer取數據的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>northbigpenguin</value>
</property>
</configuration>
3、將hadoop添加到環境變量
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.6
export HADOOP_HOME=/root/cloud/hadoop-2.2.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
完成過后部署一下,才能生效
source /etc/profile
4、格式化HDFS(namenode)第一次使用時要格式化
#過時但還可以使用:hadoop namenode -format
目錄/cloud/hadoop-2.2.0
hdfs namenode -format 使用這個(注:整個配置中此句子僅僅執行一次,否則會出很多錯誤)
注意:
(1)如果報錯:
-bash: hadoop: command not found
說明:
hadoop的路徑配置有誤。查看vim /etc/profile的export HADOOP_HOME=/root/cloud/hadoop-2.2.0(使用絕對路徑)
不知道絕對路徑:
進入/hadoop-2.2.0/bin 然后輸入pwd
5、啟動hadoop
5.1 初始化HDFS(格式化文件系統)
(1)查找命令:
which hadoop
which hdfs
(2)到hdfs相對的bin目錄下:
cd /root/Download/hadoop/hadoop-2.2.0/bin
(3)退到/hadoop-2.2.0所在目錄
hdfs namenode -format (hadoop namenode -format(過時了,但是可用))
5.2啟動hadoop
(1)進入目錄/root/cloud/hadoop-2.2.0/sbin
(2)先啟動HDFS(可以用.../sbin/start-all.sh但是需要多次輸入密碼)
(3)第二種啟動方法:
先啟動HDFS
../sbin
./start-dfs.sh
再啟動YARN
../sbin
./start-yarn.sh
資源無法訪問和stop錯誤都是重啟
/data/hdfs/data/current
(2)報錯:Error: Cannot find configuration directory:
進入vim /etc/profile
就把所有的路徑都配置進去
export JAVA_HOME=/usr/java/jdk1.6
export HADOOP_HOME=/root/cloud/hadoop-2.2.0
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH::$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
再次配置一下
source /etc/profile
6、然后關閉服務器
./stop-all.sh
重新啟動服務:
./start-all.sh
最后出現:
starting yarn daemons
starting resourcemanager, logging to /root/cloud/hadoop-2.2.0/logs/yarn-root-resourcemanager-northbigpenguin.out
localhost: starting nodemanager, logging to /root/cloud/hadoop-2.2.0/logs/yarn-root-nodemanager-northbigpenguin.out
這樣的字樣就是配置成功
7、驗證是否啟動成功
(1)數據傳輸成功驗證:
使用jps命令驗證
目錄/root/cloud/hadoop-2.2.0/sbin
下輸入:
jps
出現如下六個的文件為配置成功:
27408 NameNode
28218 Jps
27643 SecondaryNameNode
28066 NodeManager
27803 ResourceManager
27512 DataNode
在主節點執行jps,看到3個進程,分別是NameNode、SecondaryNameNode、JobTracker
在從節點執行jps,看到2個進程,分別是DataNode、TaskTracker
(2)網頁測試:
在這個文件中添加linux主機名和IP的映射關系(本機windows系統下)
C:\Windows\System32\drivers\etc\hosts
192.168.1.110(LInux的IP地址) localhost(linux主機名)
訪問:northbigpenguin:50070 ((hdfs的web頁面)
northbigpenguin:8088 (MR管理界面)
網頁測試不顯示網頁需要關閉防火牆
關閉防火牆
#查看防火牆狀態
service iptables status
#關閉防火牆
service iptables stop
#查看防火牆開機啟動狀態
chkconfig iptables --list
#關閉防火牆開機啟動
chkconfig iptables off
注意:
頁面訪問:
Live Nodes-->Browse the filesystem 需要配置本地連接否則會無法訪問
http://northbigpenguin:50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=/&nnaddr=localhostip:9000
點擊后跳轉到這個界面
頁面數據測試:
上傳文件到hadoop (文件是臨時的,服務器關閉,文件消失):
hadoop fs -put /root/Download/jdk-6u45-linux-x64.bin hdfs://northbigpenguin:9000/jdk
然后在界面可以看到:
http://northbigpenguin:50075/browseDirectory.jsp
命令行下載上傳的文件:
hadoop fs -get /root/Download/jdk-6u45-linux-x64.bin hdfs://northbigpenguin:9000/jdk
運行實例
(1)先在本地磁盤建立兩個輸入文件 file01和file02
$echo "Hello World Bye World" > file01
$echo "Hello Hadoop Goodbye Hadoop" > file02
(2)在hdfs中建立一個input目錄:$hadoop fs -mkdir input
(3)將file01和file02拷貝到hdfs中:
$hadoop fs -copyFromLocal /home/zhongping/file0* input
(4)執行wordcount:
$hadoop jar hadoop-0.20.2-examples.jar wordcount input output
(5)完成之后,查看結果
$hadoop fs -cat output/part-r-00000
NameNode
Jps
SecondaryNameNode
NodeManager
ResourceManager
DataNode關系和聯系
yarn負責資源的調度
ResourceManager(負責管理)是yarn的上一級
NodeManager(負責干活)(可以是一個,集群時是多個)是yarn的低一級
SecondaryNameNode 是hadoop1.0的解決HA(高可靠性)的方案
SecondaryNameNode不是NameNode的一個熱備(namenode壞了SecondaryNameNode不執行)
SecondaryNameNode是NameNode的助理(完成數據同步,但不是實時的)
hdfs
NameNode是hdfs的上一級
DataNode(負責存放數據)是hdfs的下一級
錯誤:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where
applicable
系統版本不兼容
部署Hadoop的集群環境為? 操作系統 CentOS 5.8??? hadoop版本為cloudera?? hadoop-0.20.2-cdh3u3
集群中設置支持gzip lzo壓縮后,在對壓縮文件進行讀取或者對輸入文件壓縮的時候要使用到hadoop的本地庫,本地庫的默認位置在
$HADOOP_HOME/lib/native/Linux-amd64-64?? (64位操作系統)
$HADOOP_HOME/lib/native/Linux-i386-32?? (32位操作系統)
文件夾中的libhadoop.so文件,就是hadoop的本地庫。
如果本地庫不存在,或者本地庫與當前操作系統的版本不一致的時候,會報下面的錯誤:
11/09/20 17:29:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java
classes where applicable
增加調試信息設置
(開啟:export HADOOP_ROOT_LOGGER=DEBUG,console
關閉:export HADOOP_ROOT_LOGGER=INFO,console)
$ export HADOOP_ROOT_LOGGER=DEBUG,console
$ hadoop fs -text /test/data/origz/access.log.gz
2012-04-24 15:55:43,269 WARN org.apache.hadoop.util.NativeCodeLoader: Unable to load native-hadoop library for your
platform... using builtin-java classes where applicable error libhadoop.so? /lib64/libc.so.6 required (libc 2.6)???
/usr/local/hadoop/lib/native/Linux-amd64-64?
說明系統中的glibc的版本和libhadoop.so需要的版本不一致導致
查看系統的libc版本?
# ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 11 Apr 24 16:49 /lib64/libc.so.6 -> libc-2.5.so
系統中的版本為2.5 將系統中的glibc升級為2.9
下載glibc wget? http://ftp.gnu.org/gnu/glibc/glibc-2.9.tar.bz2
下載glibc-linuxthreads wget http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.5.tar.bz2
解壓 $tar -jxvf glibc-2.9.tar.bz2 $cd glibc-2.9
$tar -jxvf ../glibc-linuxthreads-2.5.tar.bz2
$cd .. $export CFLAGS="-g -O2"
$./glibc-2.7/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include
--with-binutils=/usr/bin
$make
#make install
安裝編譯過程中需要注意三點:
1、要將glibc-linuxthreads解壓到glibc目錄下。
2、不能在glibc當前目錄下運行configure。
3、加上優化開關,export CFLAGS="-g -O2",否則會出現錯誤
安裝完后,可以查看ls -l /lib/libc.so.6已升級
lrwxrwxrwx 1 root root 11 Apr 24 16:49 /lib64/libc.so.6 -> libc-2.9.so
測試本地庫是否升級
$ export HADOOP_ROOT_LOGGER=DEBUG,console
$ hadoop fs -text /test/data/origz/access.log.gz
12/04/25 08:54:47 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev
6bb1b7f8b9044d8df9b4d2b6641db7658aab3cf8]
12/04/25 08:54:47 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
12/04/25 08:54:47 INFO util.NativeCodeLoader: Loaded the native-hadoop library 12/04/25 08:54:47 INFO zlib.ZlibFactory:
Successfully loaded & initialized native-zlib library
12/04/25 08:54:47 DEBUG fs.FSInputChecker: DFSClient readChunk got seqno 0 offsetInBlock 0 lastPacketInBlock false
packetLen 132100
可以看到將glibc升級后不再報錯,已經成功加載本地庫
功能練習一:
下載文件命令
hadoop fs -get hdfs://northbigpenguin:9000/jdk1.6 /root/jdk1.6
上傳文件命令
hadoop fs -put jdk-6u45-linux-x64.tar hdfs://northbigpenguin:9000/jdk1.6
上傳文件需要是rar文件,沒有自己創建一個
(1)下載一個jdk。無論什么壓縮包,window是本地解壓后,打包成.zip文件
(2)將該文件上傳到linux系統
(3)系統內解壓
unzip jdk-6u45-linux-x64.zip
(4)生成文件夾 jdk-6u45-linux-x64
(5)將該文件夾壓縮成tar
tar -cvf jdk-6u45-linux-x64.tar jdk-6u45-linux-x64
(6)上傳到linux的hadoop上
(7)下載文件
(8)linux中解壓
tar -xzvf jdk1.6
不好使就用
tar -xvf jdk1.6(出現錯誤用這個)
功能練習二:
統計單詞數量的上傳文件
進入目錄:
/root/cloud/hadoop-2.2.0/share/hadoop/mapreduce
vi wordCount.txt
寫入 單詞十二個
HELLO WORLD
HELLO BABY
HELLO a
HELLO B
HELLO C
HELLO D
wc wordCount.txt
得到:
6(行) 12(單詞數) 55(字符) wordCount.txt
上傳到服務器
hadoop fs -put wordCount.txt hdfs://northbigpenguin:9000/wordCount
查看是否上傳成功:
hadoop fs -ls hdfs://northbigpenguin:9000/
目錄/mapreduce下
執行:
hadoop jar hadoop-mapreduce-examples-2.2.0.jar wordcount hdfs://northbigpenguin:9000/wordCount hdfs://northbigpenguin:9000/Cout
hadoop jar(命令) jar包 命令(統計單詞數量) 輸入位置 輸出位置
Map-Reduce Framework
Map input records=6
Map output records=12
Map output bytes=103
Map output materialized bytes=73
Input split bytes=102
Combine input records=12
Combine output records=7
Reduce input groups=7
Reduce shuffle bytes=73
Reduce input records=7
Reduce output records=7
Spilled Records=14
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=370
CPU time spent (ms)=3150
Physical memory (bytes) snapshot=315904000
Virtual memory (bytes) snapshot=1650171904
Total committed heap usage (bytes)=136122368
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=55
File Output Format Counters
Bytes Written=39
成功標志
8、配置ssh免登陸
遠程創建文件
ssh 10.129.205.237 mkdir /root/xiaobaitu
兩台機器都需要配置ssh才能執行遠程連接:
(1)基於 RedHat / CentOS 的系統 :
下載安裝(完成后會裝在root目錄下:執行命令ls -a查看隱藏文件.ssh):
# yum install openssh-server openssh-clients
OpenSSH Server安裝完成后在/etc/init.d目錄下應該會增加一個名為sshd的服務。
chkconfig --list sshd
手動啟動sshd服務,方便后面客戶端的連接:
$ /etc/init.d/sshd start
(2)方法二:安裝SSH:
yum install ssh
啟動SSH:
service sshd start
設置開機運行:
chkconfig sshd on
1、創建:
mkdir /root/.ssh
2、生成ssh免登陸密鑰
進入到我的home目錄
cd ~/.ssh
3、生產密鑰
ssh-keygen -t rsa (四個回車)
執行完這個命令后,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
將公鑰拷貝到要免登陸的機器上
cp id_rsa.pub authorized_keys或者ssh-copy-id northbigpenguin
或者
將公鑰拷貝到要免登陸的機器上
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
注意:
公鑰必須叫authorized_keys,系統默認的
登錄本機不輸密碼
ssh northbigpenguin
退出登錄
exit
查看公鑰
cat ~/.ssh
單項連接:
拷貝自己的公鑰到其他你想不用密碼登錄的機器上
ssh-copy-id 10.129.205.237(想要免密碼的機器)
想訪問別人,就是考自己的密碼給別人,反之考別人的密碼給自己
此時會彈出對話框
root@10.129.205.237's password:
輸入對方的密碼
會返回:
Now try logging into the machine, with "ssh '10.129.205.237'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
表示成功
ssh 10.129.205.237 變成別人機器登錄
exit退出變回自己機器
雙向連接:
互相有對方的公鑰
另一台機器的 ssh-keygen -t rsa 生成了id_rsa(私鑰)、id_rsa.pub(公鑰)外加authorized_keys(第一台機器的公鑰)
authorized_keys是設置的別名以防止重復覆蓋
所以此時只需 執行
ssh-copy-id 10.129.205.250(另一台機器的ip)
然后輸入器確認和密碼
Are you sure you want to continue connecting (yes/no)? yes
root@10.129.205.250's password:
測試連接:
ssh 10.129.205.250
