环境搭建准备:(所有操作都是在root下)
主机两台,我没有采用虚拟机,建议使用最小化安装
1.jdk(每个节点都要配置)
去Java官网下后缀名为.tar.gz的包
使用FTP工具,或者rz命令进行上传
我放在了/opt/Software/Java 下
使用 tar -zxvf解压 最小化安装若没提示找不到这个命令 百度安装这个工具
编辑/etc/profile (也可以不在root 下,我只是测试用,防止之后权限出现问题)
在后边加上
export JAVA_HOME=/opt/SoftWare/Java/jdk1.8.0_152
export JRE_HOME=/opt/SoftWare/Java/jdk1.8.0_152/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
保存
检验:输入 source /etc/profile
回车后 输入: java -version
看是否打印Java版本信息,如果提示命令未找到,检查以上步骤
2.Hadoop下载
我分享的是2.7.5,别的版本可以去官网找
链接:https://pan.baidu.com/s/1GEZIiNP1kJPjHVucSa8Oow 密码:7k01
上传到虚拟机 在Software 下 创建Hadoop目录
解压
准备工作到此结束
集群搭建:
计划:
主机名 ip 进程
master 10.32.6.150 namenode resourcemanager
slave 10.32.6.227 datanode secondarynamenode
首先添加hosts 识别
注释掉开头两行 加上 # 后边写入 ip 和主机名
关闭防火墙
systemctl stop firewalld.service
关闭开机启动
systemctl disable firewalld.service
免秘钥
其实这里配置免秘钥是为了namenode 和 resourcemanager 与各个节点通信,所以只需要 这两个节点对自己和对其他节点的免秘钥,但是如果不对每台机器都进行对自己以及对其他机器的公钥分发,在从节点启动或是终止集群就会提示输入密码,我这里是两台机器看不出来区别,关于这点为什么更详细的解答,可以谷歌或者查看Hadoop源代码
2.7.5源代码 链接如下:链接:https://pan.baidu.com/s/1YWt2rcyiHncI5BMN0G7p7g 密码:4p5z
在每台机器都输入:
首先 cd ~/.ssh
ssh-keygen -t rsa -P '' 这点 就 ssh-keygen 也是可以的 关于ssh-keygen参考:http://killer-jok.iteye.com/blog/1853451
然后一路回车就行了
然后查看在.ssh文件夹下 是否有了这两个文件
然后 在每台机器输入
cp id_rsa.pub authorized_keys
最后将所有机器上的authorized_keys文件进行合并
在所有的从节点上都执行:cat ~/.ssh/authorized_keys | ssh root@master 'cat >> ~/.ssh/authorized_keys'
然后将master节点上的authorized_keys 分发到其他slave节点
scp ~/.ssh/authorized_keys root@slave1:~/.ssh/
然后测试
ssh slave1
显示这个则 完成,否则删除.ssh下所有文件从 ssh-keygen开始
安装Hadoop:(每个节点都要配置)
在/opt/Software/Hadoop下解压
修改环境变量
加入
export HADOOP_HOME=/opt/SoftWare/Hadoop/hadoop-2.7.5export HADOOP_LOG_DIR=$HADOOP_HOME/logsexport YARN_LOG_DIR=$HADOOP_LOG_DIRexport PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
保存
重新加载 source /etc/profile
修改Hadoop配置文件:
配置 /etc/hadoop/hadoop-env.sh
加入
export JAVA_HOME=/opt/SoftWare/Java/jdk1.8.0_152
配置/etc/hadoop/yarn-env.sh
同样加入
export JAVA_HOME=/opt/SoftWare/Java/jdk1.8.0_152
修改slaves文件
把从节点名称加进去
配置 core-site.xml
<!--在<configuration></configuration>中间添加一下内容-->
<property>
<name>fs.defaultFS</name><!--定义Hadoop Master的URI和端口-->
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name><!--hadoop的临时存储目录-->
<value>file:/opt/SoftWare/Hadoop/hadoop-2.7.5/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name><!--用作序列化文件处理时读写buffer的大小-->
<value>131702</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
配置hdfs-site.xml
<property><!--namenode节点数据存储目录-->
<name>dfs.namenode.name.dir</name>
<value>file:/opt/SoftWare/Hadoop/hadoop-2.7.5/hdfs/name</value>
</property>
<property><!--datanode数据存储目录-->
<name>dfs.datanode.data.dir</name>
<value>file:/opt/SoftWare/Hadoop/hadoop-2.7.5/hdfs/data</value>
</property>
<property><!--指定DataNode存储block的副本数量,不大于DataNode的个数就行,默认为3-->
<name>dfs.replication</name>
<value>1</value>
</property>
<property><!--指定secondarynamenode的http协议访问地址-->
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
<property><!--指定master的https协议访问地址-->
<name>dfs.namenode.secondary.https-address</name>
<value>10.32.6.150:50091</value>
</property>
<property><!--必须设置为true,否则就不能通过web访问hdfs上的文件信息-->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
配置 yarn-site.xml
<!-- Site specific YARN configuration properties -->
<property><!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle才能运行MapReduce程序-->
<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>
<property><!-- 对客户端暴露的地址。客户端通过该地址想ResourceManager提交应用程序,或是杀死应用程序等-->
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property><!-- 对ApplicationMaster暴露的访问地址,ApplicationMaster通过该地址向ResourceManager申请资源或是释放资源 -->
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property><!-- ResourceManager对NodeManager暴露的地址,NodeManager通过该地址向ResourceManager汇报心跳,领取任务等-->
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property><!-- ResourceManager 对管理员暴露的访问地址,管理员通过该地址向RM发送管理命令-->
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property><!-- 用户可通过该地址在浏览器中查看集群各类信息 -->
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property><!-- NodeManager 总的可用的物理内存。注意,该参数是不可修改的,一旦设置,整个运行过程不可动态修改。不过Apache已经在尝试将该参数做成可动态修改的-->
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
修改 mapred-site.xml
这个文件是不存在的 可以用 cp mapred-site.xml.template mapred-site.xml 该命令创建一个
然后添加:
<property><!--使用yarn运行mapreduce程序-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property><!--MapReduce JobHistory Server地址-->
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property><!--MapReduce JobHistory Server Web界面地址-->
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
到此 Hadoop配置文件全部结束,讲master上的Hadoop文件夹发送到各个节点对应位置
修改系统时间
格式化Hadoop
hdfs namenode -format
status 为0 表示成功 error 的话 上翻找错误
然后在 master start-all.sh 启动集群
完成后在各个节点检查
输入 jps
master :
slave1:
注:如果出现问题最好把 /hdfs/name /hdfs/data /tmp /log 下全部清空 并注意是所有节点的
如有问题,请指出