• 『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现


    『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现

    1.基本设定和软件版本

    主机名

    ip

    对应角色

    master

    192.168.56.4

    NameNode

    slave1

    192.168.56.3

    DataNode1

    slave2

    192.168.56.5

    DataNode2

    • Windows主机设置的ip为192.168.56.88
    • hadoop压缩包解压地址:/usr/local/hadoop
    • 虚拟机用户都为ljy
    • VirtualBox-5.1.18、CentOS-6.8、hadoop-2.7.3.tar.gz、jdk1.7.0_79,且都是64位版本。
    • Centos6.8:链接:http://pan.baidu.com/s/1qYdjAY4 密码:7gxm
    • 此处连接方式使用Host-only模式,虚拟机不能联网;如使用网络地址转换(NAT),虚拟机可以联网。

     

    图1 Host-Only

     

    图2 windows ip

    2.VirtualBox安装Centos6.8

        这个网上教程太多,这里不详细介绍了。

    3.FileZilla

        FileZilla是一款免费开源的ftp软件,此处用于Windows电脑和Centos虚拟机之间互传文件。

     

    图3 FileZilla

    4.安装jdk1.7.0-79

    • l 查看系统自带的jdk并将其全部卸载:rpm -qa | grep jdk
    • l 下载jdk包,并将其解压到/usr/java路径下。
    • l 配置全局java环境变量(以root用户执行):vim /etc/profile
    • l 在profile中的添加以下内容:
    1. export JAVA_HOME=/usr/java/jdk1.7.0_79
    2. export JRE_HOME=/usr/java/jdk1.7.0_79/jre
    • l 使profile配置生效:source /etc/profile
    • l 检测已经安装的jdk:java -version
    • l 注意:其他DataNode执行上述同样操作。

     

    图4  /etc/profile文件中添加的内容

     

    图5 安装的jdk

    5.设置NameNode的ip

    方法一:

    • l 切换到root,输入密码:su
    • l 进入设置界面:setup
    • l 选择网络设置
    • l 选择设备设置
    • l 选择eth0
    • l 进行网络配置
    • l 注意:其他DataNode执行上述同样操作。

     

    图6 选择网络设置

     

    图7 选择设备设置

     

    图8 选择eth0

     

    图9 NameNode的网络设置

    方法二:

    • l 打开网络连接,直接设置

     

    图10 网络连接设置

    方法三:

    • l 编辑eth0文件:sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
    • l 在文件中修改BOOTPROTO=static,添加IPADDR、NETMASK和GATEWAY。

     

    图11 配置eth0

     

    图12 windows电脑ping通NameNode

    6.给用户增加sudo权限(此处用户名为ljy)

    • l 切换到root,输入密码:su
    • l 给sudoers增加写权限:chmod u+w  /etc/sudoers
    • l 编译sudoers文件:vim  /etc/sudoers 
    • l 在#%wheel ALL=(ALL)  NOPASSWD: ALL下方增加 xxx   ALL=(ALL)  NOPASSWD: ALL,注意xxx为用户,此处为ljy
    • l 去掉sudoers文件的写权限:chmod u-w /etc/sudoers
    • l 注意:其他DataNode执行上述同样操作。

     

    图13 /etc/sudoers文件中增加的语句

     

    7.配置每台机器的机器名和对应IP

    • l 编辑hosts文件:sudo vim /etc/hosts
    • l 编辑network文件,修改HOSTNAME为master:sudo vim /etc/sysconfig/network,注意:此处例子master为NameNode机器的机器名。
    • l 使文件立即生效:source /etc/sysconfig/network
    • l 注意:其他DataNode执行上述同样操作。只有/etc/sysconfig/network中的hostname需要改为对应机器的机器名,例如:slave1。

     

    图14 在/etc/hosts文件中添加的内容

     

    图15 /etc/sysconfig/network文件中修改HOSTNAME为master

     

    图16 修改机器名和对应IP

    8.永久关闭防火墙

    • l 永久关闭防火墙,重启后生效:chkconfig iptables off
    • l 即时性关闭防火墙,重启后失效:service iptables stop 
    • l 此处执行这两条语句就不用重启了。
    • l 注意:其他DataNode执行上述同样操作。

     

    图17 永久关闭防火墙

    9.配置SSH免密码登录

    • 检查是否安装了ssh,若没有安装,则安装(以下指令并非都要执行):
    • l 检查是否安装ssh:rpm -qa| grep ssh 
    • l 查看ssh运行状态:service sshd status
    • l 安装ssh:yum install ssh
    • l 查看是否开机启动:chkconfig --list sshd
    • l 设置开机启动:chkconfig sshd on
    • l 注意:其他DataNode执行上述同样操作。

     

    图18 设置ssh开机启动

    配置ssh免密码登录:

    • l 进入~/.ssh目录:cd ~/.ssh
    • l 每台机器执行:ssh-keygen -t rsa,一路回车。
    • l 生成两个文件,一个私钥,一个公钥,把id_rsa,pub文件追加到授权key(authorized_keys):cat  ~/.ssh/id_rsa.pub  >>  ~/.ssh/authorized_keys
    • l 通过ssh localhost命令登录本机,首次时会让输入yes/no,但是不需要密码:ssh localhost
    • l 如果目录没有通过NFS共享,需要利用此方法共享公钥(此处是master把公钥发给slave1,别的就类似互相共享):ssh-copy-id slave1。
    • l 注意:其他DataNode执行上述同样操作。

     

    图19 ssh-keygen -t rsa命令执行后~/.ssh文件中

     

    图20 设置ssh无密码登录

     

    图21 master把公钥发送给slave1

     

    图22 ssh免密码登录

    10.安装hadoop 2.7.3

    • l 转换到用户ljy下:su - ljy
    • l 获取管理员权限:su
    • l 输入管理员密码:
    • l 新建hadoop文件夹:mkdir  /usr/local/hadoop 
    • l 将hadoop包移动到hadoop文件夹中:mv  /home/ljy/下载/hadoop-2.7.3.tar.gz  /usr/local/hadoop
    • l 移动到hadoop文件中:cd  /usr/local/hadoop
    • l 解压hadoop包:tar  zxvf  hadoop-2.7.3.tar.gz
    • l 将hadoop-2.7.3重命名为hadoop: mv  hadoop-2.7.3  hadoop
    • l 注意:其他DataNode执行上述同样操作。

    将hadoop文件的拥有者改为ljy用户和组

    • l 引动到hadoop解压的路径:cd /usr/local/hadoop
    • l 将hadoop文件的拥有者改为ljy用户:sudo chown -R ljy:ljy hadoop
    • l 查看/hadoop目录下所有用户属于ljy的文件或者文件夹:find /hadoop -user ljy

    配置环境变量

    • l 编辑/etc/profile文件:vim /etc/profile
    • l 在profile文件中添加的内容:export HADOOP_HOME=/usr/local/hadoop/hadoop、export PATH=$HADOOP_HOME/bin:$PATH
    • l 使环境变量生效:source /etc/profile
    • l 注意:其他DataNode执行上述同样操作。

     

    图23 hadoop文件夹中的文件目录

     

    图24 /etc/profile文件中添加的内容

    配置Hadoop:

    • l 移动到hadoop配置文件路径:cd  /usr/local/hadoop/hadoop/etc/hadoop
    • l 查看当前文件夹中的文件目录:ls

     

    图25 hadoop配置文件夹中的文件目录

    • l 配置hadoop-env.sh:export JAVA_HOME=/usr/java/jdk1.7.0_79
    • l 添加masters,内容为slave1:vim masters
    • l 配置通用属性:vim core-site.xml
     1  <configuration>  
     2 
     3       <property>  
     4 
     5         <!-- NameNode 地址 -->
     6 
     7         <name>fs.defaultFS</name>  
     8 
     9         <value>hdfs://master:9000</value>  
    10 
    11       </property>  
    12 
    13       <property>  
    14 
    15         <!-- 临时目录设定 -->
    16 
    17         <name>hadoop.tmp.dir</name>  
    18 
    19         <value>file:/usr/local/hadoop/hadoop/tmp</value>  
    20 
    21       </property>  
    22 
    23       <property>
    24 
    25         <name>fs.checkpoint.period</name>
    26 
    27         <value>3600</value>
    28 
    29       </property>
    30 
    31       <property>
    32 
    33         <name>fs.checkpoint.size</name>  //以日志大小间隔  做备份间隔
    34 
    35         <value>67108864</value>
    36 
    37         </property>
    38 
    39 </configuration>  

     

    图26 core-site.xml配置内容

    • l 配置HDFS属性:vim hdfs-site.xml
     1  <configuration>  
     2      <property>
     3        <name>dfs.namenode.secondary.http-address</name>
     4        <value>slave1:50090</value>
     5       //注意:此处机器名要为另一个。
     6      </property>
     7      <property>
     8        <name>dfs.http.address</name>
     9        <value>master:50070</value>
    10      </property>
    11      <property>
    12        <!-- 缺省的块复制数量,默认为3 -->  
    13        <name>dfs.replication</name>  
    14        <value>2</value>  
    15      </property>  
    16      <property>
    17        <!-- -->  
    18        <name>dfs.webhdfs.enable</name>  
    19        <value>true</value>  
    20      </property>
    21      <property>
    22        <!-- 关闭hdfs权限验证  -->  
    23        <name>dfs.permissions</name>  
    24        <value>false</value>  
    25      </property>
    26      <property>  
    27        <!-- 存贮在本地的名字节点数据镜象的目录,作为名字节点的冗余备份 -->
    28        <name>dfs.namenode.name.dir</name>  
    29        <value>file:/usr/local/hadoop/hadoop/hdfs/name</value>  
    30      </property>  
    31      <property> 
    32        <!-- 数据节点的块本地存放目录 -->
    33        <name>dfs.datanode.data.dir</name>  
    34        <value>file:/usr/local/hadoop/hadoop/hdfs/data</value>  
    35      </property>  
    36    </configuration> 

    图27 hdfs-site.xml配置内容

    • l 复制mapred-site.xml.template并重命名为mapred-site.xml:cp mapred-site.xml.template mapred-site.xml
    • l 配置MapReduce属性:vim mapred-site.xml
     1  <configuration>
     2 
     3     <property>
     4 
     5       <name>mapreduce.framework.name</name>
     6 
     7       <value>yarn</value>
     8 
     9 </property>
    10 
    11     <property>
    12 
    13       <name>mapreduce.jobhistory.address</name>
    14 
    15       <value>master:10020</value>
    16 
    17     </property>
    18 
    19     <property>
    20 
    21        <name>mapreduce.jobhistory.webapp.address</name>
    22 
    23        <value>master:19888</value>
    24 
    25     </property>
    26 
    27   </configuration>

    图28 mapred-site.xml配置内容

     

    图29 配置core-site.xml、hdfs-site.xml、mapred-site.xml

    • l 配置yarn-site.xml:vim yarm-site.xml
     1  <configuration>   
     2 
     3     <!-- Site specific YARN configuration properties -->  
     4 
     5     <property>  
     6 
     7       <name>yarn.nodemanager.aux-services</name>  
     8 
     9       <value>mapreduce_shuffle</value>  
    10 
    11     </property>  
    12 
    13 <property>             
    14 
    15   <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>  
    16 
    17       <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
    18 
    19     </property>  
    20 
    21     <property>  
    22 
    23       <name>yarn.resourcemanager.address</name>  
    24 
    25       <value>master:8032</value>  
    26 
    27     </property>  
    28 
    29     <property>  
    30 
    31       <name>yarn.resourcemanager.scheduler.address</name>  
    32 
    33       <value>master:8030</value>  
    34 
    35     </property>  
    36 
    37     <property>  
    38 
    39       <name>yarn.resourcemanager.resource-tracker.address</name>  
    40 
    41       <value>master:8031</value>  
    42 
    43     </property>  
    44 
    45     <property>  
    46 
    47       <name>yarn.resourcemanager.admin.address</name>  
    48 
    49       <value>master:8033</value>  
    50 
    51     </property>  
    52 
    53     <property>  
    54 
    55       <name>yarn.resourcemanager.webapp.address</name>  
    56 
    57       <value>master:8088</value>  
    58 
    59     </property>  
    60 
    61   </configuration>  

    图30yarn-site.xml配置内容

     

    • l 配置slaves:vim slaves

    slave1

    slave2

    11.复制NameNode作为DataNode

     

    图31 NameNode和DataNode

    • l 复制master,并重命名为slave1和slave2。
    • l 运行slave2,将hostname改为slave2。
    • l 将网络连接的ip改为192.168.56.5。
    • l 对slave1的操作同对slave2的操作一样。

    图32 master ping slave2

    • l master ping windows时,需要关闭windows的防火墙。

     

    图33 master ping windows

     

    图34 windows ping master

     

    图35 slave1 ping slave2

    12.在master节点格式化hdfs

    • l 到bin路径下:cd /usr/local/hadoop/hadoop/bin
    • l Hadoop初始化:hdfs namenode -format

    13.启动HDFS和YARN

    • l 到sbin路径下:lcd /usr/local/hadoop/hadoop/sbin
    • l 启动全部服务:start-all.sh
    • l 查看:jps

    图36 master

    图37 slave1

    图38 slave2

     

    图39 HDFS管理界面

     

    图40 YARN管理界面

     

    14. MyEclipse开发环境配置

     

    15.使用HDFS API实现云盘基本功能

    • 配置configuration
    1 //设置configuration
    2     public static Configuration setConf(Configuration conf){
    3         conf.addResource("/core-site.xml");
    4         conf.addResource("/hdfs-site.xml");
    5         return conf;
    6     }
    • 判断是否是目录
    1 //判断是否是目录
    2     public static boolean isDirectory(String path, Configuration conf) throws IOException{
    3 
    4         FileSystem fs = FileSystem.get(conf);
    5         boolean res = fs.isDirectory(new Path(path));
    6         return res;
    7     }
    • 显示当前目录下所有文件
     1 //显示当前目录下所有文件
     2     public static List<FileStatusInfo> listAll(String dirPath,Configuration conf) throws IOException{
     3         FileSystem fs = FileSystem.get(conf);
     4         List<FileStatusInfo> fileList = new ArrayList<FileStatusInfo>();
     5         FileStatus[] dirStatus = fs.listStatus(new Path(dirPath));
     6         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//设置日期格式
     7         //判断是否是目录
     8         if(fs.isDirectory(new Path(dirPath))){
     9             for(int i = 0; i < dirStatus.length; i++){
    10                 if(dirStatus[i].getOwner().equals("ljy")){
    11                     FileStatusInfo fsi = new FileStatusInfo();
    12                     fsi.setId(i);    fsi.setName(dirStatus[i].getPath().getName());
    13                     fsi.setLen(dirStatus[i].getLen());
    14                     fsi.setModificationTime(df.format(dirStatus[i].getModificationTime()));
    15                     fileList.add(fsi);
    16                 }
    17             }
    18         }
    19         return fileList;
    20     }
    • 上传文件
    1 // 上传文件
    2     public static void copyFromLocal(String localPath, String hdfsPath, Configuration conf) throws Exception {
    3         FileSystem fs = FileSystem.get(conf);
    4         fs.copyFromLocalFile(new Path(localPath), new Path(hdfsPath));
    5         fs.close(); // 需要关闭文件流
    6     }
    • 下载文件
    1 // 下载文件
    2     public static void downFromHdfs(String localPath, String hdfspath, Configuration conf) throws Exception {
    3         FileSystem fs = FileSystem.get(conf);
    4         fs.copyToLocalFile(false,new Path(hdfspath), new Path(localPath),true);
    5         fs.close();
    6     }
    • 创建文件夹
    // 创建文件夹
        public static boolean createDir(String dirName, Configuration conf) throws IOException {
            FileSystem fs = FileSystem.get(conf);
            Path dir = new Path(dirName);
            boolean res = fs.mkdirs(dir);
            fs.close();
            return res;
        }
    • 删除文件(夹)
    1 // 删除文件(夹)
    2     public static boolean deleteDir(String dirName, Configuration conf) throws Exception {
    3         FileSystem fs = FileSystem.get(conf);
    4         boolean res = fs.delete(new Path(dirName), true);
    5         return res;
    6     }
    • 文件夹重命名
    1 // 文件(夹)重命名
    2     public static boolean reNameFile(String oldname, String rename, Configuration conf) throws Exception {
    3         FileSystem fs = FileSystem.get(conf);
    4         boolean res = fs.rename(new Path(oldname), new Path(rename));
    5         return res;
    6     }

    16.实现效果

    • 显示当前目录下所有文件

    • 文件上传

    • 文件下载

    • 新建文件夹

    • 文件(夹)重命名

    • 删除文件(夹)

    • 分享文件

     

    17.参考文献

    安装java1.6     http://www.cnblogs.com/ssslinppp/p/5923298.html

    CentOS常用的文件操作命令总结: http://www.haorooms.com/post/centeros_wj_zj

    Linux给用户添加sudo权限  :http://blog.chinaunix.net/uid-25305993-id-126661.html

     yarn-site.xml参数设置: http://blog.csdn.net/xiaoshunzi111/article/details/51221139

    VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射 :http://blog.csdn.net/yxc135/article/details/8458939

    hadoop(2.x)以hadoop2.2为例完全分布式最新高可靠安装文档:  http://www.aboutyun.com/thread-7684-1-1.html

    Hadoop之Secondary NameNode :  http://blog.csdn.net/zwto1/article/details/50839191

     hadoop2.x常用端口、定义方法及默认端口、hadoop1.X端口对比和新旧 Hadoop 脚本 / 变量 / 位置变化表:  http://www.aboutyun.com/thread-7513-1-1.html

     

  • 相关阅读:
    i春秋——春秋争霸write up
    2017-2018-2 《网络对抗技术》20155322 Exp6 信息搜集与漏洞扫描
    2017-2018-2 《网络对抗技术》 20155322 Exp 5 MSF基础应用
    OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现
    2017-2018-2 《网络对抗技术》 20155322 Exp4 恶意代码分析
    MacOS下netstat和lsof使用的若干问题
    OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建
    2017-2018-2 《网络对抗技术》 20155322 Exp3 免杀原理与实践
    2017-2018-2 《网络对抗技术》 20155322 第五周 Exp2 后门原理与实践
    信息安全铁人三项赛--资质赛writeup
  • 原文地址:https://www.cnblogs.com/landiljy/p/6946116.html
Copyright © 2020-2023  润新知