参考文章:html
https://www.linuxidc.com/Linux/2016-02/128149.htmjava
https://blog.csdn.net/circyo/article/details/46724335node
本教程是使用编译hadoop的方式进行安装,缘由是下载的hadoop是32位,安装完后会有问题。 linux
编译方法:http://www.cnblogs.com/champaign/p/8952533.htmlweb
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统HDFS(Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。安全
对于Hadoop的集群来说,能够分红两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode做为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操做;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每一个从节点的TaskTracker共同组成的。主节点负责调度构成一个做业的全部任 务,这些任务分布在不一样的从节点上。主节点监控它们的执行状况,而且从新执行以前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交做业和配置信息以后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。服务器
从上面的介绍能够看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程当中提供了文件操做和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工做,并收集结果,两者相互做用,完成了Hadoop分布式集群的主要任务。架构
准备三台服务器:并发
IP | 用途 | 操做系统 | 主机名 |
172.18.29.151 | 主 | Centos 6.8 | master.hadoopo |
172.18.29.152 | 从1 | Centos 6.8 | slave1.hadoop |
172.18.29.153 | 从2 | Centos 6.8 | slave2.hadoop |
在三台服务器中建立相同帐号:hadoop 密码三台也一要致,最好不要与帐号相同app
修改三台服务器的hosts文件:
vi /etc/hosts 新增如下内容 172.18.29.151 master.hadoop 172.18.29.152 slave1.hadoop 172.18.29.153 slave2.hadoop
可使用 ping 命令测试三台机器的连通性
(1)JDK软件
下载地址:http://www.Oracle.com/technetwork/java/javase/index.html
(2)Hadoop软件
使用前面编译生成的安装包
若是你的Linux没有安装SSH,请首先安装SSH
yum -y install openssh-server
1)SSH基本原理
SSH之因此可以保证安全,缘由在于它采用了公钥加密。过程以下:
(1)远程主机收到用户的登陆请求,把本身的公钥发给用户。
(2)用户使用这个公钥,将登陆密码加密后,发送回来。
(3)远程主机用本身的私钥,解密登陆密码,若是密码正确,就赞成用户登陆。
2)SSH基本用法
假如用户名为java,登陆远程主机名为linux,以下命令便可:
$ ssh java@linux
SSH的默认端口是22,也就是说,你的登陆请求会送进远程主机的22端口。使用p参数,能够修改这个端口,例如修改成88端口,命令以下:
$ ssh -p 88 java@linux
注意:若是出现错误提示:ssh: Could not resolve hostname linux: Name or service not known,则是由于linux主机未添加进本主机的Name Service中,故不能识别,须要在/etc/hosts里添加进该主机及对应的IP便可:
linux 192.168.1.107
Master(NameNode | JobTracker)做为客户端,要实现无密码公钥认证,链接到服务器Salve(DataNode | Tasktracker)上时,须要在Master上生成一个密钥对,包括一个公钥和一个私钥,然后将公钥复制到全部的Slave上。当Master经过SSH链接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数以后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误以后就容许Master进行链接了。这就是一个公钥认证过程,其间不须要用户手工输入密码。
首先切换到hadoop用户,在Master节点上执行如下命令:
[root@SVR-29-151 ~]# su hadoop [hadoop@SVR-29-151 root]$ ssh-keygen -t rsa
运行后询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在"/用户名/.ssh"目录下。
[hadoop@SVR-29-151 root]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
查看下authorized_keys的权限,若是权限不对则利用以下命令设置该文件的权限:
[hadoop@SVR-29-151 root]$ cd ~/.ssh [hadoop@SVR-29-151 .ssh]$ ll
[hadoop@SVR-29-151 .ssh]$ chmod 600 authorized_keys
检查下面几行前面”#”注释是否取消掉:
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile %h/.ssh/authorized_keys # 公钥文件路径
设置完以后记得重启SSH服务,才能使刚才设置有效。
[root@SVR-29-151 ~]# service sshd restart
将port选项的值修改成下图
一样设置完以后记得重启SSH服务,才能使刚才设置有效。
[root@SVR-29-151 ~]# service sshd restart
[root@SVR-29-151 ~]# su hadoop [hadoop@SVR-29-151 root]$ ssh-copy-id hadoop@slave1.hadoop
而后测试是否无密码登陆其它机器成功
[hadoop@SVR-29-151 root]$ ssh slave1.hadoop
如图所示证实成功。
到此为止,咱们通过5步已经实现了从"Master.Hadoop"到"Slave1.Hadoop"SSH无密码登陆,下面就是重复上面的 步骤e 把 Slave2.Hadoop服务器进行配置。这样,咱们就完成了"配置Master无密码登陆全部的Slave服务器"。
全部的机器上都要安装JDK,如今就先在Master服务器安装,而后其余服务器按照步骤重复进行便可。安装JDK以及配置环境变量,须要以"root"的身份进行。
首先用root身份登陆"Master.Hadoop"后将jdk复制到"/usr/local/src"文件夹中,而后解压便可。查看"/usr/local/src"下面会发现多了一个名为"jdk-7u25-linux-i586"文件夹,说明咱们的JDK安装结束,进入下一个"配置环境变量"环节。
而后将jdk文件夹移动到”/usr/local/“目录下。
编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容以下:
# set java environment export JAVA_HOME=/usr/local/jdk1.8.0_171/ export JRE_HOME=/usr/local/jdk1.8.0_171/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
保存并退出,执行下面命令使其配置当即生效。
source /etc/profile 或 . /etc/profile
配置完毕并生效后,用下面命令判断是否成功。
java -version
从上图中得知,咱们肯定JDK已经安装成功
在其它服务器重复以上步骤
首先用root用户登陆"Master.Hadoop"机器,将下载的"hadoop-3.0.1.tar.gz"复制到/usr/local/src目录下。而后进入/usr/local/src目录下,用下面命令把文件解压,并将其重命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop
cd /usr/local/src tar –zxvf hadoop-3.0.1.tar.gz mv hadoop-3.0.1 ../hadoop cd .. chown –R hadoop:hadoop hadoop
最后在"/usr/local/hadoop"下面建立tmp文件夹.
并把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件,将如下语句添加到末尾,并使其生效(. /etc/profile):
# set hadoop path export HADOOP_INSTALL=/usr/local/hadoop
export PATH=${HADOOP_INSTALL}/bin:${HADOOP_INSTALL}/sbin:${PATH}
export HADOOP_MAPRED_HOME=${HADOOP_INSTALL}
export HADOOP_COMMON_HOME=${HADOOP_INSTALL}
export HADOOP_HDFS_HOME=${HADOOP_INSTALL}
export YARN_HOME=${HADOOP_INSTALLL}
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_INSTALL}/lib/natvie
export HADOOP_OPTS="-Djava.library.path=${HADOOP_INSTALL}/lib:${HADOOP_INSTALL}/lib/native"
source /etc/profile
首先在slave1.hadoop和slave2.hadoop的/usr/local中建立目录hadoop,而后将它的用户和组改成hadoop
[root@SVR-29-152 local]# mkdir hadoop [root@SVR-29-152 local]# chown hadoop:hadoop hadoop
而后重复前面的(3)、(4)步骤
咱们先在master.hadoop中进行配置,配置完成后再将hadoop复制到slave1和slave2中。
cd /usr/local/hadoop/etc/hadoop/ vi hadoop-env.sh // 修改JAVA_HOME export JAVA_HOME=/usr/local/jdk1.8.0_171
vi core-site.xml // 修改文件内容为如下 <configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.default.name</name> <value>hdfs://master.hadoop:9000</value> </property> </configuration>
备注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被删掉,必须从新执行format才行,不然会出错。
vi hdfs-site.xml // 修改文件内容为如下
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>hadoop-cluster1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master.hadoop:50090</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
vi mapred-site.xml
// 修改文件为如下内容
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>master.hadoop:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master.hadoop:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master.hadoop:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://master.hadoop:9001</value>
</property>
</configuration>
vi yarn-site.xml // 修改文件内容为如下 <configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master.hadoop</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master.hadoop:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master.hadoop:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master.hadoop:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master.hadoop:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master.hadoop:8088</value>
</property>
</configuration>
注意:使用hadoop帐号
scp -r /usr/local/hadoop hadoop@slave1.hadoop:/usr/local/
scp -r /usr/local/hadoop hadoop@slave2.hadoop:/usr/local/
[hadoop@SVR-29-151 hadoop]$cd /usr/local/hadoop/etc/hadoop [hadoop@SVR-29-151 hadoop]$ vi workers // 将如下内容写入 slave1.hadoop slave2.hadoop
// 在Master主机上输入如下指令(使用hadoop用户)
[hadoop@SVR-29-151 hadoop]$ hdfs namenode -format
[hadoop@SVR-29-151 hadoop]$ start-dfs.sh
结果以下图:
[hadoop@SVR-29-151 hadoop]$ start-yarn.sh
[hadoop@SVR-29-151 hadoop]$ jps
master中的结果:
slave中的结果:
web管理页面:http://172.18.29.151:8088/cluster