Hadoop环境搭建及使用(超详细)

伪分布式linux搭建

电脑性能有限,只搭建两台Linux虚拟机,其他的操作一样

设置网络IP和虚拟机网关

本机物理网卡VMnet8和VMware虚拟里网卡设置要在同一网段。
VMware网管设置
本地物理网卡设置

克隆两个Linux,如果不会自行百度,接下来是克隆之后的配置

注意:每台linux都需要修改

第一步需要修改主机名

vim打开主机名配置文件,主机名为E1

// vim进入主机配置文件,修改和克隆虚拟机时一样的名字
vim /etc/sysconfig/network

主机名

第二步配置本机HOST映射

// 本地域名文件
vim /etc/hosts

本地域名也要映射,映射所有集群
域名映射

第三步需要修改网卡信息

// vim进入网卡配置文件,需要删除eth0,再把下面的eth1改为eth0
vim /etc/udev/rules.d/70-persistent-net.rules 

网卡设置

第四步需要配置IP

// vim进入IP配置文件,这里需要写本机IP,子网掩码,和网关ip
 vim /etc/sysconfig/network-scripts/ifcfg-eth0

这里很容易出错配置,要注意,修改BOOTPROTO为static这样IP就不会变,IPADDR设置你给主机的IP,和其他机器不要重复,GATEWAY为网关IP,DNS随便,ONBOOT为yes,其他的可以删除不需要
IP设置
以上配置完成输入启动指令

// 服务重启
service network restart

关闭防火墙并开机不启动,每一个机器都要执行

// 关闭防火墙
 service iptables stop
 //开机不启动
 chkconfig iptables off

环境配置

需要JDK和HADOOP压缩包传输到其中一台Linux作为集群主机,配置好所有文件用SSH工具包中scp拷贝到其他Linux。

SSH->scp指令配置

// 直接输入指令行,下载工具包
yum install openssh-clients
// SSH免密登录,疯狂Enter
ssh-keygen
// 选择免密IP,之后输入密码
ssh-copy-id E2

JDK和hadoop环境变量配置,当然之前要传输JDK和HADOOP到linux其中一台

// 修改profile文件
vim /etc/profile

环境变量

JDK使用scp指令传输到其他linux

// 远程传输到E2,路径最好一样,防止以后麻烦
scp -r /root/apps/jdk1.8.0_141  E2:/root/apps/
// 把环境变量文件传输到其他机器
scp -r /etc/profile  E2:/etc/profile

注意:修改要生效,重启也可以

// 执行修改,每台集群都需要
source /etc/profile

HADOOP文件配置(核心)

配置hadoop环境变量

// 修改环境变量java,修改hadoop-env.sh文件
vim /root/apps/hadoop-2.8.5/etc/hadoop/hadoop-env.sh

修改JAVA_HOME参数为本机JDK路径
环境变量

配置core-site.xml

详细配置看hadoop官网文档

// 修改core-site.xml
vim /root/apps/hadoop-2.8.5/etc/hadoop/core-site.xml
//默认集群主机配置 namenode位置
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://E1:9000</value>
</property>
</configuration>

配置hdfs-site.xml

hdfs集群配置都在这个文件

// 修改hdfs-site.xml  
vim /root/apps/hadoop-2.8.5/etc/hadoop/hdfs-site.xml  

<configuration>
//namenode文件存储路径,只对主机有效
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hdpdata/name/</value>
</property>

//datanode文件存储路径
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/hdpdata/data</value>
</property>
//secondary namenode主机配置,辅助namenode一些任务,最好不要和namenode在一台机器
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>E2:50090</value>
</property>
</configuration>

接下来把配置好的HADOOP拷贝到其他Linux集群

scp -r /root/apps/hadoop-2.8.5  E2:/root/apps/

启动hadoop集群

修改slaves文件启动脚本使用

//输入集群域名
vim /root/apps/hadoop-2.8.5/etc/hadoop/slaves

集群域名

先要初始化namenode(很容易忘记的操作)

//在namenode主机上
hadoop namenode -format

Hadoop中hdfs启动方式

//启动namenode
hadoop-daemon.sh start namenode
//启动datanode
hadoop-daemon.sh start datanode

更方便的如下
全部集群

//启动全部hdfs
start-dfs.sh
//停止全部hdfs
stop-dfs.sh

启动Yarn平台

配置yarn-stie.xml

vim /root/apps/hadoop-2.8.5/etc/hadoop/yarn-site.xml
<configuration>
//resourcemanager主机配置
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>E1</value>
</property>
//nodemanager内存配置,默认配置分析物理内存自动分配,建议不能低于2G
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
//nodemanager CPU核数配置 
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>

//shuffle配置
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

复制yarn-stie.xml到集群

scp -r /root/apps/hadoop-2.8.5/etc/hadoop/yarn-site.xml E2:/root/apps/hadoop-2.8.5/etc/hadoop/

启动Yarn

在resourcemanager上启动

start-yarn.sh

Hadoop集群启动方式(最方便)

start-all.sh

Job客户端代码,仅供参考

public class JobCilent {
    public static void main(String[] args) throws Exception {

        //设置JVM系统参数,用于给job对象获取访问hdfs的用户身份
        System.setProperty("HADOOP_USER_NAME", "root");

        Configuration conf = new Configuration();
        //1.设置Job默认访问的文件系统
        conf.set("fs.defaultFS", "hdfs://192.168.174.10:9000");
        //2.设置Job提交地方 1.客户端 2.Yarn平台
        conf.set("mapreduce.framework.name", "yarn");
        conf.set("yarn.resourcemanager.hostname", "192.168.174.10");
        //3.如果windows运行这个job,则需要加这个跨平台提交的参数
        conf.set("mapreduce.app-submission.cross-platform", "true");


        Job job = Job.getInstance(conf);

        //1.封装参数:jar包位置
        //job.setJarByClass(JobCilent.class);
        job.setJar("d://JOB/job1.jar");
        //2.封装 调用的实现类
        job.setMapperClass(MapTask.class);
        job.setReducerClass(ReduceMapper.class);
        //3.job实现类产生的类型值
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        //Reduce(K,V)
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        //4.本次job要处理的输入文件路径HDFS
        FileInputFormat.setInputPaths(job,new Path("/wordcount/input"));
        //5.结果输出路径hdfs,如果路径已存在会报错
        Path path = new Path("/wordcount/output1");
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.174.10:9000"), conf, "root");
        if(fileSystem.exists(path)){
            fileSystem.delete(path, true);
        }
        FileOutputFormat.setOutputPath(job, path);

        //6.设置reducetask启动数量,maptask是hadoop默认设置
        job.setNumReduceTasks(1);

        //7.提交job到yarn
        //job.submit();     无返回值
        boolean res = job.waitForCompletion(true);
        System.exit(res?0:-1);
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值