您的位置:首页 > 大数据 > Hadoop

Spark学习笔记(三) Ubuntu搭建Hadoop分布式集群

2018-09-21 18:14 731 查看

Ubuntu搭建Hadoop分布式集群

  • 2 搭建node
  • 2.3 在master上修改Hadoop配置
  • 2.4 将master上的hadoop配置文件同步到node
  • 3 启动Hadoop集群

  • 推荐一个好的翻译官方文档网站 (http://cwiki.apachecn.org/)

    运行环境

    因为是为了学习,且只有一台PC,只能在虚拟机里安装Hadoop

    软件配置 版本
    主机 Win7,内存8G
    虚拟机 VMware 14
    Linux ubuntu-14.04.5-desktop (使用ubuntu-18或16的话,电脑会比较卡)
    Hadoop 2.9.1
    JDK 1.8

    配置目标

    搭建一台NameNode名称为master,两台DataNode名称分别为node1和node2。

    搭建Hadoop分布式集群步骤

    1 搭建master

    新建一个Ubuntu虚拟机,命名为ubuntu_14_master。
    如何在VMware里安装Ubuntu?,网上教程很多。

    1.1 安装JDK

    安装JDK的步骤参考之前的博客Hadoop学习笔记(一) Ubuntu安装JDK和ssh

    1.2 安装SSH

    SSH的工作原理自行百度吧

    #查看ssh的状态判断是否已经安装了ssh,如果返回ssh: unrecognized service,说明没有安装ssh
    $ sudo service ssh status
    
    #或者如下命令查看是否有ssh的进程
    $ sudo ps -e | grep ssh
    
    #如果没有安装ssh,输入如下2个命令安装
    # 1.下载最新的软件列表
    $ sudo apt-get update
    
    # 2.Ubuntu缺省没有安装SSH Server,安装如下
    $ sudo apt-get install openssh-server
    
    #如果ssh没有启动,输入下面命令启动
    $ sudo service ssh start
    
    #Ubuntu14没有在当前目录打开终端的选项,这个插件装下
    $ sudo apt-get install nautilus-open-terminal

    这时暂不生成秘钥,等搭建好node后再生成

    1.3 安装Hadoop

    安装Hadoop参考之前的博客Hadoop学习笔记(二) 安装Hadoop单节点集群
    但是只要操作到第2点配置.bashrc文件就行,第3点修改Hadoop配置文件的不用看

    2 搭建node

    2.1 从master克隆出node

    把master虚拟机关机后,右击master,选择管理>克隆,并在下一步后选择完整克隆

    克隆出2个node虚拟机,命名如下

    2.2 设置master和node之间SSH通信

    2.2.1 在master上修改hostsname

    #在master上修改hostname,保存为master
    winter@master:~$ sudo gedit /etc/hostname

    2.2.2 在node1和node2上修改hostsname

    node1和node2上修改hostname分别为node1和node2,步骤和上面master的一样

    2.2.3 修改host文件

    #查看ip地址,下图中红框是ip
    $ ifconfig

    #3台机器的ip都查询好后,在3台机器上都修改host文件
    $ sudo gedit /etc/hosts

    2.2.4 在master上生成ssh秘钥

    #此操作是在master上,没有.ssh文件夹就执行ssh localhost
    # 1.产生SSH Key
    $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    
    # 2.将产生的SSH Key放到许可证文件中
    $ cat id_rsa.pub >> authorized_keys
    
    # 3.验证连接访问自己,输入密码登入,输入exit登出
    $ ssh localhost

    可以看出.ssh下面生成了几个文件

    2.2.5 在node1和node2上生成ssh秘钥

    # 1.产生SSH Key,这个是在node上操作
    $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

    2.2.6 将所有node节点上的公钥id_rsa.pub发送到master上

    # 在node1上将公钥拷贝到master上
    winter@node1:~/.ssh$ scp id_rsa.pub winter@master:~/.ssh/id_rsa_node1.pub
    
    # 在node2上将公钥拷贝到master上
    winter@node2:~/.ssh$ scp id_rsa.pub winter@master:~/.ssh/id_rsa_node2.pub

    2.2.7 在master上将node的公钥放入authorized_keys文件里

    winter@master:~/.ssh$ cat id_rsa_node1.pub >> authorized_keys
    winter@master:~/.ssh$ cat id_rsa_node2.pub >> authorized_keys
    
    #之后要删掉id_rsa_node1.pub和id_rsa_node2.pub
    $ rm -rf id_rsa_node1.pub
    $ rm -rf id_rsa_node2.pub

    2.2.8 将master上的authorized_keys 拷贝到node1和node2上

    # 在master上操作,winter是我的用户名
    $  scp authorized_keys winter@node1:~/.ssh/authorized_keys
    $  scp authorized_keys winter@node2:~/.ssh/authorized_keys

    2.2.9 验证master和node直接的免密码登录

    登录后如果不用输入密码说明配置成功,登录别的机器后要输入exit退出

    #在master上
    $ ssh node1
    $ ssh node2
    
    #在node1上
    $ ssh master
    $ ssh node2
    
    #在node2上
    $ ssh node1
    $ ssh master

    2.3 在master上修改Hadoop配置

    2.3.1 core-site.xml

    在hadoop目录下新建tmp目录,存放临时文件

    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
    </property>
    <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/hadoop/tmp</value>
    </property>
    </configuration>

    2.3.2 hdfs-site.xml

    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/local/hadoop/hadoop_data/hdfs/namenode</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value>
    </property>
    </configuration>

    2.3.3 yarn-site.xml

    <configuration>
    
    <!-- Site specific YARN configuration properties -->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>master</value>
    </property>
    </configuration>

    2.3.4 mapred-site.xml

    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>

    2.3.5 slaves文件

    node1
    node2

    2.3.6 hadoop-env.sh文件

    # The java implementation to use.
    export JAVA_HOME=/usr/lib/jdk/jdk1.8

    2.4 将master上的hadoop配置文件同步到node

    以下是在master上操作

    #在master上新建namenode
    $ sudo mkdir -p /usr/local/hadoop/hadoop_data/hdfs/namenode
    $ sudo chown winter:winter -R /usr/local/hadoop
    
    #在master上登录node1
    winter@master:~$ ssh node1
    
    #新建datanode目录
    $ sudo mkdir -p /usr/local/hadoop/hadoop_data/hdfs/datanode
    
    # 将hadoop目录的权限给winter这个用户
    winter@node1:~$ sudo chown winter:winter -R /usr/local/hadoop
    
    #退出node1
    winter@node1:~$ exit
    
    #拷贝配置文件到node1
    winter@master:~$ scp -r /usr/local/hadoop/etc/hadoop/* winter@node1:/usr/local/hadoop/etc/hadoop
    
    #node2和node1一样操作

    3 启动Hadoop集群

    3.1格式化namenode

    #格式化namenode目录,就执行一次,以后启动不要执行这条语句
    winter@master:~$ hadoop namenode -format

    如果datanode进程没有起来,报All specified directories are failed to load
    参考 解决方法

    3.2 启动集群

    #启动HDFS
    $ start-dfs.sh
    
    #启动MapReduce框架 YARN
    $ start-yarn.sh

    3.3 关闭hadoop

    #关闭进程
    $ stop-dfs.sh
    $ stop-yarn.sh
    使用jps查看进程,以上进程都已关闭

    阅读更多
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: