hadoop学习2

伊甸一点 伊甸一点     2022-08-07     589

关键词:

搭建伪分布式完成之后:
伪分布式安装详细介绍:http://www.powerxing.com/install-hadoop/

           练习1 编写Java程序实现以下函数

           1.向HDFS中上传文件

           2.从HDFS下载文件到本地

           3.显示文件目录

           4.移动文件

           5.新建文件夹

           6.移除文件夹

    

package cn.itcast.hadoop.hdfs;


import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.compress.utils.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.LocatedFileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.RemoteIterator; import org.junit.Before; import org.junit.Test; public class temp { static FileSystem fs = null; /* * initiation */ @Before public void init() throws IOException{ Configuration configuration = new Configuration(); configuration.set("fs.defaultFS", "hdfs://zpfbuaa:9000/"); fs = FileSystem.get(configuration); } /* * upload files */ @Test public void upload() throws IOException{ init(); Path dstPath = new Path("hdfs://zpfbuaa:9000/aa/my.jar"); FSDataOutputStream os = fs.create(dstPath); FileInputStream is = new FileInputStream("/home/hadoop/download/my.jar"); IOUtils.copy(is, os); } /* * upload files to HDFS */ @Test public void upload2() throws IOException{ fs.copyFromLocalFile(new Path("/home/hadoop/download/my.jar"), new Path("hdfs://zpfbuaa:9000/aaa/bbb/ccc/my3.jar")); } /* * download files to local */ public void download(){ } /* * list the information of files */ @Test public void listfile() throws FileNotFoundException, IllegalArgumentException, IOException{ RemoteIterator<LocatedFileStatus> filesIterator = fs.listFiles(new Path("/"), true); while(filesIterator.hasNext()){ LocatedFileStatus fileStatus = filesIterator.next(); Path path = fileStatus.getPath(); String filename = path.getName(); System.out.println(filename); } System.out.println("---------------------------------------------"); FileStatus[] listStatus = fs.listStatus(new Path("/")); for(FileStatus status : listStatus){ String name = status.getPath().getName(); System.out.println(name + (status.isDirectory()?" is a dir":" is a file")); } } /* * make a new file */ @Test public void makdir() throws IllegalArgumentException, IOException{ fs.mkdirs(new Path("/aaa/bbb/ccc")); } /* * delete a old file */ public void rm() throws IllegalArgumentException, IOException{ fs.delete(new Path("/aaa/bbb"), true); } public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Configuration configuration = new Configuration(); configuration.set("fs.defaultFS", "hdfs://zpfbuaa:9000/"); fs = FileSystem.get(configuration); FSDataInputStream is = fs.open(new Path("/jdk-7u65-linux-i586.tar.gz")); FileOutputStream os = new FileOutputStream("/home/hadoop/download/my.jar"); IOUtils.copy(is,os); } }

 

    练习2 编写Java程序实现客户端和服务器端的socket信息交互以及函数调用

  LoginServiceImpl.class 服务器实例类

  

package cn.itcast.hadoop.rpc;

public class LoginServiceImpl implements LoginServiceInterface{

    @Override
    public String Login(String username, String password) {
        
        return username + " logged in successfully!";
    }
    
    
}
  LoginServiceInterface 接口类(服务器端以及本地端均实现的)

  

package cn.itcast.hadoop.rpc;

public interface LoginServiceInterface {
    
    public static final long versionID = 1L;
    
    public String Login(String username,String password);
}
     starter.class 创建服务器端类
  
package cn.itcast.hadoop.rpc;

import java.io.IOException;

import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server;
import org.apache.hadoop.ipc.RPC.Builder;

public class starter {
    
    public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {
        
        Builder builder = new RPC.Builder(new Configuration());
        
        builder.setBindAddress("zpfbuaa").setPort(10000).setProtocol(LoginServiceInterface.class).setInstance(new LoginServiceImpl());
        
        Server server = builder.build();
        
        
    }
    
}

LoginController登录类

  

package cn.itcast.hadoop.rpc;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

public class LoginController {

    public static void main(String[] args) throws IOException {
        
        LoginServiceInterface proxy = RPC.getProxy(LoginServiceInterface.class, 1L, new InetSocketAddress("zpfbuaa", 10000), new Configuration());
        
        
        String result = proxy.Login("zpfbuaa", "123456789");
        
        System.out.println(result);
    }
}

LoginServiceInterface 接口类

  

package cn.itcast.hadoop.rpc;

public interface LoginServiceInterface {
    
    public static final long versionID = 1L;
    
    public String Login(String username,String password);
}

  需要注意的是:

  1.为了进行远程调用的模仿,将LoginServiceImpl.class以及LoginServiceInterface.class接口类和 starter.class类放在虚拟机上。本地放LoginController类以及LoginServiceInterface接口类。

  2.首先需要将服务器端的服务启动,上述例子会监听虚拟机的10000端口。

  3.容易忽略的地方:版本号versionID. 对于不同的版本拥有不同的版本号。在上述例子中简单的均定义版本号为Long类型 并且为final类型 赋值为1L。

  4.jar包的导入以及版本的控制。

  5.本地以及服务器端的函数都要实现一样的接口类,但是为了防止调用时版本的不对应,所以在Build实例的时候需要将版本号也就是versionID声明清楚,这样调用的时候可以通过版本号的不同将函数进行区别开。

Hadoop自身的远程调用实现机制RPC

  主要步骤如下:

  1.将本地socket以及接口类封装为一个proxy,生成动态本地代理实例

  2.该实例调用相对应的函数并且传入相应的参数。

  3.本地socket得到动态代理调用的函数以及传入的参数

  4.使用网络传输协议实现本地socket与远程服务器的socket进行连接,实现信息传递

  5.服务器端socket得到调用的函数以及传入的参数,生成动态服务器端的代理实例

  6.该服务器端实例调用服务器端的函数,并且传入得到的参数。

  7.函数调用结果返回给服务器端socket。

  8.服务器端socket将返回结果通过网络传输协议传递给本地socket。

  9.本地socket将返回结果传递给本地动态代理proxy。

  RPC的优点:

    1.实现了controller和implement的分离

    2.利用RPC机制可以实现信息的有效传递。

    3.保障数据的可靠性(DataNode需要定时向NameNode传递自身保存的blocks信息,以便NameNode进行blocks的维护)。

 

远程调用的底层实现机制

clip_image001

实现RPC机制:

clip_image002

查看FileSystem fs = FileSystem.get(new Configuration());

一步一步查看fs的生成过程!

clip_image003

加入断点后,逐步进行查看!

clip_image004

学习笔记--hadoop

Hadoop hadoop-1.2.1.tar.gzjdk-6u32-linux-x64.binUseradd -u900hadoopMvjdk1.6.0_32 /home/hadoopMvhadoop-1.2.1.tar.gz/home/hadoopChownhadoop.hadoop/home/hadoop-RSu-hadoopLn-sjdk1.6.0_32jav 查看详情

spark学习笔记——安装和wordcount

1.去清华的镜像站点下载文件spark-2.1.0-bin-hadoop2.7.tgz,因为hadoop安装的是2.7.2的版本2.把文件解压到/usr/local目录下,解压之后的效果,Hadoop和Spark都在Hadoop用户下drwxrwxrwx12hadoophadoop409612月1610:18spark-2.1.0-bin-hadoop2.7/ 添加Hadoop用户... 查看详情

hadoop学习2

编写Java程序实现以下函数:1.向HDFS中上传文件2.从HDFS下载文件到本地3.显示HDFS文件目录4.移动文件5.新建文件夹6.移除文件夹编写Java程序实现客户端和服务器端的socket信息交互以及函数调用实现机制RPC主要步骤如下:1.将本地socke... 查看详情

大数据学习系列之一-----hadoop环境搭建(单机)

...:40Gip:39.108.77.2502,配置选择JDK:1.8(jdk-8u144-linux-x64.tar.gz)Hadoop:2.8.2(hadoop-2.8.2.tar.gz)3,下载地址官网地址:JDK:http://www.oracle.com/technetw 查看详情

hadoop学习四:hadoop分布式环境搭建

Hadoop学习四:hadoop分布式环境搭建标签(空格分隔):hadoopHadoop学习四hadoop分布式环境搭建一环境准备二分布式环境搭建针对克隆三角色分配四安装配置一,环境准备1,删除/opt/app/hadoop-2.5.0/share/doc目录(该... 查看详情

hadoop入门学习

Hadoop入门学习1.Hadoop基础知识1.1基础概念1.2Hadoop特性优点1.3Hadoop集群整体概述1.4集群简介1.5hadoop集群搭建(在linux上搭建)2.参考视频1.Hadoop基础知识1.1基础概念1.2Hadoop特性优点1.3Hadoop集群整体概述1.4集群简介1.5hadoop集群搭... 查看详情

hadoop入门学习

Hadoop入门学习1.Hadoop基础知识1.1基础概念1.2Hadoop特性优点1.3Hadoop集群整体概述1.4集群简介1.5hadoop集群搭建(在linux上搭建)2.参考视频1.Hadoop基础知识1.1基础概念1.2Hadoop特性优点1.3Hadoop集群整体概述1.4集群简介1.5hadoop集群搭... 查看详情

学习笔记hadoop——mapreduce开发入门(代码片段)

文章目录一、MapReduce二、MapReduce开发环境搭建2.1、Maven环境2.2、手动导入Jar包三、MapReduce单词计数源码分析3.1、打开WordCount.java3.2、源码分析3.2.1、MapReduce单词计数源码:Map任务3.2.2、MapReduce单词计数源码:Reduce任务3.2.3、MapReduce单词... 查看详情

01_hadoop学习笔记内容说明

Hadoop学习笔记内容说明_001、 观看云帆大数据梦琪老师的《企业级Hadoop1.x应用开发基础课程》2014年4月左右版本。2、 博客是在梦琪老师的随堂笔记上改动的,方便的是自己以后回顾学习,也或许能给需要改方面帮助的同... 查看详情

hadoop学习九:hdfs源代码调试

Hadoop学习九:hdfs源代码调试标签(空格分隔):hadoopHadoop学习九hdfs源代码调试一利用log4j调试一,利用log4j调试1,在eclipse工程里面创建sourcefolder2,拷贝log4j.properties文件[hadoop002@hadoop002hadoop]$cplog4j.properties/home/... 查看详情

hadoop学习四:hadoop分布式环境搭建

Hadoop学习四:hadoop分布式环境搭建标签(空格分隔):hadoopHadoop学习四hadoop分布式环境搭建一环境准备二分布式环境搭建针对克隆三角色分配四安装配置一,环境准备1,删除/opt/app/hadoop-2.5.0/share/doc目录(该... 查看详情

hadoop学习hadoop配置文件参数详解

    Hadoop运行模式分为安全模式和非安全模式,在这里,我将讲述非安全模式下,主要配置文件的重要参数功能及作用,本文所使用的Hadoop版本为2.6.4。etc/hadoop/core-site.xml参数属性值解释fs.defaultFSNameNodeURIhdfs://host:po... 查看详情

hadoop 2.2.0 中的数据备份和恢复

】hadoop2.2.0中的数据备份和恢复【英文标题】:databackupandrecoveryinhadoop2.2.0【发布时间】:2014-03-1508:24:34【问题描述】:我是Hadoop新手,对Hadoop管理很感兴趣,所以我尝试在Ubuntu12.04中以伪分布式模式安装Hadoop2.2.0并成功安装并运... 查看详情

hadoop系统性学习笔记系列

Hadoop系统性学习笔记系列1.CommonHadoop安装与启动2.MapReduceHadoop第一个应用程序WordCountHadoopMapReduce新旧mapred与mapreduceAPIHadoop利用ToolRunner 查看详情

hadoop系统性学习笔记系列

Hadoop系统性学习笔记系列1.CommonHadoop安装与启动2.MapReduceHadoop第一个应用程序WordCountHadoopMapReduce新旧mapred与mapreduceAPIHadoop利用ToolRunner 查看详情

hadoop系统性学习笔记系列

Hadoop系统性学习笔记系列1.CommonHadoop安装与启动2.MapReduceHadoop第一个应用程序WordCountHadoopMapReduce新旧mapred与mapreduceAPIHadoop利用ToolRunner 查看详情

学习笔记hadoop——hadoop集群的安装与部署(代码片段)

文章目录一、Hadoop集群部署模式二、配置固定IP2.1、虚拟机DHCP2.2、步骤三、配置ssh无密码登录3.1、SSH3.2、MS架构3.3、配置主节点无密码登录四、配置Hadoop集群4.1、上传并解压Hadoop安装包4.2、修改配置文件:hadoop-env.sh4.3、修改... 查看详情

寒假学习进度-2(代码片段)

Spark的安装和使用安装的是spark-2.1.0-bin-without-hadoop.tgz修改了Spark的配置文件spark-env.sh添加了配置信息:exportSPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoopclasspath)Spark的使用在终端中首先要切换到Spark的目录cd/usr/local/spark之后通过输入bin/s... 查看详情