
搭建hadoop环境
1、解压Hadoop的安装包,解压到modules文件夹中。(安装包下载地址:http://archive.apache.org/dist/hadoop/core/hadoop-2.7.2/)
$ tar -zxf /softwares/installations/hadoop-2.7.2.tar.gz -C /modules/
查看hadoop是不是64位:
在hadoop-2.7.2/lib/native 下,执行file libhadoop.so.1.0.0
2、删除/home/admin/modules/hadoop-2.7.2/etc/hadoop目录下,cmd文件
$ rm -rf *.cmd
重命名文件
$ mv mapred-site.xml.template mapred-site.xml
3、配置文件:/home/admin/modules/hadoop-2.7.2/etc/hadoop
配置结果:
Linux01 : namenode、datanode、nodeManager
Linux02 : resourceManager、datanode、nodeManager
Linux03 : datanode、nodeManager
evn文件:把JAVA_HOME 环境变量改为,实际路径
hadoop-env.sh
修改# export JAVA_HOME=$JAVA_HOME
为:export JAVA_HOME=/home/admin/modules/jdk1.8.0_191
mapred-env.sh
修改# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
为:export JAVA_HOME=/home/admin/modules/jdk1.8.0_191
yarn-env.sh
修改# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
为:export JAVA_HOME=/home/admin/modules/jdk1.8.0_191
site文件:(参考官网文档:https://hadoop.apache.org/docs/r2.7.2/)
core-site.xml
在https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/core-default.xml中,
fs.defaultFS 是用来配置namenode的路径的,是namenodeRPC通信地址。value:hadf://linux01:8020
RPC是跨进程通信协议
hadoop.tmp.dir是用来配置文件最终存储位置。value:haoop根目录/hoadoop-data
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://linux01:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/admin/modules/hadoop-2.7.2/hadoop-data</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!-- 指定数据冗余份数,默认3份,会占用磁盘空间 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 关闭权限检查,非hadoop用户不可以操作hadoop集群 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!-- 配置namenode,减少namenode的压力 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>linux03:50090</value>
</property>
<!-- namenode网页地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>linux01:50070</value>
</property>
<!-- 浏览hdfs的方式,一种是webhdfs,一种格式https -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 配置mapreduce的历史服务端口,产生的日志服务 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>linux01:10020</value>
</property>
<!-- 配置mapreduce的历史服务页面端口,产生的日志服务 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>linux01:19888</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- 是否允许调度mapreduce的shuffle过程 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 配置mapreduce到linux02 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>linux02</value>
</property>
<!-- -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!-- -->
<property>
<name>yarn.log.server.url</name>
<value>http://linux01:19888/jobhistory/logs/</value>
</property>
</configuration>
slaves文件:配置三台从节点,配置三台虚拟机的名称
linux01
linux02
linux03
配置datanode和nodeManager从节点
4、分发,将hadoop安装包,分发到linux02、Linux03(在modules目录,执行)
scp -r hadoop-2.7.2/ linux02:/home/admin/modules
scp -r hadoop-2.7.2/ linux03:/home/admin/modules
说明:scp 命令是跨服务器复制文件。
5、格式化namenode (在hadoop的根目录下执行)
linux01: bin/hdfs namenode -format
6、启动服务,(在hadoop根目录执行)
HDFS:
linux01:$ sbin/start-dfs.sh
相当于:
$ sbin/hadoop-daemon.sh start namenode 开namenode的命令
$ sbin/hadoop-daemon.sh start datanode 开namenode的命令
YARN: (在resourceManager所在的机器上启动)
linux02:$ sbin/start-yarn.sh
JobHistory:
linux01:$ sbin/mr-jobhistory-daemon.sh start historyserver
如果因为断电关系,造成启动过程中,发现NameNode已启动的提示。
处理方式:删除/tmp下namenode对应的pid文件,rm -rf /tmp/hadoop-namenode.pid
7、启动检测(如果无法访问,请在windows的hosts文件中,配置虚拟机名称及对应的ip)
浏览器访问:http://linux01:50070
检查概览overview下的安全模式safemode一定要关闭,如果是打开的,说明有问题,安全模式数据只能读取,不能写入。
datenode节点有三台服务器
utilties中输入hdfs根目录/
浏览器访问:http://linux02:8088
8088是默认端口。点击左侧Notes选项,查看三台服务器的noteManager是否已经是Running状态,在判断资源是否不足。
判断集群是否开启正确,输入命令 jps
说明:jps是查看所有java进程的命令
8、测试成功后,配置工具脚本
系统变量与用户变量
使用xshell开启一个远程回话时,linux01 SSH linux02 默认加载用户变量配置文件,不会加载系统变量。
/etc/profile (系统变量)
/home/admin/.bash_profile (用户变量)
/home/admin/.bashrc (用户变量)
执行命令,配置系统变量中的环境变量到用户变量配置文件中:(三台linux都执行)
$ cat /etc/profile >> .bashrc (在/home/admin下执行,把profile中内容,追加到.bashrc)
编写shell脚本,查看三台服务器的jsp状态:
#!/bin/bash
# admin为用户名。
for i in admin@linux01 admin@linux02 admin@linux03
do
echo "=============$i================"
ssh $i 'jps'
done
编写shell脚本,在第一台及其执行脚本,启动hadoop所有节点:
#!/bin/bash
#HDFS
modules/hadoop-2.7.2/sbin/start-dfs.sh
#YARN
ssh admin@linux02 modules/hadoop-2.7.2/sbin/start-yarn.sh
#JobHistory
modules/hadoop-2.7.2/sbin//mr-jobhistory-daemon.sh start historyserver