栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

03 hadoop环境搭建

03 hadoop环境搭建

1.集群环境准备 1.1准备虚拟机

克隆三个虚拟机hadoop01、hadoop02、hadoop03均为NAT模式,其中hadoop01内存设置为2G、处理器设置为2,hadoop02和hadoop03为1M,处理器分别设置为2和4(16G内存以上建议设置)。
注:虚拟机登录的用户名和密码都是root

1.1.1查看虚拟网络

编辑-虚拟网络编辑器,查看VMnet8子网IP和网关IP

1.2修改为静态IP

修改IP地址,将:
第一台hadoop01的虚拟机ip地址改为:192.168.65.101
第二台hadoop02的虚拟机ip地址改为:192.168.65.102
第三台hadoop03的虚拟机ip地址改为:192.168.65.103

1.2.1配置文件
cd /etc/sysconfig/network-scripts   #进入网络配置目录
dir ifcfg*                         #找到网卡配置文件
ifcfg-ens33                         #找到版本最新的文件并修改
vim ifcfg-ens33
或者
vim /etc/sysconfig/network-scripts/ifcfg-ens33
1.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   #重启网络centos7
1.2.4查看IP
ip addr                  #查看IP地址 ip add
1.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 restart
1.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/hostname
1.6修改hosts文件
vi /etc/hosts

在配置文件中增加ip地址映射

192.168.65.101 hadoop01
192.168.65.102 hadoop02
192.168.65.103 hadoop03
1.7三台机器重启
reboot
1.8设置免密登录 1.8.1三台机器生成公钥与私钥
ssh-keygen

执行该命令之后,按下三个回车即可

1.8.2拷贝公钥到同一台机器

三台机器执行命令:可使用MultiExec功能同时执行

ssh-copy-id hadoop01
1.8.3复制第一台机器的认证到其他机器

将第一台机器的公钥拷贝到其他机器上
在第一台机器上面执行以下命令

scp /root/.ssh/authorized_keys hadoop02:/root/.ssh
scp /root/.ssh/authorized_keys hadoop03:/root/.ssh
1.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 hadoop03
2.集群环境部署 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.sh
vim /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/hadoop
2.修改 core-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/core-site.xml

增加namenode配置、文件存储位置配置:粘贴代码部分到标签内



fs.default.name
hdfs://hadoop01:8020
 


  
hadoop.tmp.dir
/opt/servers/hadoop-2.7.7/tmp

3.修改 hdfs-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/hdfs-site.xml

配置包括自身在内的备份副本数量到标签内




dfs.replication
1




dfs.permissions
false

4.修改 mapred-site.xml

说明:在/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上:粘贴高亮部分到标签内

 

mapreduce.framework.name
yarn

5.修改 yarn-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/yarn-site.xml

配置:粘贴高亮部分到标签内



yarn.resourcemanager.hostname
hadoop01




yarn.nodemanager.aux-services
mapreduce_shuffle

6.修改slaves
vim /opt/servers/hadoop-2.7.7/etc/hadoop/slaves

修改

hadoop01
7.配置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_HOME
8.启动 1.初始化
hdfs namenode -format
2.启动
start-all.sh
3.停止
stop-all.sh
4.测试
jps
5.停止服务
stop-all.sh
6.访问浏览器

windows的浏览器中访问hadoop01:50070
安装成功!

7.如果没有安装成功

如果没有成功(进程数不够)
1.stop-all.sh 停掉hadoop所有进程
2.删掉hadoop2.7.7下的tmp文件
3.hdfs namenode -format 重新初始化(出现successfully证明成功),如果配置文件报错,安装报错信息修改相应位置后重新执行第二步。
4.start-all.sh 启动hadoop

2.2 完全分布式部署

安装环境服务部署规划

服务器IP192.168.65.101192.168.65.102192.168.65.103
NameNode
HDFSSecondary NameNode
DataNodeDataNodeDataNode
YARNResourceManager
NodeManagerNodeManagerNodeManager
MapReduceJobHistoryServer

先在第一台机器hadoop01进行部署

注意:如果已安装伪分布模式,先删除格式化后生成的数据文件,其他请略过。

rm -rf /opt/servers/hadoop-2.7.7/tmp
1.进入目录
cd /opt/servers
2.上传安装包并解压
tar -xvzf hadoop-2.7.7.tar.gz -C ../servers/
3.修改配置文件

位置:/opt/servers/hadoop-2.7.7/etc/hadoop

1.修改hadoop-env.sh
vim /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/hadoop
2.修改 core-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/core-site.xml

增加namenode配置、文件存储位置配置:粘贴代码部分到标签内



fs.default.name
hdfs://hadoop01:8020
 
 

  
hadoop.tmp.dir
/opt/servers/hadoop-2.7.7/tmp

3.修改 hdfs-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/hdfs-site.xml

配置包括自身在内的备份副本数量到标签内




dfs.replication
2

 


dfs.permissions
false

4.修改 mapred-site.xml

说明:在/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上:粘贴高亮部分到标签内

 

mapreduce.framework.name
yarn

5.修改 yarn-site.xml
vim /opt/servers/hadoop-2.7.7/etc/hadoop/yarn-site.xml

配置:粘贴高亮部分到标签内



yarn.resourcemanager.hostname
hadoop01

 


yarn.nodemanager.aux-services
mapreduce_shuffle

6.修改slaves
vim /opt/servers/hadoop-2.7.7/etc/hadoop/slaves

修改

hadoop01
hadoop02
hadoop03
7.配置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_HOME
8.分发文件到hadoop02、hadoop03服务器
cd /opt/servers/
scp -r hadoop-2.7.7/ hadoop02:$PWD
scp -r hadoop-2.7.7/ hadoop03:$PWD
9.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_HOME
10.启动 1.初始化
hdfs namenode -format
2.启动
start-all.sh
3.停止
stop-all.sh
4.测试
jps
5.停止服务
stop-all.sh
6.访问浏览器

windows的浏览器中访问
hdfs集群访问地址:http://hadoop01:50070/
yarn集群访问地址:http://hadoop01:8088/
安装成功!

7.补充:可以按照组件启动服务
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 nodemanager 
3.hadoop集群初体验 3.1、HDFS 使用初体验

从Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下

hadoop fs -mkdir -p /test/input 
hadoop fs -put /root/install.log  /test/input 	
3.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 /xxx
5.HDFS的api操作 5.1前期准备

1.解决winutils.exe的问题
​ 1)把hadoop2.7.7(windows版)文件目录放到一个没有中文没有空格的路径下
​ 2)在window中配置handoop的环境变量,并且加入path中。

5.2 创建maven工程并导入jar包

  org.apache.hadoop
  hadoop-common
  2.7.7


  org.apache.hadoop
  hadoop-hdfs
  2.7.7


  org.apache.hadoop
  hadoop-client
  2.7.7

5.3使用文件系统方式访问数据

在 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/input
6.2测试官方案例
hadoop jar /opt/servers/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input /wordcount/output
6.3定义一个mapper类
public class WordCountMapper extends Mapper {
     @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));
         }
     }
 }
6.4定义一个reducer类
public class WordCountReducer extends Reducer {
    
    @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));
    }
}
6.5定义一个主类,并提交job
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);
    }
}

=结束=

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/722993.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号