1 安装环境
Linux(RHEL6.4) hadoop(hadoop-2.6.5) JDK(jdk-8u121-linux-x64)
服务器IP |
服务器主机名 |
192.168.0.120 |
Master |
192.168.0.121 |
Slave1 |
192.168.0.122 |
Slave2 |
192.168.0.123 |
Slave3 |
2 服务器准备
2.1 修改服务器主机名
[root@master ~]# vi /etc/sysconfig/network
其他主机
2.2 SSH无密登录
[root@master ~]# ssh-keygen -t rsa
刚才都作甚了呢?主要是设置ssh的密钥和密钥的存放路径。 路径为~/.ssh下。
打开~/.ssh 下面有三个文件
authorized_keys,已认证的keys
id_rsa,私钥
id_rsa.pub,公钥 三个文件。
下面就是关键的地方了,(我们要做ssh认证。进行下面操作前,可以先搜关于认证和加密区别以及各自的过程。)
①在master上将公钥放到authorized_keys里。命令:
cat id_rsa.pub >> authorized_keys
②将master上的authorized_keys放到其他linux的root/.ssh目录下。
命令: scp authorized_keys slave1:root/.ssh
sudo scp authorized_keys 远程主机用户名@远程主机名或ip:存放路径。
④测试是否成功
ssh slave1输入用户名密码,然后退出,再次ssh host2不用密码,直接进入系统。这就表示成功了。
2.3 修改主机名映射
[root@master ~]# vi /etc/hosts
127.0.0.1 localhost
192.168.0.120 master
192.168.0.121 slave1
192.168.0.122 slave2
192.168.0.123 slave3
拷贝到其他主机
[root@master src]# scp /etc/hosts slave1:/etc/hosts
2.4 关闭防火墙
所有机器运行
[root@master src]# service iptables stop
[root@master src]# chkconfig iptables off
2.5 重启所有电脑
[root@master src]# shutdown -r now
3 上传jdk,hadoop并配置环境变量。
3.1 文件上传
通过xftp将文件上传到linux中。将文件放到/usr/local/src中,四个linux都要操作。
3.2 解压缩:
[root@master src]# tar -zxvf jdk-8u121-linux-x64.tar.gz
[root@master src]# tar -zxvf hadoop-2.6.5.tar.gz
安装到/usr/local/java /usr/local/hadoop目录中
[root@master src]# mv jdk1.8.0_121/ /usr/local/java
[root@master src]# mv hadoop-2.6.5 /usr/local/hadoop
3.3 设置环境变量
[root@master src]# vi temp
添加:
export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
[root@master src]# cat temp >> /etc/profile
[root@master src]# source /etc/profile
[root@master src]# scp temp slave1:/usr/local/src
[root@master src]# scp temp slave2:/usr/local/src
[root@master src]# scp temp slave3:/usr/local/src
3.4 每台从机运行
[root@slave1 src]# cat temp >> /etc/profile
[root@slave1 src]# source /etc/profile
4 修改hadoop配置文件
hadoop配置过程:要实现分布式环境,配置过程是最为重要的,
这里要涉及到的配置文件有7个:
/usr/local/hadoop/etc/hadoop/hadoop-env.sh
/usr/local/hadoop/etc/hadoop/yarn-env.sh
/usr/local/hadoop/etc/hadoop/slaves
/usr/local/hadoop/etc/hadoop/core-site.xml
/usr/local/hadoop/etc/hadoop/hdfs-site.xml
/usr/local/hadoop/etc/hadoop/mapred-site.xml
/usr/local/hadoop/etc/hadoop/yarn-site.xml
之后会分别介绍各个配置的的作用和配置关键
4.1 配置文件1:hadoop-env.sh
该文件是hadoop运行基本环境的配置,需要修改的为java虚拟机的位置。
故在该文件中修改JAVA_HOME值为本机安装位置(如,export JAVA_HOME=/usr/local/java)
[root@master hadoop]# vi hadoop-env.sh
4.2 配置文件2:yarn-env.sh
该文件是yarn框架运行环境的配置,同样需要修改java虚拟机的位置。
在该文件中修改JAVA_HOME值为本机安装位置(如,export JAVA_HOME=/usr/local/java)
[root@master hadoop]# vi yarn-env.sh
4.3 配置文件3:slaves
该文件里面保存所有slave节点的信息,以本篇为例
写入以下内容(hosts里从机的主机名):
Slave1
Slave2
Slave3
4.4 配置文件4:core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://Master:9000</value>
</property>
</configuration>
这个是hadoop的核心配置文件,这里需要配置的就这两个属性,fs.default.name配置了hadoop的HDFS系统的命名,位置为主机的9000端口;hadoop.tmp.dir配置了hadoop的tmp目录的根位置。这里使用了一个文件系统中没有的位置,所以要先用mkdir命令新建一下。
4.5 配置文件5:hdfs-site.xml
<configuration>
<property>
<name>dfs.http.address</name>
<value>Master:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
这个是hdfs的配置文件,dfs.http.address配置了hdfs的http的访问位置;dfs.replication配置了文件块的副本数,一般不大于从机的个数。
4.6 配置文件6:mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>Master:9001</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>20</value>
</property>
<property>
<name>mapred.reduce.tasks</name>
<value>4</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property><name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
这个是mapreduce任务的配置,由于hadoop2.x使用了yarn框架,所以要实现分布式部署,必须在mapreduce.framework.name属性下配置为yarn。mapred.map.tasks和mapred.reduce.tasks分别为map和reduce的任务数,至于什么是map和reduce,可参考其它资料进行了解。
其它属性为一些进程的端口配置,均配在主机下。
4.7 配置文件7:yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>Master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>Master:8088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name><value>Master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Master:8033</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
该文件为yarn框架的配置,主要是一些任务的启动位置
4.8 将配置好的hadoop复制到其他节点
[root@master etc]# scp -r hadoop/ slave1:/usr/local/hadoop/etc/
[root@master etc]# scp -r hadoop/ slave2:/usr/local/hadoop/etc/
[root@master etc]# scp -r hadoop/ slave3:/usr/local/hadoop/etc/
5 启动hdfs
[root@master etc]# start-dfs.sh
Master上的进程
Datanode上的线程
6 启动yarn
[root@master etc]# start-yarn.sh
此时在Master上面运行的进程有:namenode secondarynamenode resourcemanager
Slave1,Slave2,slave3上面运行的进程有:datanode nodemanager
7 检查启动结果
查看集群状态:./bin/hdfs dfsadmin –report
查看文件块组成: ./bin/hdfsfsck / -files -blocks
查看HDFS: http://192.168.0.120:50070(主机IP)
查看RM: http:// 192.168.0.120:8088(主机IP)
8 问题
8.1 通过hdfs api访问hadoop的权限问题
问题:
Exception“org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=bikun, access=WRITE, inode="/user":user:supergroup:drwxr-xr-x” !!
解决:
在配置文件“/usr/local/hadoop/etc/hadoop/hdfs-site.xml”中加入以下配置内容后,再重新启动hadoop。
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>