前言
如果你的电脑内存为8G,建议每台虚拟机给1G内存。
推荐至少内存大于等于12G,每台虚拟机2G。
1. 下载
链接:https://pan.baidu.com/s/1zxiR3xbZ73AEOxI5Kl2_ZQ
提取码:ifob
2. 安装软件(已安装可跳过直接看第3点,需要注意关闭防火墙)
-
VMware(许可证中含有密钥)、XShell、IDEA的安装省略。
-
安装CentOS-7
2.
3.
4.
5. 注意修改位置,默认是C盘
6.
7.
8.
9.
10.
11.
12. 博主这是给20G,如果你后期会安装HBase、Hive、Kafka、Spark等,建议40G左右
后面默认即可。。。
- 网络设置
安装完成VMware后,查看适配器可以看到多出了VMnet1和VMnet8,需要使用VMnet8。
右键VMnet8 -> 属性 -> Internet 协议版本4:
设置如下IP和子网掩码:
VMware中设置虚拟网络:
在VMware中选中data1右键设置:
添加网络适配器:
NAT用于虚拟机与windows的通信,桥接用于连接外网:
注意:如果设置好后,发现只能联网,但不能主机和linux不能通信,建议两个网卡都设置为NAT。
设置镜像:
确认后,启动虚拟机:
选择安装(箭头上下移动),ctrl + alt 跳出虚拟机,等待安装:
最小化安装:
分盘默认即可,点击安装(如果无法点击安装,先点击有黄色警告的地方-> Done):
设置密码,建议两个都设置,左边是root用户密码,右边添加新的普通用户,等待安装:
安装成功,重启:
登录root:
设置NAT网卡IP:
注意:BOOTPROTO=dhcp,这里没有截到图。
设置桥接网卡:
注意:这里第一个虚拟机设置为192.168.1.126,后面第二、三个虚拟机依次为127、128。
保存后重启网卡:
注:如果重启网卡,没有出现IP,建议重新启动Linux。
还有一个/etc/selinux/config,中有一行SELINUX设置为disabled
建议重启Linux。
测试:
与windows通信,如果无法通信尝试关闭Windows的防火墙。
外网通信:
使用XShell 连接:
点击连接,输入用户名、密码
下面的两个设置是为了避免输入数字小键盘键和方向键乱码:
关闭防火墙:
修改主机名:
设置IP映射:
上传压缩包
下载WinSCP软件:
https://winscp.net/eng/docs/lang:chs
连接data1:
在Linux中创建目录:
拖拽上传到 /opt/soft:
3. Hadoop集群安装
这里跳过单机、伪分布的安装。。。
经过第2步,你已经有了一个可以正常运行的CentOS,并且上传有Haodop、JDK安装包。
- JDK安装
解压JDK:
tar -zxvf /opt/soft/jdk-8u144-linux-x64.tar.gz -C /opt/module/
配置环境变量:
末尾添加:
# JDK
export JAVA_HOME=/opt/module/jdk1.8.0_144/
export PATH=$PATH:$JAVA_HOME/bin
测试,出现如下则安装成功:
- Hadoop安装配置
解压Hadoop:
tar -zxvf /opt/soft/hadoop-2.8.4.tar.gz -C /opt/module/
以下所有修改都在/opt/module/hadoop-2.8.4/etc/hadoop 目录下:
hadoop-env.sh
修改前:
修改后:
core-site.xml
<configuration>
<!-- namenode地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://data1:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.8.4/data/tmp</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!-- 数据冗余 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- secondary地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>data1:50090</value>
</property>
<!-- 关闭权限 -->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reduce获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>data1</value>
</property>
<!-- 日志聚集功能使用 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation-seconds</name>
<value>604800</value>
</property>
</configuration>
mapred-site.xml (原文件为mapred-site.xml.template,修改名称即可)
<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器的地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>data1:10020</value>
</property>
<!-- 历史服务器页面的地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>data1:19888</value>
</property>
</configuration>
slaves
data1
data2
data3
设置环境变量,添加到/etc/profile 末尾:
# HADOOP
export HADOOP_HOME=/opt/module/hadoop-2.8.4/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
测试:
克隆data2、data3
关机data1:
shutdown -h now
克隆出data2和data3:
注意修改位置
克隆完成:
启动三台虚拟机:
修改第二台主机名为data2、修改IP为192.168.1.127
修改第二台主机名为data3、修改IP为192.168.1.128(不清楚如何修改可以看第2步)
重启后,使用Xshell连接,得到如下三台机器:
在data1中测试是否能够与data2、data3通信:
免密设置:
在XShell中设置一键操作三台虚拟机(如果没有安装XShell的推荐安装):
作用是在一台虚拟机中发送命令在其他两台中将执行同样的命令。。。。
开启后的效果:
生成密钥(一直回车即可):
添加本机的密钥到指定的主机:
连续执行了三条命令,这样每台虚拟机都会有包括自己在内的另外两台虚拟机的密钥:
关闭一键执行到所有会话:
测试免密登录:
格式化Hadoop:
在data1中执行:
hadoop namenode -format
出现0则成功:
启动 hdfs:
启动 yarn:
页面访问:
因为在windows可以与虚拟机的通信,所以可以在windows下访问集群的hadoop页面:
192.168.1.126:50070
可以在命令中查看data2和data3的启动情况:
也可以在页面中查看是否启动成功:
至此,Hadoop集群搭建成功。。。
4. Windows下使用IDEA连接集群
前提:已安装IDEA
- Windows下安装Maven
解压Maven,设置环境变量:
测试:
配置Maven仓库地址,使用阿里仓库:
本地仓库地址(默认为C盘):
阿里仓库(默认国外):
<mirrors>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!-- 中央仓库1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<!-- 中央仓库2 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
-
Windows下配置Hadoop
解压Ha的oop安装包(与Linux上的为同一解压包)到安装JDK的目录(windows确保你安装了jdk)
并将hadoop.dll 和 winutils.exe 复制到 hadoop-2.8.4/bin 目录下:
设置环境变量:
测试:
-
IDEA中设置Maven
-
新建Maven项目
在pom.xml (该文件在新建的Maven项目路径下)中导入Hadoop相关依赖,等待下载完成:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.8.4</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.projectlombok</groupId>-->
<!-- <artifactId>lombok</artifactId>-->
<!-- <version>1.16.10</version>-->
<!-- </dependency>-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
Maven依赖下载的jar在设置Maven的本地仓库地址:
- 编写上传文件代码,右键Run
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
public class HadoopTest {
public static void main(String[] args) throws IOException {
// 1. 创建配置信息对象
Configuration configuration = new Configuration();
configuration.set("fs.defaultFS", "hdfs://192.168.1.126:9000");
// 2. 获取文件系统
FileSystem fileSystem = FileSystem.get(configuration);
// 3. 上传文件
Path source = new Path("D:\\Test\\Test.txt");
Path out = new Path("/");
fileSystem.copyFromLocalFile(source, out);
// 4. 关闭文件系统
fileSystem.close();
}
}
HDFS中查看上传的文件: