1. 虚拟机 VMware workstation 10
2. 操作系统 Red hat linux 5.0 版本 32bit
3. jdk版本 jdk-8u40-linux-i586.rpm
4. Hadoop 版本 hadoop-2.6.0.tar.gz
5. 远程登录 客户端putty
6. ftp客户端 LeapFTP_3.1.0.50_XiaZaiBa.exe
本文在未联网的前提下部署hadoop,即需要用到的jdk,hadoop安装包均有ftp上传至虚拟机中,因此,首先要完成虚拟机上ftp服务器的安装及启动,由本地ftp客户端上传需要的安装包。
redhat linux系统自带jdk版本为1.4.2,需卸载,安装jdk1.8.0_40
root用户下,打开终端输入命令
# rpm -qa|grep gcj
显示内容其中包含下面两行信息
# java-1.4.2-gcj-compat-1.4.2.0-27jpp
# java-1.4.2-gcj-compat-devel-l.4.2.0-27jpp
卸载
# rpm -e java-1.4.2-gcj-compat-devel-l.4.2.0-27jpp
# rpm -e java-1.4.2-gcj-compat-l.4.2.0-27jpp
卸载其他自己安装的JDK就直接用rpm -e
#只有这里需要改为jdk1.8.0_40所在目录
set JAVA_HOME=/usr/java/j2sdk1.4.2_06
export JAVA_HOME
set PATH=$PATH:$JAVA_HOME/bin
export PATH
set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH
测试java -version
确认能否不输入口令就用ssh登录localhost:
$ ssh localhost
如果不输入口令就无法用ssh登陆localhost,执行下面的命令:
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
启动sshd服务 /etc/rc.d/init.d/sshd start
rpm -qa | grep ssh 可以看到系统中ssh安装包
rpm -ql openssh-3.5p1-6 查看该安装包安装信息(如安装路径,配置文件等)
ps -e | grep ssh 查看ssh服务有没有运行,如果有,可以看到类似以下内容:
2254 ? 00:00:00 sshd
这证明ssh已经在运行了,进程名为sshd
看下ssh服务的网络连接情况:
root]#netstat -ntlp
如果看到如下内容:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 22109/sshd
这说明sshd已经能够正常工作了
1)解压tar包
tar -zxvf hadoop-2.2.0.tar.gz -C /usr/hadoop
2)配置
所有配置文件 在目录 /usr/hadoop/hadoop-2.6.0/etc/hadoop
1、hadoop-env.sh
export JAVA_HOME=/opt/modules/jdk1.8.0_40
2、yarn-env.sh
export JAVA_HOME=/opt/modules/jdk1.8.0_40
3、mapred-env.sh
export JAVA_HOME=/opt/modules/jdk1.8.0_40
4、core-site.xml
5、hdfs-site.xml
6、yarn-site.xml
7、mapred-site.xml
3)hadoop启动
bin/hdfs dfs -ls / 显示文件夹
touch test.txt 创建文本文件test.txt
vim test.txt 编辑文件
bin/hdfs dfs -put ./test.txt /data01 把本地文件test放到文件夹data中
bin/hdfs dfs -ls /data01 显示文件夹data01中文件
bin/hdfs dfs -cat /data01/test.txt 显示文件内容
bin/hdfs dfs -text /data01/test.txt 显示文件内容
./sbin/start-all.sh 启动hadoop所有服务
查看相应的端口是否启动:netstat -ntpl
日志删除命令:logs目录下
rm -rf ./*.log 删除后缀为.log的日志
rm -rf ./*.out 删除后缀为.out的日志
错误
Java HotSpot(TM) Client VM warning:You have loaded library /usr/hadoop/hadoop-2.6.0/lib/native/libhadoop.s0.1.0.0 which might have disabled stack guard the VM will try to fix the stack guard now
it's highly recommended that you fix the library with execstack -c
采用方法如下:
在使用./sbin/start-dfs.sh或./sbin/start-all.sh启动时会报出这样如下警告:
Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/local/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
....
Java: ssh: Could not resolve hostname Java: Name or service not known
HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known
64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known
....
这个问题的错误原因会发生在64位的操作系统上,原因是从官方下载的hadoop使用的本地库文件(例如lib/native/libhadoop.so.1.0.0)都是基于32位编译的,运行在64位系统上就会出现上述错误。解决方法之一是在64位系统上重新编译hadoop,另一种方法是在hadoop-env.sh和yarn-env.sh中添加如下两行:
[plain] view plaincopy
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"
测试程序
bin/hdfs dfs -ls / 显示文件夹
往文件夹大data01上传
bin/hdfs dfs -mkdir /data01/input 在文件夹data01下创建input目录
touch hello.input 编写文件hello
vi hello.input 编译文件
bin/hdfs dfs -put ./hello.input /data01/input/ 把文件hello放到文件夹
bin/hdfs dfs -ls /data01/input/ 查看文件
bin/hdfs dfs -text /data01/input/hello.input 显示文件内容
bin/hdfs dfs -rm -r /data01/output/ 删除输出文件output
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /data01/input/ /data01/output/ 调用程序执行
运行完成 查看bin/hdfs dfs -ls /data01/output/
两行
------success 表示运行成功
运行结果
查看运行结果 bin/hdfs dfs -text /data01/output/part-r-00000
统计结果
sbin/hadoop-daemon.sh start historyserver 启动历史服务器
运行一个mapreduce程序
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar pi 2 10 求pi 2个map 10个样本点
2 10 156.516s pi 3.80000000000000000000000000
4 20 338.827s pi 3.20000000000000000000000000