本文详细介绍在虚拟机VMware中linux上单机部署hadoop-2.6.0的过程;假设虚拟机及linux系统已安装完成;本文从jdk的安装开始,直到完成Wordcount测试。
配置简介:
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客户端上传需要的安装包。
1.jdk安装
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 <javaXXXXX>
环境变量设置
根目录下:[root@promote /]#vi .bashrc
#只有这里需要改为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
2.ssh免密码登陆
确认能否不输入口令就用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已经能够正常工作了
3.putty乱码问题
打开putty主程序,选择window-〉Appearance-〉Font settings-〉Change...,选择Fixedsys字体在window-〉Appearance -〉Translation中,修改Received data assumed to be in which character set 中和Linux中的字符集,把Use font encoding改为UTF-8。
如果经常使用,把这些设置保存在session里面. 现在打开putty,登录成功后,在shell中输入:export LC_ALL='zh_CN.utf8' ,中文显示就正常了 。
4. hadoop-2.6.0配置测试
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
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-yarn.dragon.org:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.2.0/data/tmp</value>
</property>
5、hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
6、yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
7、mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3)hadoop启动
5. hadoop-2.6.0测试
启动方式1.逐一启动
2.分别启动dfs,yarn,如下
sbin/start-all.sh 启动所有进程 用jps查看
sbin/stop-all.sh 停止所有进程
3.全部启动,hadoop1.x使用,2.x中保留,但使用会报错
sbin/start-dfs.sh
sbin/start-yarn.sh
1、启动HDFS
NameNode、DataNode、SecondaryNameNode
* NameNode 格式化
bin/hdfs namenode -format --产生一个Cluster ID集群ID
* 启动NameNode
sbin/hadoop-daemon.sh start namenode
* 启动DataNode
sbin/hadoop-daemon.sh start datanode
* 启动SecondaryNameNode
sbin/hadoop-daemon.sh start secondarynamenode
2、启动YARN
ResourceManager、NodeManager
* 启动ResourceManger
sbin/yarn-daemon.sh start resourcemanager
* 启动NodeManager
sbin/yarn-daemon.sh start nodemanager
Web管理hadoop
namenode IP+端口号
namenode 地址:http://192.168.30.131:50070/
SecondaryNameNode 地址:http://192.168.30.131:50090/
yarn 地址:http://192.168.30.131:8088/
hadoop-2.6.0目录下 bin/hdfs dfs -mkdir /data01 在hdfs中新建文件data01 即可在浏览器文件系统中显示
日志文件
启动日志文件目录默认为 $HADOOP_HOME/logs
分析日志文件的格式log out
.log:通过log4j记录的,记录大部分应用程序的日志信息
.out:记录标准输出和标准错误日志,少量记录
日志文件命名规则
框架名称--用户名--进程名--主机名--日志格式后缀
hadoop-2.6.0目录下 bin/hdfs dfs 常用命令
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 <libfile>,or link it with -z noexecstack
采用方法如下:
在使用./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