大数据02

访问hdfs客户端应用程序代码:

    /**
         * Configuration参数对象的机制:
         * 构建时,会加载jar包中的默认配置xxx-default.xml
         * 再加载用户配置xxx-site.xml,可以覆盖掉默认参数
         * 构造完成之后,还可以conf.set("p","v");会覆盖用户配置文件中的参数。
         */
        //new Confifguration()会从项目classpath中加载core-default.xml,hdfs-default.xml,core-site.xml,hdfs-site.xml
        Configuration conf = new Configuration();
        
        //指定客户端文件需要传输到hdfs上时,保存的副本数为2
        conf.set("dfs.replication","2");
        //指定客户端文件传输到hdfs时,切块的大小为64M
        conf.set("dfs.blocksize", "64M");
        
        //构造一个访问指定HDFS系统的客户端对象:参数1-HDFS系统的URI,参数2-客户端要特别指定的参数,参数3-客户端的身份
        FileSystem fs = FileSystem.get(new URI("hdfs://master:9000/"), conf, "root");

        //上传一个文件到HDFS中
        fs.copyFromLocalFile(new Path("D:\\downloads\\jdk-7u25-linux-x86_64.tar.gz"), new Path("/jdk2"));

步驟:

1、将hdfs客户端开发所需的jar导入工程(jar包可在hadoop安装包中找到common/hdfs)

2、写代码

要点:要对hdfs中的文件进行操作,代码中首先需要获得一个hdfs的客户端对象

Configuration conf = new Configuration();

FileSystem fs = FileSystem.get(new URI("hdfs://hdp-01:9000"),conf,"root");

3、利用fs对象的方法进行文件操作

比如:

上传文件—— fs.copyFromLocalFile(new Path("本地路径"),new Path("hdfs的路径"));

下载文件——fs.copyToLocalFile(new Path("hdfs的路径"),new Path("本地路径"))

namenode元数据管理机制示意图--checkpoint

客户端写数据到HDFS的流程

客户端从HDFS中读数据的流程

namenode元数据管理要点

1、什么是元数据?

hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置<datanode>)

2、元数据由谁负责管理?

namenode

3、namenode把元数据记录在哪里?

namenode的实时的完整的元数据存储在内存中;namenode还会在磁盘中(dfs.namenode.name.dir)存储内存元数据在某个时间点上的镜像文件;namenode会把引起元数据变化的客户端操作记录在edits日志文件中;

secondarynamenode会定期从namenode上下载fsimage镜像和新生成的edits日志,然后加载fsimage镜像到内存中,然后顺序解析edits文件,对内存中的元数据对象进行修改(整合)

整合完成后,将内存元数据序列化成一个新的fsimage,并将这个fsimage镜像文件上传给namenode

上述过程叫做:checkpoint操作

提示:secondary namenode每次做checkpoint操作时,都需要从namenode上下载上次的fsimage镜像文件吗?

第一次checkpoint需要下载,以后就不用下载了,因为自己的机器上就已经有了。

补充:secondary namenode启动位置的配置(把默认值改成你想要的机器主机名即可)

#默认值

<property>

  <name>dfs.namenode.secondary.http-address</name>

  <value>0.0.0.0:50090</value>

</property>

secondarynamenode保存元数据文件的目录配置:(改成自己想要的路径即可:/root/dfs/namesecondary)

#默认值

<property>

  <name>dfs.namenode.checkpoint.dir</name>

  <value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>

</property>

MapReduce

mapreduce程序应该是在很多机器上并行启动,而且先执行map task,当众多的maptask都处理完自己的数据后,还需要启动众多的reduce task,这个过程如果用用户自己手动调度不太现实,需要一个自动化的调度平台——hadoop中就为运行mapreduce之类的分布式运算程序开发了一个自动化调度平台——YARN

安装yarn集群

yarn集群中有两个角色:

主节点:Resource Manager  1台

从节点:Node Manager   N台

Resource Manager一般安装在一台专门的机器上,Node Manager应该与HDFS中的data node重叠在一起

修改配置文件

yarn-site.xml

<property>

<name>yarn.resourcemanager.hostname</name>

<value>hdp-04</value>

</property>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.nodemanager.resource.memory-mb</name>

<value>2048</value>

</property>

<property>

<name>yarn.nodemanager.resource.cpu-vcores</name>

<value>2</value>

</property>

然后复制到每一台机器上

启动yarn集群:sbin/start-yarn.sh

停止:sbin/stop-yarn.sh

启动完成后,可以在windows上用浏览器访问resourcemanager的web端口:

http://hdp-04:8088

看resource mananger是否认出了所有的node manager节点

运行MapReduce程序

1,为你的mapreduce程序开发一个提交job到yarn的客户端类(模板代码):

注意: 描述你的mapreduce程序运行时所需要的一些信息(比如用哪个mapper、reducer、map和reduce输出的kv类型、jar包所在路径、reduce task的数量、输入输出数据的路径);将信息和整个工程的jar包一起交给yarn

2,将整个工程(yarn客户端类+ mapreduce所有jar和自定义类)打成jar包

3,将jar包上传到hadoop集群中的任意一台机器上

4,运行jar包中的(YARN客户端类)

猜你喜欢

转载自blog.csdn.net/weixin_42581821/article/details/88016901
今日推荐