克隆三个虚拟机hadoop01、hadoop02、hadoop03均为NAT模式,其中hadoop01内存设置为2G、处理器设置为2,hadoop02和hadoop03为1M,处理器分别设置为2和4(16G内存以上建议设置)。
注:虚拟机登录的用户名和密码都是root
编辑-虚拟网络编辑器,查看VMnet8子网IP和网关IP
修改IP地址,将:
第一台hadoop01的虚拟机ip地址改为:192.168.65.101
第二台hadoop02的虚拟机ip地址改为:192.168.65.102
第三台hadoop03的虚拟机ip地址改为:192.168.65.103
cd /etc/sysconfig/network-scripts #进入网络配置目录 dir ifcfg* #找到网卡配置文件 ifcfg-ens33 #找到版本最新的文件并修改 vim ifcfg-ens33 或者 vim /etc/sysconfig/network-scripts/ifcfg-ens331.2.2配置文件内容
3台IPADDR需要分别配置为101/102/103
注意不要写注释部分
TYPE=Ethernet BOOTPROTO=static #改成static,针对NAT NAME=eno16777736 UUID=4cc9c89b-cf9e-4847-b9ea-ac713baf4cc8 DEVICE=eno16777736 DNS1=114.114.114.114 #和网关相同 ONBOOT=yes #开机启动此网卡 IPADDR=192.168.65.101 #固定IP地址 NETMASK=255.255.255.0 #子网掩码 GATEWAY=192.168.65.2 #网关和NAT自动配置的相同,不同则无法登录1.2.3重启网络
以下两种方式任选其一
service network restart #重启网络 systemctl restart network.service #重启网络centos71.2.4查看IP
ip addr #查看IP地址 ip add1.3mobaxTerm的使用
登录成功后,弹出对话框点yes 保存密码。
补充:mobaxTerm远程连接慢的问题
在使用shell连接虚拟机时连接等待时间太长,ssh的服务端在连接时会自动检测dns环境是否一致导致的,修改为不检测即可。
1、打开sshd服务的配置文件 vim /etc/ssh/sshd_config 把UseDNS yes改为UseDNS no(如果没有,自行编写在文件末尾加入) 2、重启sshd服务 systemctl restart sshd.service 或者 /etc/init.d/sshd restart1.4关闭防火墙
systemctl stop firewalld.service #关闭防火墙服务 systemctl disable firewalld.service #禁止防火墙开启启动 systemctl restart firewalld.service #重启防火墙使配置生效 systemctl enable firewalld.service #设置防火墙开机启动
检查防火墙状态
[root@hadoop01 ~]# firewall-cmd --state #检查防火墙状态 false #返回值,未运行1.5修改主机名
分别改为hadoop01,hadoop02,hadoop03
vi /etc/hostname1.6修改hosts文件
vi /etc/hosts
在配置文件中增加ip地址映射
192.168.65.101 hadoop01 192.168.65.102 hadoop02 192.168.65.103 hadoop031.7三台机器重启
reboot1.8设置免密登录 1.8.1三台机器生成公钥与私钥
ssh-keygen
执行该命令之后,按下三个回车即可
三台机器执行命令:可使用MultiExec功能同时执行
ssh-copy-id hadoop011.8.3复制第一台机器的认证到其他机器
将第一台机器的公钥拷贝到其他机器上
在第一台机器上面执行以下命令
scp /root/.ssh/authorized_keys hadoop02:/root/.ssh scp /root/.ssh/authorized_keys hadoop03:/root/.ssh1.8.4测试
在hadoop01上进行远程登录测试
ssh hadoop02
不需要输入密码直接进入说明成功,exit退出
1.9三台机器时钟同步通过网络进行时钟同步
通过网络连接外网进行时钟同步,必须保证虚拟机连上外网
ntpdate us.pool.ntp.org;
阿里云时钟同步服务器
ntpdate ntp4.aliyun.com
三台机器定时任务
crontab -e */1 * * * * /usr/sbin/ntpdate us.pool.ntp.org;
或者直接与阿里云服务器进行时钟同步
crontab -e */1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;1.10三台机器安装jdk
查看自带的openjdk
rpm -qa | grep java
如果有,请卸载系统自带的openjdk,方式如下(注:目前系统已经卸载)
rpm -e java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64 tzdata-java-2016j-1.el6.noarch java-1.7.0-openjdk-1.7.0.131-2.6.9.0.el6_8.x86_64 --nodeps
三台机器创建目录
所有软件的安装路径
mkdir -p /opt/servers
所有软件压缩包的存放路径
mkdir -p /opt/softwares
上传jdk到/export/softwares路径下去,并解压
tar -xvzf jdk-8u65-linux-x64.tar.gz -C ../servers/
配置环境变量
vim /etc/profile
export JAVA_HOME=/opt/servers/jdk1.8.0_65 export PATH=:$JAVA_HOME/bin:$PATH
修改完成之后记得 source /etc/profile生效
source /etc/profile
发送文件到hadoop02和hadoop03
scp -r /opt/servers/jdk1.8.0_65/ hadoop02:/opt/servers/ scp -r /opt/servers/jdk1.8.0_65/ hadoop03:/opt/servers/
注意:发送完成后要配置环境变量并生效。
测试
java -version
出现JDK版本号即为成功。
1.11修改windows中的hosts文件在windows中的hosts文件里添加如下映射
C:WindowsSystem32driversetchosts
192.168.65.101 hadoop01 192.168.65.102 hadoop02 192.168.65.103 hadoop032.集群环境部署 2.1 伪分布式部署
需要环境:
JDK,JAVA_HOME,配置hosts,关闭防火墙,配置免密登录等。
注意:我们只将其安装在hadoop01节点上。
cd /opt/softwares上传安装包并解压
tar -xvzf hadoop-2.7.7.tar.gz -C ../servers/修改配置文件
位置:/opt/servers/hadoop-2.7.7/etc/hadoop
1.修改hadoop-env.shvim /opt/servers/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
修改
export JAVA_HOME=/opt/servers/jdk1.8.0_65 export HADOOP_CONF_DIR=/opt/servers/hadoop-2.7.7/etc/hadoop2.修改 core-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/core-site.xml
增加namenode配置、文件存储位置配置:粘贴代码部分到标签内
3.修改 hdfs-site.xmlfs.default.name hdfs://hadoop01:8020 hadoop.tmp.dir /opt/servers/hadoop-2.7.7/tmp
vim /opt/servers/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
配置包括自身在内的备份副本数量到标签内
4.修改 mapred-site.xmldfs.replication 1 dfs.permissions false
说明:在/opt/servers/hadoop-2.7.7/etc/hadoop的目录下,只有一个mapred-site.xml.template文件,复制一个。
cp mapred-site.xml.template mapred-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/mapred-site.xml
配置mapreduce运行在yarn上:粘贴高亮部分到标签内
5.修改 yarn-site.xmlmapreduce.framework.name yarn
vim /opt/servers/hadoop-2.7.7/etc/hadoop/yarn-site.xml
配置:粘贴高亮部分到标签内
6.修改slavesyarn.resourcemanager.hostname hadoop01 yarn.nodemanager.aux-services mapreduce_shuffle
vim /opt/servers/hadoop-2.7.7/etc/hadoop/slaves
修改
hadoop017.配置hadoop的环境变量
vim /etc/profile
export HADOOP_HOME=/opt/servers/hadoop-2.7.7 export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
配置完成之后生效
source /etc/profile
环境变量配置完成,测试环境变量是否生效
echo $HADOOP_HOME8.启动 1.初始化
hdfs namenode -format2.启动
start-all.sh3.停止
stop-all.sh4.测试
jps5.停止服务
stop-all.sh6.访问浏览器
windows的浏览器中访问hadoop01:50070
安装成功!
如果没有成功(进程数不够)
1.stop-all.sh 停掉hadoop所有进程
2.删掉hadoop2.7.7下的tmp文件
3.hdfs namenode -format 重新初始化(出现successfully证明成功),如果配置文件报错,安装报错信息修改相应位置后重新执行第二步。
4.start-all.sh 启动hadoop
安装环境服务部署规划
| 服务器IP | 192.168.65.101 | 192.168.65.102 | 192.168.65.103 |
|---|---|---|---|
| NameNode | |||
| HDFS | Secondary NameNode | ||
| DataNode | DataNode | DataNode | |
| YARN | ResourceManager | ||
| NodeManager | NodeManager | NodeManager | |
| MapReduce | JobHistoryServer |
先在第一台机器hadoop01进行部署
注意:如果已安装伪分布模式,先删除格式化后生成的数据文件,其他请略过。
rm -rf /opt/servers/hadoop-2.7.7/tmp1.进入目录
cd /opt/servers2.上传安装包并解压
tar -xvzf hadoop-2.7.7.tar.gz -C ../servers/3.修改配置文件
位置:/opt/servers/hadoop-2.7.7/etc/hadoop
1.修改hadoop-env.shvim /opt/servers/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
修改
export JAVA_HOME=/opt/servers/jdk1.8.0_65 export HADOOP_CONF_DIR=/opt/servers/hadoop-2.7.7/etc/hadoop2.修改 core-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/core-site.xml
增加namenode配置、文件存储位置配置:粘贴代码部分到标签内
3.修改 hdfs-site.xmlfs.default.name hdfs://hadoop01:8020 hadoop.tmp.dir /opt/servers/hadoop-2.7.7/tmp
vim /opt/servers/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
配置包括自身在内的备份副本数量到标签内
4.修改 mapred-site.xmldfs.replication 2 dfs.permissions false
说明:在/opt/servers/hadoop-2.7.7/etc/hadoop的目录下,只有一个mapred-site.xml.template文件,复制一个。
cp mapred-site.xml.template mapred-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/mapred-site.xml
配置mapreduce运行在yarn上:粘贴高亮部分到标签内
5.修改 yarn-site.xmlmapreduce.framework.name yarn
vim /opt/servers/hadoop-2.7.7/etc/hadoop/yarn-site.xml
配置:粘贴高亮部分到标签内
6.修改slavesyarn.resourcemanager.hostname hadoop01 yarn.nodemanager.aux-services mapreduce_shuffle
vim /opt/servers/hadoop-2.7.7/etc/hadoop/slaves
修改
hadoop01 hadoop02 hadoop037.配置hadoop的环境变量
vim /etc/profile
export HADOOP_HOME=/opt/servers/hadoop-2.7.7 export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
配置完成之后生效
source /etc/profile
环境变量配置完成,测试环境变量是否生效
echo $HADOOP_HOME8.分发文件到hadoop02、hadoop03服务器
cd /opt/servers/ scp -r hadoop-2.7.7/ hadoop02:$PWD scp -r hadoop-2.7.7/ hadoop03:$PWD9.hadoop02、hadoop03服务器配置hadoop的环境变量
vim /etc/profile
export HADOOP_HOME=/opt/servers/hadoop-2.7.7 export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
配置完成之后生效
source /etc/profile
环境变量配置完成,测试环境变量是否生效
echo $HADOOP_HOME10.启动 1.初始化
hdfs namenode -format2.启动
start-all.sh3.停止
stop-all.sh4.测试
jps5.停止服务
stop-all.sh6.访问浏览器
windows的浏览器中访问
hdfs集群访问地址:http://hadoop01:50070/
yarn集群访问地址:http://hadoop01:8088/
安装成功!
start-dfs.sh start-yarn.sh
也可以单独启动一个服务
在主节点上使用以下命令启动 HDFS NameNode: hadoop-daemon.sh start namenode 在每个从节点上使用以下命令启动 HDFS DataNode: hadoop-daemon.sh start datanode 在主节点上使用以下命令启动 YARN ResourceManager: yarn-daemon.sh start resourcemanager 在每个从节点上使用以下命令启动 YARN nodemanager: yarn-daemon.sh start nodemanager3.hadoop集群初体验 3.1、HDFS 使用初体验
从Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下
hadoop fs -mkdir -p /test/input hadoop fs -put /root/install.log /test/input3.2、mapreduce程序初体验
在 Hadoop 安装包的
hadoop2.7.7/share/hadoop/mapreduce 下有官方自带的mapreduce 程序。我们可以使用如下的命令进行运行测试。
示例程序jar:
hadoop-mapreduce-examples-2.7.7.jar
计算圆周率:
hadoop jar /opt/servers/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi 2 5
关于圆周率的估算,感兴趣的可以查询资料 Monte Carlo 方法来计算 Pi 值。
4.HDFS基本Shell操作创建文件夹(支持多级创建):
hadoop fs -mkdir -p /xxx
查看目录:
hadoop fs -ls /xxx
递归查看多级目录:
hadoop fs -lsr /xxx
上传文件到HDFS:
hadoop fs -put xxx.txt /xxx
下载文件到本地当前目录:
hadoop fs -get /xxx/xxx/xxx.txt
删除文件:
hadoop fs -rm /xxx/xxx/xxx.txt
删除文件夹(文件夹必须为空):
hadoop fs -rmdir /xxx/xxx
强制删除文件夹或文件
Hadoop fs -rm -r /xxx5.HDFS的api操作 5.1前期准备
1.解决winutils.exe的问题
1)把hadoop2.7.7(windows版)文件目录放到一个没有中文没有空格的路径下
2)在window中配置handoop的环境变量,并且加入path中。
5.3使用文件系统方式访问数据org.apache.hadoop hadoop-common 2.7.7 org.apache.hadoop hadoop-hdfs 2.7.7 org.apache.hadoop hadoop-client 2.7.7
在 java 中操作 HDFS,主要涉及以下 Class:
Configuration:该类的对象封转了客户端或者服务器的配置;
FileSystem:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作,通过 FileSystem 的静态方法 get 获得该对象。
FileSystem fs = FileSystem.get(conf)
get 方法从 conf 中的一个参数 fs.defaultFS 的配置值判断具体是什么类型的文件系统。如果我们的代码中没有指定 fs.defaultFS,并且工程 classpath下也没有给定相应的配置,conf中的默认值就来自于hadoop的jar包中的core-default.xml , 默 认 值 为 : file:/// , 则 获 取 的 将 不 是 一 个DistributedFileSystem 的实例,而是一个本地文件系统的客户端对象
5.4获取FileSystem的方式Configuration configuration=new Configuration();
//configuration.set("fs.defaultFS","hdfs://192.168.65.101:8020");
configuration.set("fs.default.name","hdfs://hadoop01:8020");
FileSystem fileSystem=FileSystem.get(configuration);
System.out.println(fileSystem.toString());
5.5创建文件夹
@Test
public void mkdirs() throws Exception{
FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.65.101:8020"), new Configuration());
boolean mkdirs = fileSystem.mkdirs(new Path("/hello/mydir/test"));
fileSystem.close();
}
5.6下载文件
@Test
public void getFileToLocal()throws Exception{
Configuration configuration=new Configuration();
configuration.set("fs.defaultFS","hdfs://192.168.65.101:8020");
FileSystem fileSystem=FileSystem.get(configuration);
FSDataInputStream open = fileSystem.open(new Path("/test/input/install.log"));
FileOutputStream fileOutputStream = new FileOutputStream(new File("c:\install.log"));
IOUtils.copy(open,fileOutputStream );
IOUtils.closeQuietly(open);
IOUtils.closeQuietly(fileOutputStream);
fileSystem.close();
}
5.7上传文件
@Test
public void putData() throws Exception{
Configuration configuration=new Configuration();
configuration.set("fs.defaultFS","hdfs://192.168.65.101:8020");
FileSystem fileSystem=FileSystem.get(configuration);
fileSystem.copyFromLocalFile(new Path("file:///c:\install.log"),new Path("/hello/mydir/test"));
fileSystem.close();
}
6.MapReduce实例
6.1准备数据并上传
cd /opt/servers vim wordcount.txt hello,world,hadoop hive,sqoop,flume,hello kitty,tom,jerry,world hadoop hdfs dfs -mkdir -p /wordcount/input hdfs dfs -put wordcount.txt /wordcount/input6.2测试官方案例
hadoop jar /opt/servers/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input /wordcount/output6.3定义一个mapper类
public class WordCountMapper extends Mapper6.4定义一个reducer类{ @Override public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); String[] split = line.split(","); for (String word : split) { context.write(new Text(word),new LongWritable(1)); } } }
public class WordCountReducer extends Reducer6.5定义一个主类,并提交job{ @Override protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { long count = 0; for (LongWritable value : values) { count += value.get(); } context.write(key,new LongWritable(count)); } }
public class JobMain {
public static void main(String[] args) throws Exception {
Configuration configuration = new Configuration();
Job job = Job.getInstance(configuration, JobMain.class.getSimpleName());
//打包到集群上面运行时候,必须要添加以下配置,指定程序的main函数
job.setJarByClass(JobMain.class);
//第一步:读取输入文件解析成key,value对
job.setInputFormatClass(TextInputFormat.class);
TextInputFormat.addInputPath(job,new Path("hdfs://hadoop01: 8020/wordcount"));
//第二步:设置我们的mapper类
job.setMapperClass(WordCountMapper.class);
//设置我们map阶段完成之后的输出类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//第三步,第四步,第五步,第六步,省略
//第七步:设置我们的reduce类
job.setReducerClass(WordCountReducer.class);
//设置我们reduce阶段完成之后的输出类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
//第八步:设置输出类以及输出路径
job.setOutputFormatClass(TextOutputFormat.class);
TextOutputFormat.setOutputPath(job,new Path("hdfs://192.168.65.101:8020/wordcount_out"));
job.waitForCompletion(true);
}
}
=结束=



