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文件所在路径下。
