`

java 远程连接Pseudo-Distributed Hadoop

阅读更多
本文主要描述如何实现在一台Linux机器上搭建一个Pseudo-Distributed的Hadoop,在另外一台机器上通过API访问
服务器端环境搭建:
1.版本信息
  java:1.8.0_172
  Hadoop: 2.9.1

2.设置JAVA_HOME
  在~/.bash_profile中追加如下内容
 
 
  JAVA_HOME=/usr/java/jdk1.8.0_172-amd64
  export JAVA_HOME
  

  执行如下命令使上述设置立即生效
 
 source ~/.bash_profile

3.设置hostname
 
hostname docker05

4.下载hadoop, 点击下载
5.解压下载的文件
$ tar xzvf hadoop-2.9.1.tar.gz

6.修改配置文件
6.1 修改etc/hadoop/core-site.xml文件,追加如下内容
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://docker05:9000</value>
  </property>
</configuration>

6.2 修改etc/hadoop/hdfs-site.xml文件,追加如下内容
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
   <name>dfs.permissions.enabled</name>
   <value>false</value>
  </property>
</configuration>

6.3 修改etc/hadoop/hadoop-env.sh,将JAVA_HOME修改成正确值
# The java implementation to use.
export JAVA_HOME=/usr/java/jdk1.8.0_172-amd64

7. 配置无密码登录
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  $ chmod 0600 ~/.ssh/authorized_keys

8. 格式化name node
$ bin/hdfs namenode -format

9.启动 dfs
sbin/start-dfs.sh


客户端环境
1.配置hostname
在客户端机器上也需要设置hostname,如192.168.0.172 docker05
2.工程目录如下


3. 工程pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>falcon.chengf</groupId>
	<artifactId>simple-hdfs-test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<dependencies>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-client</artifactId>
			<version>2.8.1</version>
		</dependency>
	</dependencies>
</project>

4.测试代码
/**
 * 
 */
package simple.hdfs.test;

import java.io.IOException;
import java.net.URI;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

/**
 * @author: 作者: chengaofeng
 * @date: 创建时间:2018-06-01 15:25:47
 * @Description: TODO
 * @version V1.0
 */
public class HdfsTest {
	public static String uri = "hdfs://docker05:9000";

	public static void main(String[] args) throws IOException {

		uploadLocalFile2HDFS("/Users/chengaofeng/Downloads/hadoop-test1.data", "/chengf/hadoop-test1.data");
	}

	public static boolean uploadLocalFile2HDFS(String localFile, String hdfsFile) throws IOException {
		if (StringUtils.isBlank(localFile) || StringUtils.isBlank(hdfsFile)) {
			return false;
		}
		hdfsFile = uri + hdfsFile;
		Configuration config = new Configuration();
		FileSystem hdfs = FileSystem.get(URI.create(uri), config);
		Path src = new Path(localFile);
		Path dst = new Path(hdfsFile);
		hdfs.copyFromLocalFile(src, dst);
		hdfs.close();
		return true;
	}
}



5.执行后到服务器端执行 hadoop fs -ls 可以看到文件正常上传了



遇到错误
1.
 starting namenodes on docker05
  docker05 Error: JAVA_HOME is not set and could not be found.
  localhost: Error:JAVA_HOME is not set and could not be found.

 
原因 hadoop-env.sh中JAVA_HOME的设置有问题
具体的修改办法如下:
vim etc/hadoop/hadoop-env.sh

将语句      export JAVA_HOME=$JAVA_HOME    

修改为      export JAVA_HOME=/usr/java/jdk1.8.0_172-amd64

保存后退出。

再次输入start-dfs.sh启动hadoop,则没有报错。
2.
权限问题
Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=chengaofeng, access=WRITE, inode="/":root:supergroup:drwxr-xr-x at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:350)

解决方法,可暂时去掉权限检查
在 hdfs-site.xml文件中追加
<property>
   <name>dfs.permissions.enabled</name>
   <value>false</value>
</property>

另一种连接方式,通过hdfs的配置文件来创建Configuration
1.工程目录


其中core-site.xml、hdfs-site.xml是从服务器上copy下来的文件
2.测试类
/**
 * 
 */
package simple.hdfs.test;

import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

/**
 * @author: 作者: chengaofeng
 * @date: 创建时间:2018-06-01 15:25:47
 * @Description: TODO
 * @version V1.0
 */
public class HdfsTest {

	public static void main(String[] args) throws IOException {
		Configuration config = new Configuration();
		InputStream input = HdfsTest.class.getResourceAsStream("/core-site.xml");
		config.addResource(input);
		InputStream input2 = HdfsTest.class.getResourceAsStream("/hdfs-site.xml");
		config.addResource(input2);
		FileSystem hdfs = FileSystem.get(config);
		uploadLocalFile2HDFS("/Users/chengaofeng/Downloads/hadoop-test1.data", "/chengf/hadoop-test2.data", hdfs);
		
		System.out.println("upload ok");
	}

	public static boolean uploadLocalFile2HDFS(String localFile, String hdfsFile, FileSystem hdfs) throws IOException {
		if (StringUtils.isBlank(localFile) || StringUtils.isBlank(hdfsFile)) {
			return false;
		}
		
		Path src = new Path(localFile);
		Path dst = new Path(hdfsFile);
		hdfs.copyFromLocalFile(src, dst);
		hdfs.close();
		return true;
	}
}

  • 大小: 32.4 KB
  • 大小: 19.4 KB
  • 大小: 38.2 KB
分享到:
评论

相关推荐

    Hadoop pseudo-distributed environment (1).mp4

    Hadoop分布式环境搭建教程一

    Hadoop pseudo-distributed environment (2).mp4

    hadoop伪分布式视频教程二

    在Ubuntu上装Hadoop

    需要配置 Java 环境变量,修改 `hadoop-env.sh` 文件,添加以下代码: ``` # The java implementation to use. Required. export JAVA_HOME=/usr/lib/j2sdk1.5-sun ``` 修改为 Java 的安装目录。 配置 ssh 需要...

    Windows-hadoop-3.1.0.7z

    【标题】"Windows-hadoop-3.1.0.7z" 提供的是Hadoop 3.1.0版本在Windows环境下的配置和使用指南,主要用于在Windows 10操作系统中,通过集成开发环境IntelliJ IDEA(简称IDEA)和构建工具Maven来与Hadoop集群交互。...

    Hadoop搭建详细流程

    - 安装Hadoop:`sudo apt-get install hadoop-0.20-conf-pseudo` - 配置Hadoop环境变量:编辑`~/.bashrc`文件,添加HADOOP_HOME路径并设置PATH。 3. 初始化Hadoop: - 启动Hadoop:`sudo service hadoop-hdfs-...

    hadoop的JAVA编程包

    - **Hadoop的开发模式**:包括本地模式(Local Mode)、伪分布式模式(Pseudo-Distributed Mode)和完全分布式模式。 4. **编写MapReduce程序** - **Mapper**:输入键值对映射为中间键值对,通常处理数据的分词、...

    hadoop2.8 window支持bin文件

    对于Hadoop的本地模式(Local Mode)或伪分布式模式(Pseudo-Distributed Mode),在Windows上,你需要修改`core-site.xml`和`hdfs-site.xml`配置文件,设置HDFS的命名节点和数据节点。在本地模式下,所有Hadoop进程...

    Hadoop完全自学手册

    8. **Hadoop环境变量**:在`hadoop-env.sh`中设置`JAVA_HOME`,确保Hadoop能找到Java环境。 9. **其他配置文件**:`mapred-env.sh`和`yarn-env.sh`也需要更新`JAVA_HOME`,确保MapReduce和YARN使用正确的Java版本。...

    hadoop环境设置.pdf

    大数据前提:hadoop环境设置。 Hadoop 的安装方式有三种模式:单机模式(Standalone Mode)、伪分布式模式(Pseudo- Distributed Mode)、完全分布式模式(Fully-Distributed Mode)

    hadoop单节点配置

    Hadoop 支持三种模式:Local(Standalone)Mode、Pseudo-Distributed Mode 和 Fully-Distributed Mode。在单节点模式下,Hadoop 默认情况下运行于 Local Mode,作为一个单一的 JAVA 进程,多用于调试。 配置文件 ...

    Hadoop部署实验.docx

    2. Pseudo-Distributed mode 伪多节点安装 Hadoop 3. Cluster mode 多节点安装 Hadoop 三、实验内容 1. 配置必要的运行环境 2. Standalone mode 单节点安装 Hadoop 3. Pseudo-Distributed mode 伪多节点安装 ...

    hadoop2.7.2(window版本).zip

    Hadoop在Windows上的运行模式通常有本地模式(Local Mode)、伪分布式模式(Pseudo-Distributed Mode)和完全分布式模式(Fully-Distributed Mode)。对于初学者,本地模式最简单,它在单个Java进程中模拟整个Hadoop...

    hadoop伪分布式集群搭建

    在实际应用中,Hadoop通常运行在由多台服务器组成的集群环境中,但为了方便学习和测试,可以搭建一个伪分布式集群(Pseudo Distributed Cluster)。伪分布式集群是指所有Hadoop守护进程都在同一台机器上运行,每个...

    HDFS部署与Shell命令使用

    2. **伪分布式模式(Pseudo-Distributed Mode)**: - **定义**:在这种模式下,所有守护进程都在同一台机器上运行,但它们以不同的进程运行,可以模拟分布式环境进行调试和测试。 - **特点**:支持多用户访问,具备...

    Hadoop简介及Apache Hadoop三种搭建方式

    2. **伪分布式模式(Pseudo-Distributed Mode)**:在一台机器上模拟分布式环境,每个Hadoop守护进程(如NameNode、DataNode、ResourceManager等)都在单独的Java进程中运行。这提供了一种在单一节点上验证Hadoop...

    hadoop_windows编译版本

    接下来,解压下载的Hadoop压缩包,例如本例中的hadoop-2.6.1。然后,你需要修改Hadoop配置文件,如`core-site.xml`、`hdfs-site.xml`和`mapred-site.xml`。这些XML文件中包含了Hadoop集群的相关设置,如命名节点...

    hadoop-3.2.2环境搭建操作安装指南

    提供的文件`hadoop-3.2.2.tar.gz.tar.gz.tar.gz`是Hadoop的压缩包,需要进行多次解压才能得到最终的Hadoop安装文件。解压后,将其移动到一个合适的目录,例如 `/usr/local/hadoop`。然后,设置Hadoop的环境变量,...

Global site tag (gtag.js) - Google Analytics