用URL来操作Hadoop

在我们部署好hadoop开发环境的时候,接下来就是学习编写代码,真正的进入Hadoop的世界。

首先来看一段代码:

package com.hsl.test;

import java.io.InputStream;
import java.net.URL;

import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;

/**
 * 使用url来操作HDFS
 * @author <a href="mailto:[email protected]">huoshengliang</a>
 * 
 */
public class UrlTest {

	// hdfs主机路径
	static final String PATH = "hdfs://master.dragon.org:9000";

	// 文件路径
	static final String FILE = "/test/新建文本文档.txt";

	/**
	 * 得到文件内容,输出到控制台
	 */
	@Test
	public void findFile() throws Exception {

		// 首先把指定的文件上传到hdfs指定的目录下

		// 设置URL可以解析HDFS协议,如果不加这个会报
		// java.net.MalformedURLException: unknown protocol: hdfs :url协议无法解析
		URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());

		// 如果master.dragon.org没有在windows的hosts文件中映射,就会报找不到这个域名的错误,所以需要在hosts文件中加上
		// 192.168.128.130 master.dragon.org
		// 构造url
		URL url = new URL(PATH + FILE);
		// 得到输入流
		InputStream inputStream = url.openStream();
		// 利用hadoop提供的工具类,把得到的文件内容输出到控制台
		/**
		 * @param in 输入流
		 * @param out 输出流
		 * @param buffersize 缓冲区大小
		 * @param close 是否关闭
		 */
		IOUtils.copyBytes(inputStream, System.out, 1024, true);
	}
}

我上传的文件内容


在控制台输入的内容

1.ZooKeeper
    1.1 zk可以用来保证数据在zk集群之间的数据的事务性一致。
2.如何搭建ZooKeeper服务器集群
    2.1 zk服务器集群规模不小于3个节点,要求各服务器之间系统时间要保持一致。
    2.2 在hadoop0的/usr/local目录下,解压缩zk....tar.gz,设置环境变量
    2.3 在conf目录下,修改文件 vi zoo_sample.cfg  zoo.cfg
    2.4 编辑该文件,执行vi zoo.cfg
        修改dataDir=/usr/local/zk/data
        新增server.0=hadoop0:2888:3888
            server.1=hadoop1:2888:3888
            server.2=hadoop2:2888:3888
    2.5 创建文件夹mkdir /usr/local/zk/data
    2.6 在data目录下,创建文件myid,值为0
    2.7 把zk目录复制到hadoop1和hadoop2中
    2.8 把hadoop1中相应的myid的值改为1
        把hadoop2中相应的myid的值改为2
    2.9 启动,在三个节点上分别执行命令zkServer.sh start
    2.10 检验,在三个节点上分别执行命令zkServer.sh status




在这过程中出现了几个错误,在代码中都有体现。

你可能感兴趣的:(hadoop,hdfs,url)