在虚拟机中搭建Hadoop环境
一、Hadoop安装前的准备工作
1、安装centOS操作系统
安装过程省略
安装结束后进入到系统中
新建两个目录
·mkdir /tools 工具目录
mkdir /training 安装目录
2、安装JDK
上传jdk到tools目录下
tar -zvxf jdk-7u80-linux-x64.tar.gz -C /training/
配置环境变量:
vi ~/.bash_profile
添加如下信息
export JAVA_HOME=/training/jdk1.8.0_171
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin;
让环境变量生效
source ~/.bash_profile
验证jdk是否安装成功
java -version
3、关闭防火墙(CentOS7下)
systemctl stop firewalld.service
systemctl disable firewalld.service
4、配置主机名(CentOS7下)
hostnamectl --static set-hostname niit
说明:--static 参数代表永久生效
二、分析Hadoop的目录结构
安装hadoop:
上传hadoop-2.7.3.tar.gz
tar -zvxf hadoop-2.7.3.tar.gz -C /training/
cd /training/hadoop-2.7.3/
配置环境变量:
vi ~/.bash_profile
添加如下信息:
export HADOOP_HOME=/training/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
说明:$PATH 类似于window下的Path本身的东西,:后面表示追加信息
让环境变量生效:
source ~/.bash_profile
验证是否生效:
执行:hdfs 有相关信息出现即可
三、三种方式安装
1、本地模式 1台
特点:没有HDFS,只能进行MapReduce计算,而且只操作Linux上的文件
验证下:
vi hadoop-env.sh
配置Java环境变量:
export JAVA_HOME=/training/jdk1.8.0_171
测试前需要创建测试目录和测试文件:
mkdir ~/input
vi ~/input/test.txt
输入如下内容:
I love Guiyang
I love Guizhou
Guiyang is the capital of Guizhou
保存退出
进入到:cd /training/hadoop-2.7.3/share/hadoop/mapreduce/目录下
执行:~/output 不需要事先存在,存在会报错
hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount ~/input/test.txt ~/output
查看结果:
MapReduce程序的执行结果会默认按照英文单词的字典顺序进行了排序
cd ~/output
cat part-r-00000 _SUCCESS
(出现未知主机名称错误。解决: vi /etc/hosts , 添加192.168.127.128 niit )
2、伪分布模式 1台
特点:具备HDFS全部功能
HDFS:NameNode + DataNode
Yarn:ReourceManager + NodeManager
配置四个文件(hadoop-2.7.3/etc/hadoop):参考讲义进行配置
hdfs-site.xml:原则是:一般有几个数据节点就配置几个,但是最多不能超多3
<!--表示数据块的冗余度 默认为3-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--表示是否开启HDFS权限检查,默认是true-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
core-site.xml:
<!--配置NameNode的通讯地址 9000 是RPC默认的通信端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://niit04:9000</value>
</property>
<!--HDFS数据保存在Linux的哪个目录,默认值是Linux的tmp目录 必须配置,否则会报错/training/hadoop-2.7.3/tmp 必须事先存在-->
<property>
<name>hadoop.tmp.dir</name>
<value>/training/hadoop-2.7.3/tmp</value>
</property>
mapred-site.xml:
这个文件事先是不存在的,需要复制一份
cp mapred-site.xml.template mapred-site.xml
<!--配置MR的运行框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml:
<!--Yarn的主节点RM的位置-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>niit04</value>
</property>
<!--MapReduce运行方式:shuffle洗牌-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
格式化:HDFS(NameNode)
mkdir /training/hadoop-2.7.3/tmp
hdfs namenode -format
成功日志:
common.Storage: Storage directory /training/hadoop-2.7.3/tmp/dfs/name has been successfully formatted.
启动hadoop环境
start-all.sh
(如果出现找不到java_home错误。解决方法:
vi hadoop-env.sh 修改成绝对路径
export JAVA_HOME=/training/jdk1.8.0_171
export HADOOP_CONF_DIR=/training/hadoop-2.7.3/etc/hadoop
访问:web界面进行验证
HDFS:http://niit04:50070
Yarn:http://niit04:8088
停止:
stop-all.sh
(*)先配置免密码登录
(*)再配置免密码登录 (画图原理)
3、全分布模式(画图规划 3台)
一、准备工作
1、所有主机安装jdk
2、所有主机都需要关闭防火墙
3、所有主机都需要配置主机名映射关系 vi /etc/hosts
4、配置免密码登录(配置两两之间的免密码登录)
//所有的机器都需要产生一对密钥:公钥和私钥
ssh-keygen -t rsa
所有主机需要执行
ssh-copy-id -i .ssh/id_rsa.pub root@niit01
ssh-copy-id -i .ssh/id_rsa.pub root@niit02
ssh-copy-id -i .ssh/id_rsa.pub root@niit03
5、保证每台机器的时间是一样的
如果不一样的话,我们在执行MapReduce程序的时候可能会存在问题
解决方案:
1)搭建一个时间同步的服务器,网上很多教程可以使用
2)使用putty工具,可以简单实现这个功能:
date -s 2018-07-30 后面必须敲一个回车
二、在主节点上进行安装配置(niit01)
(*)上传hadoop安装包,解决配置环境变量
tar -zvxf hadoop-2.7.3.tar.gz -C /training/
同时设置:niit01 niit02 niit03
HADOOP_HOME=/training/hadoop-2.7.3
export HADOOP_HOME
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
epxort PATH
(*)修改配置文件
vi hadoop-env.sh 设置JDK的路径
hdfs-site.xml:
<!--表示数据块的冗余度 默认为3-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
core-site.xml:
<!--配置NameNode的通讯地址 9000 是RPC默认的通信端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://niit01:9000</value>
</property>
<!--HDFS数据保存在Linux的哪个目录,默认值是Linux的tmp目录 必须配置,否则会报错
/training/hadoop-2.7.3/tmp 必须事先存在-->
<property>
<name>hadoop.tmp.dir</name>
<value>/training/hadoop-2.7.3/tmp</value>
</property>
mapper-site.xml:
<!--配置MR的运行框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml:
<!--Yarn的主节点RM的位置-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>niit01</value>
</property>
<!--MapReduce运行方式:shuffle洗牌-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
savles:
niit02
niit03
(*)格式化nameNode
hdfs namenode -format
日志:
common.Storage: Storage directory /tmp/hadoop-root/dfs/name has been successfully formatted.
(*)将niit01上的hadoop环境复制到niit02 niit03
scp -r hadoop-2.7.3/ root@niit02:/training/
scp -r hadoop-2.7.3/ root@niit03:/training/
(*)在主节点(niit01)上启动hdfs
start-all.sh