Java API连接HDFS并创建Orc文件

  

1、设置连接,参考之前文章:Java API操作HA方式下的Hadoop

    static String ClusterName = "nsstargate";
	private static final String HADOOP_URL = "hdfs://"+ClusterName;
	public static Configuration conf;

    static {
        conf = new Configuration();
        conf.set("fs.defaultFS", HADOOP_URL);
        conf.set("dfs.nameservices", ClusterName);
        conf.set("dfs.ha.namenodes."+ClusterName, "nn1,nn2");
        conf.set("dfs.namenode.rpc-address."+ClusterName+".nn1", "172.16.50.24:8020");
        conf.set("dfs.namenode.rpc-address."+ClusterName+".nn2", "172.16.50.21:8020");
        //conf.setBoolean(name, value);
        conf.set("dfs.client.failover.proxy.provider."+ClusterName, 
        		"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
    }

注:如果只是Configuration conf = new Configuration(); 不设置hdfs连接信息的话,则会将文件写到本地磁盘上(需要配置hadoop环境信息)。

2、设置orc文件的schema

		TypeDescription schema = TypeDescription.createStruct()
				.addField("field1", TypeDescription.createLong())
		        .addField("field2", TypeDescription.createDouble())
		        .addField("field3", TypeDescription.createBoolean())
		        .addField("field4", TypeDescription.createTimestamp())
		        .addField("field5", TypeDescription.createString());

3、输出ORC文件到HDFS

		String fileName = "/user/test/test_orc_file_datatype.orc";
		Path path = new Path(fileName);
		FileSystem fs;
		try {
			fs = path.getFileSystem(conf);
			if (fs.exists(path)) {
				fs.delete(path, true);
		    }
		} catch (Exception e) {
			e.printStackTrace();
			throw new KettleFileException(e.getCause());
		}
		Writer writer = OrcFile.createWriter(path,
				OrcFile.writerOptions(conf)
		          .setSchema(schema)
		          .stripeSize(67108864)
		          .bufferSize(131072)
		          .blockSize(134217728)
		          .compress(CompressionKind.ZLIB)
		          .version(OrcFile.Version.V_0_12));
		//要写入的内容
		Object[][] contents = new Object[][]{
				{1l,1.1,false,"2016-10-21 14:56:25","abcd"},
				{2l,1.2,true,"2016-10-22 14:56:25","中文"}
				};
		
		VectorizedRowBatch batch = schema.createRowBatch();
		for(Object[] content : contents) {
			int rowCount = batch.size++;
			((LongColumnVector) batch.cols[0]).vector[rowCount] = (long) content[0];
			((DoubleColumnVector) batch.cols[1]).vector[rowCount] =(double) content[1];
			((LongColumnVector) batch.cols[2]).vector[rowCount] =content[2].equals(true)?1:0;
			((TimestampColumnVector) batch.cols[3]).time[rowCount] 
					= (Timestamp.valueOf((String) content[3])).getTime();
			((BytesColumnVector) batch.cols[4]).setVal(rowCount, content[4].toString().getBytes("UTF8"));
			//batch full
			if (batch.size == batch.getMaxSize()) {
			    writer.addRowBatch(batch);
			    batch.reset();
			}
		}
		if(batch.size>0){
			writer.addRowBatch(batch);
		}
		writer.close();

4、Hive建表及load orc文件

create table testtype(field1 bigint, f2 double, f3 boolean,field4 timestamp,f5 string) stored AS orc;

load data inpath '/user/test/test_orc_file_datatype.orc' overwrite into table testtype;

在创建文件以及将orc文件导入到Hive表中时,需要注意的是:

当字段为boolean类型时,则schema为boolean,写入为long(true为1,false为0),创建hive表为boolean,建表时字段无需与schema中字段同名,但是必须保证顺序一致。

可以参考:Using Core Java

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下代码在 HDFS创建目录: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class CreateDirectory { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path path = new Path("/test"); boolean success = fs.mkdirs(path); if (success) { System.out.println("Directory created"); } else { System.out.println("Failed to create directory"); } fs.close(); } } ``` 其中,`Configuration` 是 Hadoop 的配置类,`FileSystem` 是 Hadoop文件系统类,`Path` 是 Hadoop 的路径类。`fs.mkdirs(path)` 方法用于创建目录,返回值为 `true` 表示创建成功,返回值为 `false` 表示创建失败。最后需要调用 `fs.close()` 方法关闭文件系统。 ### 回答2: Hadoop Distributed File System(HDFS)是一个分布式文件系统,用于在大型集群中存储和管理数据。在HDFS创建目录,可以使用Java API来实现。在这篇文章中,我们将探讨如何使用Java APIHDFS创建目录。 首先,确保你已经安装了Java运行环境和Hadoop分布式环境,并可以启动一个HDFS。启动Hadoop检查守护进程: ``` $ start-dfs.sh ``` 接下来,我们将创建一个Java类,命名为HdfsCreateDir,并添加以下代码: ``` import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.net.URI; public class HdfsCreateDir { public static void main(String[] args) throws Exception { //指定namenode String uri = "hdfs://localhost:9000/"; //获取Configuration对象 Configuration conf = new Configuration(); //获取FileSystem对象 FileSystem fs = FileSystem.get(URI.create(uri), conf); //创建一个路径 Path dir = new Path("/testDir"); //使用 mkdirs 在hdfs创建一个新的目录 fs.mkdirs(dir); //关闭文件系统对象 fs.close(); } } ``` 代码解释: 我们首先指定namenode的URI(Universal Resource Identifier),这里我们使用localhost:9000。 然后获取Configuration对象,并使用这个对象来获取FileSystem对象。 接着创建一个路径对象dir,路径为“/testDir”。 最后,我们使用mkdirs方法在HDFS创建一个新的目录。如果目录已经存在,这个方法将返回false,否则它将返回true。最后我们要记得关闭文件系统对象。 最后,使用javac编译这个类,然后使用java运行这个程序: ``` $ javac HdfsCreateDir.java $ java HdfsCreateDir ``` 当程序运行时,Hadoop将在HDFS创建一个名为“/testDir”的新目录。你可以使用hadoop fs -ls命令检查目录是否已创建: ``` $ hadoop fs -ls / Found 1 items drwxr-xr-x - root supergroup 0 2021-06-24 09:24 /testDir ``` 以上就是使用Java APIHDFS创建目录的方法。这个过程简单易行,只需要几行代码即可。需要注意的是,在创建路径对象时,应该指定完整的路径名(包括根目录“/”)。另外,我们使用的是fs.mkdirs()方法,因为这个方法可以在遇到不存在的目录时自动创建它们。 ### 回答3: HDFSHadoop Distributed File System)是分布式存储和处理大量数据的开源框架,它支持大规模数据存储和高吞吐量的数据访问,因此广泛应用于大规模数据处理和分析领域。 在HDFS创建目录可以使用Java API实现,具体步骤如下: 1. 加载Hadoop的配置文件Java程序中操作HDFS,需要引入Hadoop的jar包,并加载相关配置文件,将Hadoop配置文件加载到程序中,以便程序能够连接HDFS。 ``` Configuration conf = new Configuration(); conf.addResource(new Path("core-site.xml")); conf.addResource(new Path("hdfs-site.xml")); ``` 2. 获取HDFS文件系统对象 要操作HDFS文件或目录,需要获取HDFS文件系统对象,在Java中可以使用FileSystem类的get方法获取HDFS文件系统对象。 ``` FileSystem fs = FileSystem.get(conf); ``` 3. 创建目录 要在HDFS创建目录,可以使用FileSystem类的mkdirs方法。mkdirs方法会递归创建目录,如果目录已经存在则不进行任何操作。 ``` Path dir = new Path("/test"); // 要创建的目录路径 boolean success = fs.mkdirs(dir); // 在HDFS创建目录 ``` 4. 关闭HDFS文件系统对象 在操作完成后,需要关闭HDFS文件系统对象,释放资源。 ``` fs.close(); ``` 至此,使用Java APIHDFS创建目录的步骤已经完成。完整的代码示例如下: ``` Configuration conf = new Configuration(); conf.addResource(new Path("core-site.xml")); conf.addResource(new Path("hdfs-site.xml")); FileSystem fs = FileSystem.get(conf); Path dir = new Path("/test"); boolean success = fs.mkdirs(dir); fs.close(); ``` 注:以上代码中,"core-site.xml"和"hdfs-site.xml"是Hadoop的配置文件,需要根据实际情况进行配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值