伪分布式Hadoop(专业见习)

step1 关闭防火墙

systemctl disable firewalld.service

 

step2 需要修改主机名

hostnamectl set-hostname 你想叫的名

 

step3 将IP和主机名进行映射

vim /etc/hosts
添加 IP 主机名
例如 192.168.33.27 anyi
:wq

 

step4 根目录下新建个java和Hadoop目录吧,文件xftp移进去

mkdir /java
cd /java
tar -xzvf jdk-8u171-linux-x64.tar.gz -C /java

mkdir hadoop
cd /hadoop
tar -xzvf hadoop-2.7.3.tar.gz -C /hadoop

 

step5 添加java系统路径

vi /etc/profile
export JAVA_HOME=/java/jdk1.8.0_171
export CLASSPATH=\$JAVA_HOME/lib
export PATH=\$JAVA_HOME/bin:$PATH
:wq

 

step6 配置hadoop文件

cd /hadoop/hadoop-2.7.3/etc/hadoop
接下来要编辑的文件全在这个目录

vi hadoop-env.sh
(修改)以下内容
export JAVA_HOME=/java/jdk1.8.0_171
export HADOOP_CONF_DIR=/hadoop/hadoop-2.7.3/etc/hadoop
:wq

内容都粘贴至<configuration>便签内,注意缩进
vi core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://你主机名:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.7.3/tmp</value>
</property>
:wq

vi hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
:wq

cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
:wq

vi yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>你主机名</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
:wq

vi slaves
添加个你的主机名
:wq

 

step7 添加hadoop系统路径

vim /etc/profile
添加以下内容
export HADOOP_HOME=/hadoop/hadoop-2.7.3
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
重启配置
source /etc/profile

 

step8 格式化与启动服务

hadoop namenode -format
如果看到以下文字
common.Storage: Storage directory /hadoop/hadoop-2.7.3/tmp/dfs/name has been successfully formatted.
表示格式化没有问题

start-all.sh
启动服务
jps
出现6条则成功

 

step9 开始表演

打开浏览器登录
http://你的Ip:50070
http://你的Ip:8088
有两个服务器网页
上传个文件看看
hadoop fs -put /hadoop/hadoop-2.7.3.tar.gz /
没有提示则上传成功
在http://你的Ip:50070上Utilities下的Browse目录上就可以看到你上传的文件

 

Step10 导包

打开ecplice新建一个Java项目进行导包:

将hadoop-2.7.1_64bit.tar.gz解压
hadoop-2.7.1_64bit/hadoop-2.7.1/share/hadoop/common 下的三个.jar文件
hadoop-2.7.1_64bit/hadoop-2.7.1/share/hadoop/common/lib 下所有.jar文件
hadoop-2.7.1_64bit/hadoop-2.7.1/share/hadoop/hdfs 下的三个.jar文件
hadoop-2.7.1_64bit/hadoop-2.7.1/share/hadoop/hdfs/lib 下所有.jar文件

虚拟机里touch 个 a.txt,上传测试

——已更新作业答案——上传促销日期(spec.txt)

package com.hadoop;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Serializable;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

public class HDFSDemo {
	
	public static void main(String[] args) throws Exception {
		//HDFSDemo.get();
		//HDFSDemo.put();
		/*System.out.println(2.0-1.9);
		System.out.println(new Date());
		System.out.println(new GregorianCalendar());
		System.out.println(System.currentTimeMillis());
		System.out.println(1634286584834l/1000/60/60/24/365);
		System.out.println(1970+51);*/
		//定义一个日期
		String d="2021-06-15";
		//将字符串类型的值转换成Date类型
		SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd");
		Date date=fmt.parse(d);
		//获取促销日期
		Date spec=specialDay(date, 3);//计算促销日期
		//转换格式
		String spec1=fmt.format(spec);
		FileOutputStream file=new FileOutputStream("spec.txt");
		OutputStreamWriter out=new OutputStreamWriter(file);
		PrintWriter pw=new PrintWriter(out);
		pw.println(spec1);
		pw.close();
		HDFSDemo.solve();
		System.out.println("成功");
	}
	
	//下载
	//修饰词+返回值类型+方法名+参数列表+方法体
	
	public static void get() throws IOException {
		//连接HDFS
		//uri-连接地址
		//conf-代码中自主指定的配置
		Configuration conf=new Configuration();
		
		FileSystem fs=FileSystem.get(URI.create("hdfs://192.168.33.27:9000"),conf);
		//指定下载文件
		InputStream in=fs.open(new Path("/a.txt"));
		//创建一个输出流
		FileOutputStream out=new FileOutputStream("a.txt");
		//读写文件
		byte[] bs=new byte[1024];
		int len;
		while((len=in.read(bs))!=-1) {
			out.write(bs,0,len);
		}
		//关闭
		out.close();
		in.close();
		
	}
	
	//上传
	public static void put() throws Exception {
		//连接HDFS
		//配置Config属性
		Configuration conf=new Configuration();
		conf.set("dfs.replication", "3");
		FileSystem fs=FileSystem.get(URI.create("hdfs://192.168.33.27:9000"),conf,"root");
		//指定上传文件
		OutputStream out=fs.create(new Path("a.txt"));
		//创建一个输入流读取文件
		FileInputStream in=new FileInputStream("b.txt");
		//读写文件
		IOUtils.copyBytes(in, out, conf);
		in.close();
		out.close();
	}
	
	
	//删除
	public void delete() throws Exception {
		Configuration conf=new Configuration();
		FileSystem fs=FileSystem.get(URI.create("hdfs://192.168.33.27:9000"),conf,"root");
		fs.delete(new Path("/a.txt"));
		
	}
	
	//商品促销日期
	public static Date specialDay(Date proc,int exp){
		Calendar cal=new GregorianCalendar();
		cal.setTime(proc);//生产日期
		cal.add(Calendar.MONTH, exp);//过期日
		cal.add(Calendar.WEEK_OF_YEAR, -2);//回调2周
		cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
		return cal.getTime();
	}
	
	
	
	//------------------作业-------------------
	public static void solve() throws Exception {
		Configuration conf=new Configuration();
		conf.set("dfs.replication", "3");
		FileSystem fs=FileSystem.get(URI.create("hdfs://192.168.33.27:9000"),conf,"root");
		OutputStream out=fs.create(new Path("spec.txt"));
		out.close();
	};
}

 

  会发现a.txt已经下载至java文件所在路径下。

 

posted @ 2021-10-14 10:51  anyiya  阅读(82)  评论(0编辑  收藏  举报