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