环境介绍
- CentOS 7.3 - 1611 Minimal
- JDK 1.8
- Hadoop 2.7.4
- HBase 1.2.6
- Scala 2.11.8
- Spark 2.1.1
- Zookeeper 3.4.8
我直接用的是 root 账户,虽然这样不太好,但是可以简单粗暴的避免一些权限问题
所有的安装包置于 /opt 目录下
1 | cd /opt |
2 安装配置
首先安装 CentOS-7-x86_64-Minimal-1611.iso
,安装完成后进行如下配置
2.1 IP 地址
配置过程略,可以 Google 一下网上有很多的教程
本教程的 IP 地址为 10.109.246.66
2.2 关闭并禁用防火墙
1 | systemctl stop firewalld.service |
2.3 hostname
修改主机名
1 | hostname data |
修改 hosts,增加以下两行
1 | vim /etc/hosts |
1 | 127.0.0.1 localhost |
2.4 SSH
修改 enforcing
为 disabled
1 | vim /etc/sysconfig/selinux |
修改完成后重启 Linux
1 | reboot |
启动完成后,继续执行下面的命令,并一路回车,这样就会生成 ssh key
1 | ssh-keygen -t rsa |
接下来配置 SSH 免密码登录
,为了保险起见,这里同时配置 localhost、data(hostname) 和 10.109.246.66(IP 地址) 共三个地址
执行命令的过程中会输入 yes 和服务器密码
1 | ssh-copy-id localhost |
ssh-copy-id 是什么?
免密登录的原理是将客户端的 SSH 公钥 id_rsa.pub 加到服务器的 known_hosts,这样以后再登录的时候服务器检查自己的 known 文件,就直接允许登录。我们可以手动把客户端的公钥追加到服务器的 known 文件,但是这样比较繁琐,ssh-copy-id 是用来简化这个操作的一条命令。这条命令在客户端执行,参数为服务器的地址,这里由于我们是本机免密码,所以后面三个标识本质上都是本机地址
2.5 JDK 1.8
CentOS 7 以 Minimal 形式安装后系统比较干净,JDK 可以直接安装,系统不会自带 JAVA 相关的组件
RPM 版的安装方式
1 | rpm -ivh jdk-8u144-linux-x64.rpm |
安装完成后修改系统环境变量,这里一次性配齐了
1 | vim /etc/profile |
1 | # 将下面这些配置在profile文件的末尾 |
修改完成后保存退出,并执行下面的命令生效
1 | source /etc/profile |
测试 jdk
是否安装成功
1 | java -version |
出现下图表示没有问题
2.7 Hadoop
解压 hadoop
安装包
1 | cd /opt |
进入 hadoop
目录,新建 3 个文件夹
1 | cd /root/hadoop-2.7.4 |
进入配置文件目录,开始配置
1 | cd etc/hadoop |
hadoop-env.sh
1 | vim hadoop-env.sh |
core-site.xml
1 | vim core-site.xml |
1 | <property> |
hdfs-site.xml
1 | vim hdfs-site.xml |
1 | <property> |
yarn-site.xml
1 | vim yarn-site.xml |
1 | <property> |
mapred-site.xml
1 | cp mapred-site.xml.template mapred-site.xml |
1 | <property> |
slaves
1 | vim slaves |
将里面唯一的一行 localhost
替换成 data
,因为是单节点,所以它既是 NameNode 也是 DataNode
到这里配置完成,接下来启动 hadoop
环境变量已经配置好,可以直接使用命令。首次启动 HDFS
需要格式化
1 | hadoop namenode -format |
看到下图出现 hostname / IP 表明成功格式化
启动 HDFS,启动好后可以通过 web 的 50070
端口查看
1 | start-dfs.sh |
使用浏览器访问服务器的 50070 端口
我们在自己的电脑上可以配置 host,使得 data 指向服务器的 IP 地址,以后访问的时候就直接用 data 就可以,类似于域名的那种,而不用每次都敲 IP 地址
Windows 和 macOS 修改 host 的方法不同,如果是 mac 的小伙伴推荐使用一个工具叫做 SwitchHost
如何验证自己的电脑 host 有没有配置好呢?在本机使用如下命令,实际上它会在 host 中找到对应的 IP 地址,如果和服务器一致就表明没有问题
1 | ping data |
在服务器上,使用 jps 命令看一下当前运行的 java 进程
可以看到出现了 NameNode、DataNode 以及 SecondaryNameNode,表明 HDFS 在正常工作
下面我们简单测试一下 HDFS,需要先准备一个测试文件 hello.txt,里面自己随便写一些内容
这时候也可以通过 web 的 50070 端口查看 HDFS 上的文件列表,上面已经出现了刚刚上传的 hello.txt 文件,可以下载下来比对一下内容和刚开始自己写入的内容是否一致
接下来按下面的命令启动 YARN,启动好后可以通过 8088 端口查看
1 | start-yarn.sh |
在 web 界面里面可以查看 YARN 的详细信息,例如资源情况,任务详情等
到这里再次执行 jps
命令,查看启动的进程
1 | jps |
相比之前,多了 ResourceManager 和 NodeManager,这正是 YARN 的资源管理组件
这里也简单测试一下 YARN,跑一个 Hadoop 自带的 example 中的任意一个 MapReduce 作业,我们以 pi 为例
1 | cd /root/hadoop-2.7.4/share/hadoop/mapreduce |
第二条命令运行完以后会出现如下结果,简单解释一下:example 那个 jar 包里面有很多的官方自带的例子,其中 pi 是其中一个,它用来计算圆周率的值,最后的两个 6 是两个参数,理论上值越大最后求出的 pi 的精度越高,读者可以修改最后的两个值改的大一些,看看结果有什么不同
另外在任务运行的过程中可以通过 8088 端口查看 YARN 的监控数据,其中会显示当前执行的任务的详情
在任务的执行过程中不断使用 jps 命令查看进程情况
首先是出现了 RunJar
然后出现了 MRAppMaster
最后出现了多个 YarnChild
任务结束后在 web 上可以看到这个任务的详情
Scala
下面我们安装 Scala,它是一种运行在 JVM 上的编程语言,Spark 就是用 scala 开发的
1 | cd /opt |
修改配置文件
1 | vim /etc/profile |
1 | export SCALA_HOME=/root/scala-2.11.8 |
修改完成后 source 一下使之生效
1 | source /etc/profile |
测试一下,出现 scala 的版本证明安装完成
Spark
解压安装包
1 | cd /opt |
配置环境变量
1 | vim /etc/profile |
生效
1 | source /etc/profile |
进入 Spark 配置目录
1 | cd /root/spark-2.1.1-bin-hadoop2.7/conf |
spark-env.sh
1 | cp spark-env.sh.template spark-env.sh |
1 | # 最后增加 |
slaves:将原来的内容删掉,增加一行 data
1 | cp slaves.template slaves |
启动 Spark
Spark 目录下的 sbin 目录是启动和停止 spark 相关组件的命令,但是它和 Hadoop 的 sbin 目录下的脚本在命名上有些是一致的(比如 start-all.sh),所以没有把 Spark 的 sbin 目录加入的系统的环境变量中
1 | cd /root/spark-2.1.1-bin-hadoop2.7/sbin |
这时候使用 jps 命令查看进程,可以发现多了 Worker
和 Master
测试:由于测试的命令比较长,新建一个脚本文件
1 | vim test_spark.sh |
1 | # 增加如下内容 |
添加执行权限
1 | chmod 777 test_spark.sh |
执行
1 | ./test_spark.sh |
在众多的控制台日志中找到 Pi is rough 3.141xxxx
说明一切是 OK 的