1. 实验环境
1.1 机器环境
三台Linux服务器
203.91.121.67 ngn67
203.91.121.73 ngn73
203.91.121.91 ngn91
1.2 软件环境
hadoop-2.5.2, jdk-1.8.0_45
1.3 环境配置
1.3.1网络环境配置
修改 /etc/hosts文件,在原有hostname后加上新的hostname。
203.91.121.67 ngn67 dataNode1
203.91.121.73 ngn73 dataNode2
203.91.121.91 ngn91 nameNode
配置机器之间的ssh免登陆
ssh免登陆的配置目的是方便hadoop集群之间的交流,否则集群之间的每次通信均需手动操作输入密码。
1)
在三台机器上分别建立hadoop账户,需要注意的是在账号建立时需要手动为账户添加sudo权限,具体做法如下:
使用visudo命令;
在文件末尾加入
hadoop ALL = (ALL) ALL
退出保存即可
2)
生成ssh密钥
在nameNode(主节点)上利用ssh工具生成密钥
ssh-keygen -t rsa
一路回车,最后会在当前用户的工作目录.ssh文件夹中生成两个文件,id_rsa与id_rsa.pub
这两个文件即生成的公钥
3)
添加公钥
cat id_rsa.pub >> authorized_keys
4)
上传密钥
将生成的authorized_keys文件上传到dataNode1和2的~/.ssh目录(或者上传id_rsa.pub过去再添加也行)。
5)在每个节点修改权限(注意每个节点都必须执行,如果不进行设置,在验证时,扔提示你输入密码)
用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
退出root登录,使用hadoop普通用户验证是否成功。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
6)修改SSH配置文件(nameNode节点执行)
用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。
vi /etc/ssh/sshd_config
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
重启sshd服务,使得配置生效
service sshd restart
修改/etc/ssh/ssh_config文件,将PasswordAuthentication no修改为yes,保存退出并重启ssh服务
重启SSH服务,使刚才设置有效
service ssh restart
ssh dataNode1
ssh dataNode2
1.3.2 软件安装
安装jdk1.8.0_45
1)
下载jdk
官方下载链接如下:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
或者使用我自己提供的网盘链接:
http://pan.baidu.com/s/1o622HmE
或者在服务器上使用命令(linux x64系统)
wget http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz
2)
解压到服务器指定目录
一般来说放在 /usr/lib/jvm/jdk目录下
3)
修改环境变量
修改/etc/profile文件,在文件末尾添加如下内容
#set Java Environment
export JAVA_HOME=/usr/lib/jvm/jdk/jdk1.8.0_45
export JRE_HOME=$JAVA_HOME/jre
export CLASSPAH=".:$JAVA_HOME/lib:$CLASSPATH:{JRE_HOME}/lib"
export PATH="$JAVA_HOME/bin:$PATH"
使用
4)
修改默认java程序
source /etc/profile
命令是修改生效(不用重启)
(从未安装过java的机器可以跳过这一步)
依次执行以下命令,部分内容根据自己的目录进行改变
sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_45/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.8.0_45/bin/javac 300
sudo update-alternatives --install /usr/bin/jar jar /usr/java/jdk1.8.0_45/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/java/jdk1.8.0_45/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/java/jdk1.8.0_45/bin/javap 300
sudo update-alternatives --config java
这一步很重要,在修改完环境变量后,实际上仍然未将链接指向新安装的java版本,需要使用update-alternatives命令来手动指定,否则,新安装的java程序不会被执行。
5)
检测
执行
java -version
检验,输出应该如下
2.集群安装
2.1 下载解压hadoop
在官方网站上下载hadoop文件至主节点
http://mirrors.ibiblio.org/apache/hadoop/common/hadoop-2.5.2/
或者直接使用wget
wget http://mirrors.ibiblio.org/apache/hadoop/common/hadoop-2.5.2/hadoop-2.5.2.tar.gz
下载完成后将hadoop文件解压到你想好的安装目录下。我是安装在~/目录中,因此,最后的hadoop根目录为~/hadoop-2.5.2。
2.2 配置hadoop环境变量
在/etc/profile文件末尾添加如下内容。
#set hadoop_env
export HADOOP_HOME=/home/hadoop/hadoop-2.5.2
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:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
使用source命令,使配置生效
source /etc/profile
2.3 配置hadoop
依次对$HADOOP_HOME/etc/hadoop中的以下文件进行修改
hadoop-env.sh
设置JAVA_HOME,位置为25行
export JAVA_HOME=/usr/lib/jvm/jdk/jdk1.8.0_45
yarn-env.sh
设置JAVA_HOME,位置为23行
export JAVA_HOME=/usr/lib/jvm/jdk/jdk1.8.0_45
core-site.xml
configuration标签中添加如下内容。
部分目录信息可以根据自己的配置调整
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.5.2/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://nameNode:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
hdfs-site.xml
configuration标签中添加如下内容。
<property>
<name>dfs.nameservices</name>
<value>hadoop-cluster1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>nameNode:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/hadoop-2.5.2/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/hadoop-2.5.2/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
mapred-site.xml
configuration标签中添加如下内容。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>nameNode:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>nameNode:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>nameNode:19888</value>
</property>
yarn-site.xml
configuration标签中添加如下内容
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>nameNode:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>nameNode:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>nameNode:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>nameNode:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>nameNode:8088</value>
</property>
slaves
在slaves文件中添加从节点。(希望增加更多节点时,在这里直接添加即可)
dataNode1
dataNode2
2.4 其他节点
在完成主节点的配置后,将整个文件夹拷贝到其他从节点的hadoop用户目录下即可。
2.5 启动hadoop集群
执行
hdfs namenode -format
命令,完成hdfs格式化。需要说明的是,此处的格式化并不是对文件系统,而是对hdfs的相关目录文件进行清理。
依次启动hdfs和yarn服务。
进入hadoop根目录下的sbin目录。
进入hadoop根目录下的sbin目录。
./start-dfs.sh
./start-yarn.sh
执行jps命令查看服务启动情况。
至此已经完成了全部的hadoop集群安装工作
用户可以通过浏览器方式访问hadoop集群
http://203.91.121.91:50070/ hdfs管理
http://203.91.121.91:8088/ map-reduce job管理
3. WordCount测试
1.dfs上创建input目录
hadoop fs -mkdir -p input
2.把hadoop目录下的README.txt拷贝到dfs新建的input里
hadoop fs -copyFromLocal README.txt input
3.运行WordCount
hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.5.2-sources.jar org.apache.hadoop.examples.WordCount input output
4.运行完毕后,查看单词统计结果
hadoop fs -cat output/*
注意:输出路径设置为output,如果该文件夹已经存在,先删除,否则报错
hadoop fs -rm -r output