大数据环境安装配置

Linux环境准备

1)防火墙配置

	查看防火墙状态:systemctl status firewalld
	关闭防火墙:systemctl stop firewalld
	禁用防火墙:systemctl disable firewalld

2)网络ip地址配置

	1> vi /etc/sysconfig/network-scripts/ifcfg-ens33 
	   按字母a或者i进入编辑模式
	2> 修改和添加内容并保存
		BOOTPROTO=static
		ONBOOT=yes
		
	   (IPADDR这里和vmware虚拟机工具中虚拟网络编辑器中NAT网段一致)
		IPADDR=192.168.xx.101
		GATEWAY=192.168.xx.2
		NETMASK=255.255.255.0
		DNS1=114.114.114.114
		
		按ESC退出编辑模式,输入 :wq 保存退出
	3>  重启网络 systemctl restart network
	4>  输入ip addr 查看ip地址是否更改过来

3)主机名配置(3台)

   1> vi /etc/hostname 将文件内容改为主机名 如 master、slave1、slave2
   2> 为了马上可用分别设置,仅当前生效:hostnamectl set-hostname master/slave1/slave2
   3> 输入 hostname 查看主机名是否改过来

4)主机映射配置(3台)

   1> vi /etc/hosts 在最下面加入下列内容
		192.168.xx.ip master
		192.168.xx.ip slave1
		192.168.xx.ip slave2
   2> 测试:在master机上 直接输入 ping slave1  或者 ping slave2是否连通

5)ssh免密登录(在master机器上执行)

	1>  ssh-keygen -t rsa		产生秘钥
	2>  ssh-copy-id -i root@master		复制秘钥到其他机器
		ssh-copy-id -i root@slave1		复制秘钥到其他机器
		ssh-copy-id -i root@slave2		复制秘钥到其他机器
	3> 测试: 在master机器上输入  ssh slave1 或者 ssh  slave2 不输入密码表示成功登录
	   测试完毕输入  exit  退回原来机器

6)Jdk安装配置(因为大数据很多软件依赖jdk,所以需要先安装jdk)

	1> 解压jdk压缩包到指定目录,如 /usr/local/src
		tar -zxvf /xxx/jdk-8u212-linux-x64.tar.gz -C /usr/local/src
		cd /usr/local/src 			//进入目录
		mv jdk1.8.0_212/ jdk		//改名
	2> 配置jdk的环境变量(/etc/profile或者/root/.bash_profile都可以配置)
		vi /root/.bash_profile
		最后加入:
			export JAVA_HOME=/usr/local/src/jdk
			export PATH=$PATH:$JAVA_HOME/bin
	3> 马上生效: 
source /root/.bash_profile
	4> 测试:输入 java 或者 javac
	5> 将jdk远程拷贝至其他两台机器上
scp -r /usr/local/src/jdk slave1:/usr/local/src
scp -r /usr/local/src/jdk slave2:/usr/local/src

hadoop完全分布式搭建(3台机)

1> 解压hadoop到指定目录

tar -zxvf /xxx/hadoop3.1.3..tar.gz -C /usr/local/src
cd /usr/local/src 
mv hadoop3.1.3....  hadoop

2> 配置环境变量

vi /root/.bash_profile

export HADOOP_HOME=/usr/local/src/hadoop 
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存退出,生效:
source /root/.bash_profile

3> 修改hadoop的配置文件(master机器上):

cd /usr/local/src/hadoop/etc/hadoop
A> vi hadoop-env.sh

export JAVA_HOME=/usr/local/src/jdk 
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

B> vi core-site.xml

<property>
	<name>fs.defaultFS</name>
	<value>hdfs://master:9000</value>
</property>
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/data/hadoop</value>
</property>

C> vi hdfs-site.xml

<property>
	<name>dfs.replication</name>
	<value>3</value>
</property>

D> vi mapred-site.xml

<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>

E> vi yarn-site.xml

<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>master</value>
</property>
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<property>
	<name>yarn.nodemanager.pmem-check-enabled</name>
	<value>false</value>
</property>
<property>
	<name>yarn.nodemanager.vmem-check-enabled</name>
	<value>false</value>
</property>

F> vi workers (datanode的节点是哪几个机器)

master
slave1
slave2

G>(有可能需要修改yarn-env.sh

export JAVA_HOME=/opt/jdk

4> 将master上配置好的hadoop拷贝到其他机器上

scp -r /usr/local/src/hadoop slave1:/usr/local/src
scp -r /usr/local/src/hadoop slave2:/usr/local/src

5> 格式化hadoop文件系统HDFS(如果重新格式化请删除配置的数据目录)

hdfs namenode -format

6> 启动hadoop集群:

1)一键启动:

start-all.sh

2)或按需启动:
start-dfs.sh
start-yarn.sh

7> 在master机器上输入jps 正常情况下:

master上5个进程:namenode datanode nodemanager resourcemanager secondarynamenode
slave1和slave2上2个进程:datanode nodemanager

8> 进入hadoop的webUI管理界面查看:9870

在window上浏览器打开:http://master的ip:9870

数据清洗、统计

本地创建一个空文本文件,写入一些单词,空格分开,将其上传到hdfs中
1)创建目录:hdfs dfs -mkdir /hotel
2)将文件放入某个目录: hdfs dfs -put /本地路径/xxx.csv /hotel
3)将hdfs文件下载下来:hdfs dfs -get /hdfs路径 /本地路径
4)查看hdfs文件内容:hdfs dfs -cat /hdfs路径/文件名
查看hdfs文件行数:hdfs dfs -cat /hdfs路径/文件名 | wc -l
hdfs dfs -cat /hotel/hotel.csv | head -5
5)删除目录 hdfs dfs -rm -r /hdfs目录
注意:hadoop3.X版本需要在yarn-site.xml中添加配置,否则运行程序报错:
错误: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
为了能正常执行mapreduce自带的案例,需要如下操作:
直接命令行输入: hadoop classpath 将出现的内容全部复制一下,在yarn-site.xml里面加入:

<property>
	<name>yarn.application.classpath</name><value>将上面的内容粘贴到这里</value>
</property>

将修改后的文件复制给另外两台机器

scp /usr/local/src/hadoop/etc/hadoop/yarn-site.xml slave1:/usr/local/src/hadoop/etc/hadoop
scp /usr/local/src/hadoop/etc/hadoop/yarn-site.xml slave2:/usr/local/src/hadoop/etc/hadoop

自带经典统计单词个数

[root@master hadoop]# hadoop jar /usr/local/src/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /hotel/test.txt /out1

查看结果

[root@master hadoop]# hdfs dfs -cat /out1/part-r-00000

删除结果

(生成的目录不允许已经存在,因此每次生成时,如果有的话,先删除该输出目录)

[root@master hadoop]# hdfs dfs -rm -r /out1

自己编写的数据清洗:

创建maven项目,编写java类,最后打包jar文件,功能:统计一个文件中的每个单词的数量,以空格分隔:
maven项目的pom.xml加入以下

    <!--添加项目开发mapreduce程序所需的依赖-->
    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.3</version>
        </dependency>
    </dependencies>
package com.mhys;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

public class MyWordCount {
    //编写Map部分  <进入map的数据key-value类型,map出去的数据key-value类型>
    //其中Map端进入的k-v类型是固定的,返回的是根据业务需要自己分析的
    static class MyWordMapper extends Mapper<LongWritable, Text,Text, IntWritable>{
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            //读取每行数据的处理操作
            String[] arr = value.toString().split(" ");//将读取的行数据进行分隔   hadoop java hadoop java mysql html
            //将数组循环按每个 单词,1的格式输出去
            for(String word:arr){
                context.write(new Text(word),new IntWritable(1));//单词,1的格式返回
            }
        }
    }
    //编写Reduce部分
    static class MyWordReduce extends Reducer<Text, IntWritable,Text, IntWritable> {
        protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            int sum = 0;
            for(IntWritable iw : values){
                sum+=1;     //将每个1加起来
            }
            context.write(key,new IntWritable(sum));
        }
    }
    //编写一个驱动main方法
    public static void main(String[] args) throws Exception{
        Configuration conf = new Configuration();//创建一个执行mapreduce的默认配置
        Job job = Job.getInstance(conf);    //根据默认配置创建一个任务
        job.setJarByClass(MyWordCount.class);//指明当前类名.class是运行的主类

        job.setMapperClass(MyWordMapper.class);
        job.setReducerClass(MyWordReduce.class);
        //告诉任务 map端输出的key-value的类型是什么
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        //告诉任务 reduce端输出的key-value类型是什么
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        //告诉任务输入单词计数文件在哪里
        FileInputFormat.addInputPath(job,new Path("/hotel/test.txt"));
        //告诉任务输出结果的文件目录在哪里
        FileOutputFormat.setOutputPath(job,new Path("/out1"));
        //运行程序
        boolean flag = job.waitForCompletion(true); //提交运行
        System.exit(flag?1:0);  //根据结果退出程序
    }
}

该类的使用:因为该类内部写好了要处理的文件和要输出生成的文件名,所以,将该文件上传Linux,直接使用即可(需要删除hadoop中已有的out1目录,通过浏览器查看该目录)

[root@master hadoop]# hadoop jar /mysofts/mapreduce1-1.0-SNAPSHOT.jar com.mhys.MyWordCount

# 查看结果
[root@master hadoop]# hdfs dfs -cat /out1/part-r-00000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值