最近在整理资料的时候,看到刚开始学hadoop 的安装文档,本来写的很详细,每一步其实都截图,直接从文档中copy 过来所有的图片都没有了,排版样式都比较混乱了, 没办法编辑器老火,希望对大家有帮助!hadoop 每一个配置文件的很多参数详解 后面上传。
因为内容不止下面这一部分,后面上传一个文件吧
环境:CentOS6.6
hadoop版本:hadoop-2.7.3.tar.gz
安装目录:
root root_71
IP规划
hadoop01: 192.168.1.71 (master ) hadoop-server-01 root root_71
hadoop02: 192.168.1.72 (slave01) hadoop-server-02root root_72
hadoop03: 192.168.1.73 (slave02)hadoop-server-03
hadoop 集群中通讯端口众多 ,没有添加端口 一定要注意关闭防火墙
三台主机同时操作:
1. 配置主机名和ip 映射
2. 安装jdk
3. 创建hadoop用户
4. 配置ssh 免密登陆
5. 安装hadoop
l 先配置好一台服务器,修改好hadoop相关文件, 然后scp 到其他两台服务器上
scp -r /home/hadoop/hadoop-2.7.3 hadoop02:/home/hadoop/
如果第一台服务器 运行过,那么就会在我们配置的hadoop 临时目录tmp 中生 成一些数据,里面有些数据是用来标识当前hadoop 的相关信息,需要删除其他机器上的tmp 信息 ,不然无法组建集群
# rm -rf /home/hadoop/hadoop-2.7.3/tmp
l 配置主节点上的salves
如果不配置salves,单独去每台机器 也可以加入集群,但是比较麻烦,配 置主节点上的salves 后,在主节点上启动的时候会自动去启动从节点相关服务 进程
vi salves
加入所有节点
hadoop01
hadoop02
hadoop03
这三台上面都会启动datanode 同时在主节点上启动namenode,如果只想在从节点上启动datanode ,不要加入hadoop01 即可
然后启动 每次都要sbin 目录比较麻烦 ,可以把这个目录配置当环境变量path 中,配置hadoop 环境变量
vi /etc/profile
export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
在path 后面加上
exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin: $HADOOP_HOME/sbin
让环境变量生效
source /etc/profile
当前集群如果还想加入一台salve 只需要从一台服务器拷贝过去(或者重新配置),删除相关信息 修改主节点的salves 文件 使用手动启动方式handoop-daemon.sh 指定启动新服务器,就可以自动加入集群了
所以handoop 在线自动扩容非常简单,扩容的同时,集群服务不用停。
一.配置主机名和ip 映射
1.1配置hostname
192.168.1.71
# sudo vi/etc/sysconfig/network
HOSTNAME=hadoop01
192.168.1.72
# sudo vi /etc/sysconfig/network
HOSTNAME=hadoop02
192.168.1.73
# sudo vi/etc/sysconfig/network
HOSTNAME=hadoop03
1.2 修改hosts文件
主节点
# sudo vi/etc/hosts
127.0.0.1 localhost
192.168.1.71 hadoop01
192.168.1.72 hadoop02
192.168.1.73 hadoop03
如果不配置这个 到时候ssh copy 会找不到主机名
从节点 至少需要把主节点的 加入 因为以后的配置 用到hadoop01 没有用ip
192.168.1.72
127.0.0.1 localhost
192.168.1.71 hadoop01
192.168.1.72 hadoop02
192.168.1.73 hadoop03
192.168.1.73
127.0.0.1 localhost
192.168.1.71 hadoop01
192.168.1.72 hadoop02
192.168.1.73 hadoop03
重启
# su root
# reboot
关闭防火墙
# service iptablesstop
or
# chkconfigiptables off
二.创建用户
三台服务器 都要执行 用户名:hadoop 密码:root
# useradd hadoop
更改hadoop用户的密码为root
# passwd hadoop
为了方便,将hadoop加入root用户组,也可以独创建一个用户组
操作方法:先以root身份登录,密码是root_71
# su root
# usermod -g roothadoop
执行完后hadoop即归属于root组了,查看
# id hadoop
查看输出验证一下,如果看到类似下面的输出:
uid=502(hadoop)gid=0(root) 组=0(root)
三.安装jdk
不用openjdk
查看是否已经安装jdk
rpm -qa | grep jdk
创建目录
# mkdir/usr/local/java
上传jdk jdk1.7.0_45.tar.gz 到/usr/local/java 目录
安装jdk
# tar -zxvfjdk1.7.0_45.tar.gz
# mvjdk1.7.0_45 /usr/local/java/jdk1.7
使用root 用户配置环境变量
# su root
# vi /etc/profile
在文件最后面加入
exportJAVA_HOME=/usr/local/java/jdk1.7
exportJRE_HOME=/usr/local/java/jdk1.7/jre
exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
exportPATH=$PATH:$JAVA_HOME/bin
使环境变量生效
# source/etc/profile
# java -version
四. 配置SSH 免密登录
hadoop工作时,各节点要相互通讯,正常情况下linux之间通讯要提供用户名、密码(目的是保证通讯安全),如果需要人工干预输入密码,显然不方便,做这一步的目的,是让各节点能自动通过安全认证,不影响正常通讯。
linux知识点 一般远程登录一台主机
ssh hadoop01
exit
由发起方生成秘钥 ,也就是主动登录方,这里就是主节点操作:
简要版配置
192.168.1.71
1. 生成秘钥
# su hadoop
# cd /home/hadoop
# ssh-keygen
后面全部enter
.ssh 目录(是一个隐藏目录 看不到)里面会有二个文件id_rsa(私钥) , id_rsa.pub(公钥)
2.拷贝到其他需要免密登录的主机上去
本机也是需要免密登录的。
ssh-copy-id hadoop01
hadoop02 是要免密登录的主机 的主机名
ssh-copy-id hadoop02
ssh-copy-id hadoop03
如果找不到主机名 就是上面的hosts 文件没有配置
或者以下错误 是没有先执行 ssh-copy-id hadoop01
3.测试 (ip 或者主机名)
# ssh hadoop02
就不需要输入秘密了
# exit
五.安装hadoop
/home/hadoop
# suhadoop
# cd/home/hadoop
# tar -zxvf hadoop-2.7.3.tar.gz
hadoop环境变量(选配)每台机器都配置
# su root
# vi /etc/profile
exportHADOOP_HOME=/home/hadoop/hadoop-2.7.3
在path 后面加上
exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
share 下面的 doc 可以删除掉
配置hadoop相关文件
可以在本地配置好后直接上传,当前配置信息及其简单,
一共需要修改七个文件:
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
$HADOOP_HOME/etc/hadoop/yarn-env.sh
$HADOOP_HOME/etc/hadoop/core-site.xml
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
$HADOOP_HOME/etc/hadoop/mapred-site.xml
$HADOOP_HOME/etc/hadoop/yarn-site.xml
$HADOOP_HOME/etc/hadoop/slaves
1. hadoop-env.sh
# vi /home/hadoop/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
找到下面这行的位置,改成(jdk目录位置,大家根据实际情况修改)
export JAVA_HOME=/usr/local/java/jdk1.7
另外 hadoop-env.sh中 , 建议加上这句:(暂时不加)
exportHADOOP_PREFIX=/home/hadoop/hadoop-2.7.3
2. yarn-env.sh (暂时不配置)
vi /home/hadoop/hadoop-2.7.3/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_51
选配:
yarn 配置scheduler
yarn的Scheduler机制,由yarn-site.xml中的配置参数指定:
<name>yarn.resourcemanager.scheduler.class</name>
默认值为:
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.CapacityScheduler</value>
3、core-site.xml修改:
vi /home/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.7.3/tmp</value>
</property>
</configuration>
第一个参数:配置 hadoop 使用什么dfs , value 为hdsf地址是hadoop01 服务器上的文件系统
第二个参数:hadoop 运行临时文件存放路径
注:tmp 目录如不存在,则先mkdir手动创建 测试发现可自动创建
window 上开发过程中找不到hadoop01
所有节点可以改为:
<value>hdfs://192.168.1.71:9000</value>
或者window 修改ip hostname 的映射
4、hdfs-site.xml
vi /home/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.datanode.http.address</name>
<value>192.168.1.71:50075</value>
</property>
</configuration>
注:dfs.replication表示数据副本数,一般不大于datanode的节点数,默认是3
选配:以下内容 不配置 默认也是这样的
<property>
<name>dfs.datanode.ipc.address</name>
<value>0.0.0.0:50020</value>
</property>
hadoop web 访问地址
<property>
<name>dfs.datanode.http.address</name>
<value>0.0.0.0:50075</value>
</property>
5、mapred-site.xml
当前只有一个mared-site.xml.template 文件
# cp mapred-site.xml.templatemapred-site.xml
# vi /home/hadoop/hadoop-2.7.3/etc/hadoop/mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置mapreduce 在yarn平台上执行, hadoop中yarn管理和分配资源
6.yarn-site.xml
vi /home/hadoop/hadoop-2.7.3/etc/hadoop/yarn-site.xml
<property>
<name>yarn.resourcemanager.hosename</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
hadoop01 可以改成 192.168.1.71
全部配置成ip 便于其他地方访问,但是不建议 还是用主机名,因为主机ip 一旦变换 所有的配置都需要修改
resourcemanager是yarn 的主进程,nodemangger是从节点进程
加入以下配置 ,访问yarnweb 界面正常
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.1.71:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.1.71:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.1.71:8031</value>
</property>
7.savles
当前只是把本机加入到从节点中, 等把hadoop 拷贝到从节点 需要修改
#cp /home/hadoop/hadoop-2.7.3/etc/hadoop/slaves/home/hadoop/hadoop-2.7.3/etc/hadoop/slaves.bak
# vi /home/hadoop/hadoop-2.7.3/etc/hadoop/slaves
hadoop01
只是加入了本机
当前hadoop 已经配置完成,可以先测试下本机是否启动成功,启动可以参考第六点启动脚本
8. 从主节点拷贝hadoop 文件到两个从节点上
因为配置了ssh免密登录 所以不需要输入密码
# scp -r/home/hadoop/hadoop-2.7.3 hadoop02:/home/hadoop/
# scp -r /home/hadoop/hadoop-2.7.3 hadoop03:/home/hadoop/
如果没有配置ssh免密登录
如下操作: 需要加上用户名
# scp -r/home/hadoop/hadoop-2.7.3 hadoop@hadoop02:/home/hadoop/
# scp -r /home/hadoop/hadoop-2.7.3 hadoop@hadoop03:/home/hadoop/
注:如果第一台服务器运行过,那么就会在配置的hadoop 临时目录tmp 中生成一些数据,里面有些数据是用来标识当前hadoop的相关信息,需要删除其他机器上的tmp 信息 ,不然无法组建集群
192.168.1.72
# rm -rf /home/hadoop/hadoop-2.7.3/tmp
rm -rf /home/hadoop/hadoop-2.7.3/logs
192.168.1.73
# rm -rf /home/hadoop/hadoop-2.7.3/tmp
rm -rf /home/hadoop/hadoop-2.7.3/logs
修改主节点salves 配置文件
加入从节点信息,如果不想本机上启动datanode 就不加入hadoop01
# vi /home/hadoop/hadoop-2.7.3/etc/hadoop/slaves
hadoop01
hadoop02
hadoop03
加入此从节点后在主节点上启动 ,hadoop 会自动启动从节点上的相关进程
注:两个从节点修改
hdfs-site.xml
vi /home/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.datanode.http.address</name>
<value>0.0.0.0:50075</value>
</property>
</configuration>
六.启动与停止hadoop
hadoop 里面三个重要组成部分 hdsfmapreduce yarn,需要启动hdsf 和yarn
mapredue 只是开发好后,上传后在yarn 上去执行就行
同时hdsf 和yarn 是没有耦合在一起的两个任意一个启动与不启动 相互不影响
1.格式化namenode (格式化hdsf )
# cd /home/hadoop/hadoop-2.7.3/bin
老版本如下格式化
# ./hadoop namenode –format
现在使用如下格式化:
# ./hdfs namenode -format
查看tmp 文件下面的文件
注:如果是第二次格式化 请先删除tmp 目录不然会引发错误
2.手动启动
# cd /home/hadoop/hadoop-2.7.3/sbin
2.1启动namenode
# ./hadoop-daemon.shstart namenode
查看namenode 进程 是否启动成功
# jps
2.2 启动datanode 和sencondarynamenode
# ./hadoop-daemon.sh start datanode
# jps
# ./hadoop-daemon.sh start secondarynamenode
# jps
查看进程
# netstat -nltp
9000 :内部通讯端口
50070:web 页面访问端口
如果打不开下面地址 请关闭防火墙
2.3启动yarn 里面相关的服务进程
yarn 主进程
./yarn-daemon.shstart resourcemanager
./yarn-daemon.sh start nodemanager
jps
3.自动化脚本启动
3.1 启动hdfs
cd /home/handoop/hadoop-2.7.3/sbin
./start-dfs.sh
3.2 启动yarn
./start-yarn.sh
以上的启动可以使用一个命令全部启动
./start-all.sh
4.停止hadoop
# cd/home/handoop/hadoop-2.7.3/sbin
# ./stop-dfs.sh
# ./stop-yarn.sh
或者用
./stop-all.sh
七. hadoop集群动态扩容
当前集群如果想加入一个salve节点, 只需要从一台服务器拷贝过去(或者重新安装),删除相关信息,修改主节点的salves 文件,使用手动启动方式 handoop-daemon.sh 指定启动新服务器, 就可以自动加入集群了
所以handoop 在线自动扩容非常简单,扩容的同时,集群服务不用停
如果要加入datanode 只需要在新的从节点启动 datanode
# cd /home/hadoop/hadoop-2.7.3/sbin
# ./hadoop-daemon.shstart datanode