博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop集群环境搭建
阅读量:5068 次
发布时间:2019-06-12

本文共 7143 字,大约阅读时间需要 23 分钟。

(1)、在虚拟机中设置静态主机IP

①、获取当前IP地址的网段
②、子网掩码以及网关

③、在虚拟机外部将其Ping通

 

(2)、修改主机名

临时修改

hostname 主机名称
永久修改
sudo vi /etc/sysconfig/network 文件
修改hostname属性

权限不够时可以通过su root -->sudo vi /etc/sudoers添加权限,如下

 

 

 

(3)、关闭防火墙

查看防火墙运行状态  sudo service iptables status
临时关闭防火墙  sudo service iptables stop

关闭防火墙服务  sudo chkconfig iptables off/on

(4)、安装远程客户端

1.filezilla.exe

2.SecureCRT
3.notepad++  (NTP.dll插件放入Notepad++\plugins下)

(5)、由于使用的时CentOS6.5自带java版本较低需删除,重新配置jdk1.7

①、卸载已有JDK

1.查看java相关的安装文件

sudo rpm -qa|grep java

2.卸载已安装的java文件

sudo rpm -e --nodeps 文件名1 文件名2 ...

②、安装JDk

1.上传JDK的安装包 1.7 (使用filezilla来上传安装包)

2.在/opt目录下新建两个子目录
softwares 存放上传的软件
modules 存放执行的文件

3.进入softwares目录
cd softwares

4.移动上传的文件到该目录

sudo mv ~/jdkxxxxx .
sudo mv ~/hadoopxxxx .

5.将文件解压到modules目录

sudo tar -zxvf jdk-7u80-linux-x64.tar.gz -C ../modules/

6.配置Java的环境变量

sudo vi ~/.bash_profile(环境变量配置文件),配置内容如下

 

7.使新增内容生效

source ~/.bash_profile

8.查看是否配置成功

   java -version  查看已安装的java版本

  javac   查看是否可编译java文件

 

(6)、SSH免登陆

ssh远程访问协议,用于多台虚拟机直接的交互
1.开启ssh免登录
sudo vi /etc/ssh/sshd_config

2.生成ssh免登录的公钥与密钥

ssh-keygen -t rsa (过程中不停回车,设置密码均为空)

 

3.查看隐藏文件

ls -al (~目录下有.ssh文件)

4.保存公钥到authorized_keys文件中

cat id_rsa.pub >> authorized_keys

5.对.ssh目录和authorized_keys进行授权

sudo chmod 600 authorized_keys (.ssh)
sudo chmod 750 .ssh (~目录下)

同时将"/"下的opt改为对应的当前用户名所有(sudo chown -R hadoop:hadoop /opt   [-R]表示循环改变)如下

 

设置主机名对应的ip

sudo vi /etc/hosts
ip地址 主机名

 

6.测试

  ssh 主机名

  ssh Master

 (7)、在/opt/modules/hadoop-2.6.5/etc/hadoop下的文件修改

①、core-site.xm下添加

fs.defaultFS
hdfs://Master:8020
hadoop.tmp.dir
/opt/modules/hadoop-2.6.5/tmp

②、在hadoop-env.sh、mappred-env.sh、yarn-env.sh下修改JAVA_HOME

export JAVA_HOME=/opt/modules/jdk1.7.0_80  

③、在hdfs-site.xml下修改为:

dfs.replication
3
dfs.namenode.secondary.http-address
Master:50090

④、搭建集群时,主机要管理所有节点,修改slaves

MasterSlave1Slave2

⑤、修改yarn-site.xml

yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
Master

 ⑥、按同样的方式搭建好其余两台主机,主机名分别叫Slave1和Slave2,不同的是在slave文件中只有各自对应的Slave1和Slave2一个节点,同时修改修改yarn-site.xml

mapreduce.framework.name
yarn

(8)、在三台主机都添加上主机名

  sudo vi /etc/hosts

    192.168.9.111     Master

    192.168.9.112     Slave1

    192.168.9.113     Slave2

(9)、设置多台主机可直接ssh免登入

  ssh-copy-id -i ~/.ssh/id_rsa.pub

(10)、删除hadoop-2.6.5下的tmp和logs文件,格式化硬盘,启动hdfs文件系统以及查看开启的节点

  rm -rf logs

  rm -rf tmp(这两步三台主机都要进行)

  bin/hdfs namenode -format    格式化硬盘

  sbin/start-all.sh       启动HDFS文件关系系统

  jps             查看开启节点数

(11)、登入http://192.168.9.111:50070查看详细信息,可以看到如下信息,说明三台主机可以正常工作了


 

利用web端实现对HDFS系统的管理

 bin/hdfs dfs -mkdir /user   创建user文件夹

 bin/hdfs dfs -mkdir /user/<username>  创建username文件夹,此处我的是hadoop

bin/hdfs dfs -put etc/hadoop input  将创建的input的复制到HDFS文件管理系统中

其中Dao的写法如下:

package com.gqx.dao;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.net.URLEncoder;import java.util.List;import javax.servlet.http.Part;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileStatus;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;public class FileDao {	public FileStatus[] getAllFile() throws IOException{		System.setProperty("HADOOP_USER_NAME","hadoop");		System.setProperty("hadoop.home.dir","D:\\hadoop-2.6.5");		Configuration conf = new Configuration();		FileSystem fs =FileSystem.get(conf);		FileStatus[] list =fs.listStatus(new Path("/user/hadoop/input"));		return list;	}	public boolean delete(String name) throws IOException{		System.setProperty("HADOOP_USER_NAME","hadoop");		System.setProperty("hadoop.home.dir","D:\\hadoop-2.6.5");		Configuration conf = new Configuration();		FileSystem fs =FileSystem.get(conf);		return fs.delete(new Path("/user/hadoop/input/"+name),true);	}	public boolean upload(Part part) throws IOException{		System.setProperty("HADOOP_USER_NAME","hadoop");		System.setProperty("hadoop.home.dir","D:\\hadoop-2.6.5");		//创建HDFS文件系统		Configuration conf = new Configuration();		FileSystem hadoopFS= FileSystem.get(conf);		InputStream in=part.getInputStream();		Path path = new Path("/user/hadoop/input");		FSDataOutputStream fsout=hadoopFS.create(new Path(path+"/"+part.getSubmittedFileName()));		byte[] buf=new byte[1024];		int readbytes=0;		while((readbytes=in.read(buf))>0){			fsout.write(buf,0,readbytes);		}		in.close();		fsout.close();		return true;	}	public FSDataInputStream download(String name) throws IOException{		System.setProperty("HADOOP_USER_NAME","hadoop");		System.setProperty("hadoop.home.dir","D:\\hadoop-2.6.5");		//创建HDFS文件系统		Configuration conf = new Configuration();		FileSystem hadoopFS= FileSystem.get(conf);		// 如果文件名是中文,需要进行url编码		FSDataInputStream fsin = hadoopFS.open(new Path("/user/hadoop/input/"+name));		return fsin;	}}  

文件下载的servlet如下:

package com.gqx.servlet;import java.io.IOException;import java.io.OutputStream;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.hadoop.fs.FSDataInputStream;import com.gqx.dao.FileDao;/** * Servlet implementation class DownloadServlet */@WebServlet("/DownloadServlet")public class DownloadServlet extends HttpServlet {	private static final long serialVersionUID = 1L;           /**     * @see HttpServlet#HttpServlet()     */    public DownloadServlet() {        super();        // TODO Auto-generated constructor stub    }	/**	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)	 */	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		// TODO Auto-generated method stub		String name=request.getParameter("name");		FileDao dao = new FileDao();		//name = URLEncoder.encode(name, "UTF-8");		FSDataInputStream fsin = dao.download(name);		System.out.println(name);		response.setHeader("content-disposition", "attachment;fileName=" + 				new String(name.getBytes("GBK"),"ISO-8859-1"));		OutputStream out = response.getOutputStream();		byte[] b = new byte[1024];		int len=-1;		while((len=fsin.read(b)) != -1){			out.write(b,0,len);		}		out.close();		fsin.close();	}	/**	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)	 */	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		// TODO Auto-generated method stub		doGet(request, response);	}}

  

文件的目录和最终效果如下

 

 

 

 

 

  

  

 

转载于:https://www.cnblogs.com/helloworldcode/p/8297111.html

你可能感兴趣的文章
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
SVN使用教程总结
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
虚拟中没有eth0
查看>>
Unity 3D游戏开发学习路线(方法篇)
查看>>
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
IOS-图片操作集合
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
泛型第23条:请不要在新代码中使用原生态类型
查看>>
团队项目开发客户端——登录子系统的设计
查看>>
【AppScan心得】IBM Rational AppScan 无法记录登录序列
查看>>
[翻译] USING GIT IN XCODE [4] 在XCODE中使用GIT[4]
查看>>
简化通知中心的使用
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
html 简介
查看>>
session如何保存在专门的StateServer服务器中
查看>>