全程不推荐使用 root 操作,我采用的用户名是 junbaor

环境

  • OpenJDK-1.8

  • Hadoop 2.7.3

  • Ubuntu Server 17.04 (三台)

环境准备

  1. 安装 VMware Workstation

  2. 下载 Ubuntu Server 镜像
    地址: https://mirrors.aliyun.com/ub...

  3. 安装过程自行解决,注意网络连接方式选择桥接, 不要复制物理主机网络

  4. 安装完成后克隆出另外两台, 选择完全克隆

  5. 分别修改每台虚拟机的主机名, 编辑 /etc/hostname ,完成后重启生效

  6. 修改所有主机的 /etc/hosts 文件, 不需要动 ipv6 部分

例如:

127.0.0.1       localhost

192.168.31.129  server-1
192.168.31.246  server-2
192.168.31.51   server-3

安装 jdk

sudo apt install openjdk-8-jdk -y

执行 java -version 可以看到版本号,
安装目录在/usr/lib/jvm/java-8-openjdk-amd64, 记下待会儿会用到

下载 Hadoop

wget http://mirrors.ustc.edu.cn/apache/hadoop/common/stable2/hadoop-2.7.3.tar.gz
tar zxvf hadoop-2.7.3.tar.gz
cd hadoop-2.7.3

配置免密码登录

cd ~/.ssh
ssh-keygen -t rsa

一直按回车,目录会生成 id_rsa 和 id_rsa.pub 文件

cat id_rsa.pub >> ./authorized_keys

需要把 id_rsa 和 authorized_keys 复制到其他子节点, 我们使用 scp 命令同步

scp id_rsa server-2:~/.ssh/
scp id_rsa server-3:~/.ssh/

scp authorized_keys server-2:~/.ssh/
scp authorized_keys server-3:~/.ssh/

分别在每台主机上连接其他主机

例如在 server-1 上

ssh server-2

询问授权时输入Y, 如果能连入, 使用 exit 命令退出, 继续尝试其他主机,直到集群中的所有主机可以两两相通

2017年6月20日补充:可以修改 ssh 的 StrictHostKeyChecking no 配置达到连接新主机不需要输入 Y 验证的目的.

配置 Hadoop

配置 JAVA_HOME

进入到 hadoop-2.7.3 的 /etc/hadoop/ 目录, 编辑 hadoop-env.sh 文件
找到 JAVA_HOME 改为 JDK 的安装目录

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

修改 slaves

将 localhost 删除, 填入两个从节点的主机名

server-2
server-3

修改 core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://server-1:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/junbaor/hadoop/tmp</value>
    </property>
</configuration>

修改 hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>server-1:50090</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/junbaor/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/junbaor/tmp/dfs/data</value>
    </property>
</configuration>

编辑 mapred-site.xml

目录下么没有这个文件,这有一个模板,我们需要先拷贝一份

cp  mapred-site.xml.template mapred-site.xml

然后编辑

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>server-1:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>server-1:19888</value>
    </property>
</configuration>

修改 yarn-site.xml

<configuration>
    
    <!-- Site specific YARN configuration properties -->
    
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>server-1</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

复制到从节点

将 hadoop-2.7.3 文件夹重打包后复制到其他子节点

tar zcvf hadoop.tar.gz hadoop-2.7.3
scp hadoop.tar.gz server-2:/home/junbaor/
scp hadoop.tar.gz server-3:/home/junbaor/

然后在各子节点解压, 推荐集群中所有的文件目录结构保持一致

启动

启动停止操作只在主节点执行即可

首次启动需要先在 Master 节点执行 NameNode 的格式化:
cd 到 hadoop-2.7.3/bin 目录下,执行 ./hdfs namenode -format

然后就可以启动 hadoop
cd 到 hadoop-2.7.3/sbin 目录

./start-dfs.sh
./start-yarn.sh
./mr-jobhistory-daemon.sh start historyserver

查询状态

可以通过 jps 命令查看 java 进程, 缺少以下任一进程都表示出错

#主节点执行结果:  
NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer

#从节点执行结果:
DataNode、NodeManager 

如果主机点缺少 NameNode 请检查是否执行了 NameNode 的格式化或者检查各节点的 NameNode 日志

另外还需要在主节点上通过 bin 下的 ./hdfs dfsadmin -report命令查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功

也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://server-1:50070
或者通过 http://server-1:8088 查看集群状态

参考资料

http://www.powerxing.com/inst...


junbaor
847 声望36 粉丝

广泛涉略,快速学习